diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index ad82d86b426..de0def5d91d 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -2,15 +2,5 @@ #To make use of this file by default, run 'git config blame.ignoreRevsFile .git-blame-ignore-revs' #in the project folder -## Line ending conversions - -# Force LF line endings with gitattributes and convert repo -62676e72a85cd23e7a87d94adff96d17859dbdc5 -# Line ending apocalypse -134a76cc8f5517bdc1bba5a8cbe01dc820df1c2a -# Initial pass to convert LF to CRLF -8af8a43d6f27e342e79d4aacb22b7668cbdc8559 -# Many changes -931da9e7ef8c0f52a768eed7998e7e62ccdefcdc -# Remove hideous inline tab indentation, and bans it in contributing guidelines -0f435d5dff0a7957e8cba60a41a7fc10439064c3 +## Naming changes +23b3274778693cdbca768cd0251e306cea090d12 diff --git a/README.md b/README.md index da9805985b3..8b1f8b6807b 100644 --- a/README.md +++ b/README.md @@ -37,14 +37,32 @@ On **May 9, 2022** we have changed the way to compile the codebase. [Guides for Contributors](.github/CONTRIBUTING.md) -[CitadelRP HACKMD account](https://hackmd.io/@CitadelStation13RP) +[CitadelRP HackMD - Design Documents & Planning](https://hackmd.io/@CitadelStation13RP) ## SQL Setup -The SQL backend for the library and stats tracking requires a MySQL server. +The SQL backend for the library and stats tracking requires a MariaDB server. Your server details go in /config/legacy/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql. More detailed setup instructions arecoming soon, for now ask in our Discord. +todo: update this section + +## Static Files + +The following folders are considered 'static folders' and should be added to TGS4's static files: + +These are also the folders you are likely going to encounter while managing the server. + +- /config: server configuration + - /legacy: legacy configuration data go in here +- /data: server persistent data + - /logs: logs are dumped in here + - /players: player data, like saves and characters get dumped in here + +You only need to make the top level folders (e.g. config, data) static folders in TGS4. + +Subfolders are automatically included. + ## LICENSE The code for Citadel-Station-13-RP is licensed under the [GNU AGPL v3](http://www.gnu.org/licenses/agpl-3.0.html). diff --git a/SQL/database_schema.sql b/SQL/database_schema.sql index 9d827388db4..f7237e6ac2d 100644 --- a/SQL/database_schema.sql +++ b/SQL/database_schema.sql @@ -128,7 +128,7 @@ CREATE TABLE IF NOT EXISTS `%_PREFIX_%photographs` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; --- players -- +-- Players -- -- Player lookup table -- -- Used to look up player ID from ckey, as well as -- @@ -153,6 +153,7 @@ CREATE TABLE IF NOT EXISTS `%_PREFIX_%player` ( `flags` int(24) NOT NULL DEFAULT 0, `firstseen` datetime NOT NULL DEFAULT Now(), `lastseen` datetime NOT NULL, + `misc` MEDIUMTEXT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -194,6 +195,25 @@ END $$ DELIMITER ; + +-- Preferences -- + +-- Stores game preferences -- +CREATE TABLE IF NOT EXISTS `%_PREFIX_%game_preferences` ( + `player` INT(11) NOT NULL, + `entries` MEDIUMTEXT NOT NULL, + `misc` MEDIUMTEXT NOT NULL, + `keybinds` MEDIUMTEXT NOT NULL, + `toggles` MEDIUMTEXT NOT NULL, + `modified` DATETIME NOT NULL, + `version` INT(11) NOT NULL, + PRIMARY KEY (`player`), + CONSTRAINT `linked_player` FOREIGN KEY (`player`) + REFERENCES `%_PREFIX_%player` (`id`) + ON DELETE CASCADE + ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + -- Security - Ipintel -- -- Ipintel Cache Table -- diff --git a/SQL/database_schema_prefixed.sql b/SQL/database_schema_prefixed.sql index e792364b8f7..58b5b32cc10 100644 --- a/SQL/database_schema_prefixed.sql +++ b/SQL/database_schema_prefixed.sql @@ -128,7 +128,7 @@ CREATE TABLE IF NOT EXISTS `rp_photographs` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; --- players -- +-- Players -- -- Player lookup table -- -- Used to look up player ID from ckey, as well as -- @@ -153,6 +153,7 @@ CREATE TABLE IF NOT EXISTS `rp_player` ( `flags` int(24) NOT NULL DEFAULT 0, `firstseen` datetime NOT NULL DEFAULT Now(), `lastseen` datetime NOT NULL, + `misc` MEDIUMTEXT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -194,6 +195,25 @@ END $$ DELIMITER ; + +-- Preferences -- + +-- Stores game preferences -- +CREATE TABLE IF NOT EXISTS `rp_game_preferences` ( + `player` INT(11) NOT NULL, + `entries` MEDIUMTEXT NOT NULL, + `misc` MEDIUMTEXT NOT NULL, + `keybinds` MEDIUMTEXT NOT NULL, + `toggles` MEDIUMTEXT NOT NULL, + `modified` DATETIME NOT NULL, + `version` INT(11) NOT NULL, + PRIMARY KEY (`player`), + CONSTRAINT `linked_player` FOREIGN KEY (`player`) + REFERENCES `rp_player` (`id`) + ON DELETE CASCADE + ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + -- Security - Ipintel -- -- Ipintel Cache Table -- diff --git a/citadel.dme b/citadel.dme index 97f80de0530..4535fc5d5f7 100644 --- a/citadel.dme +++ b/citadel.dme @@ -78,7 +78,6 @@ #include "code\__DEFINES\shuttle.dm" #include "code\__DEFINES\shuttles.dm" #include "code\__DEFINES\singletons.dm" -#include "code\__DEFINES\skin.dm" #include "code\__DEFINES\sonar.dm" #include "code\__DEFINES\space.dm" #include "code\__DEFINES\spaceman_dmm.dm" @@ -131,6 +130,7 @@ #include "code\__DEFINES\atmospherics\machinery\scrubber.dm" #include "code\__DEFINES\atmospherics\machinery\vent.dm" #include "code\__DEFINES\cargo\supply.dm" +#include "code\__DEFINES\client\game_preferences.dm" #include "code\__DEFINES\client\player_flags.dm" #include "code\__DEFINES\client\playtime.dm" #include "code\__DEFINES\color\color.dm" @@ -200,6 +200,8 @@ #include "code\__DEFINES\fishing\aquarium.dm" #include "code\__DEFINES\fishing\fish.dm" #include "code\__DEFINES\fishing\fishing.dm" +#include "code\__DEFINES\interface\skin.dm" +#include "code\__DEFINES\interface\verbs.dm" #include "code\__DEFINES\inventory\accessories.dm" #include "code\__DEFINES\inventory\bodytypes.dm" #include "code\__DEFINES\inventory\carry_weight.dm" @@ -532,6 +534,7 @@ #include "code\controllers\subsystem\planets.dm" #include "code\controllers\subsystem\plants.dm" #include "code\controllers\subsystem\playtime.dm" +#include "code\controllers\subsystem\preferences.dm" #include "code\controllers\subsystem\radiation.dm" #include "code\controllers\subsystem\repository.dm" #include "code\controllers\subsystem\research.dm" @@ -1246,7 +1249,6 @@ #include "code\game\machinery\transportpod.dm" #include "code\game\machinery\turnstile.dm" #include "code\game\machinery\turret_control.dm" -#include "code\game\machinery\vending.dm" #include "code\game\machinery\vitals_monitor.dm" #include "code\game\machinery\wall_frames.dm" #include "code\game\machinery\washing_machine.dm" @@ -1350,6 +1352,17 @@ #include "code\game\machinery\teleporter\console.dm" #include "code\game\machinery\teleporter\pad.dm" #include "code\game\machinery\teleporter\projector.dm" +#include "code\game\machinery\vending\drinks.dm" +#include "code\game\machinery\vending\engineering.dm" +#include "code\game\machinery\vending\loadout.dm" +#include "code\game\machinery\vending\medical.dm" +#include "code\game\machinery\vending\misc.dm" +#include "code\game\machinery\vending\plants.dm" +#include "code\game\machinery\vending\research.dm" +#include "code\game\machinery\vending\security.dm" +#include "code\game\machinery\vending\service.dm" +#include "code\game\machinery\vending\snacks.dm" +#include "code\game\machinery\vending\vending.dm" #include "code\game\machinery\virtual_reality\ar_console.dm" #include "code\game\machinery\virtual_reality\vr_console.dm" #include "code\game\machinery\vitruvius\anti_heater.dm" @@ -2389,15 +2402,21 @@ #include "code\modules\client\wrappers.dm" #include "code\modules\client\data\client_data.dm" #include "code\modules\client\data\player_data.dm" +#include "code\modules\client\game_preferences\game_preference_entry.dm" +#include "code\modules\client\game_preferences\game_preference_middleware.dm" +#include "code\modules\client\game_preferences\game_preference_toggle.dm" +#include "code\modules\client\game_preferences\game_preferences.dm" +#include "code\modules\client\game_preferences\entries\game.dm" +#include "code\modules\client\game_preferences\entries\graphics.dm" +#include "code\modules\client\game_preferences\middleware\keybindings.dm" +#include "code\modules\client\game_preferences\middleware\toggles.dm" #include "code\modules\client\onboarding\_onboarding.dm" #include "code\modules\client\onboarding\age_verification.dm" #include "code\modules\client\onboarding\panic_bunker.dm" #include "code\modules\client\onboarding\security_checks.dm" #include "code\modules\client\verbs\minimap.dm" #include "code\modules\client\verbs\ooc.dm" -#include "code\modules\client\verbs\panic_bunker_player.dm" -#include "code\modules\client\verbs\ping.dm" -#include "code\modules\client\verbs\preferences.dm" +#include "code\modules\client\verbs\system.dm" #include "code\modules\client\verbs\view.dm" #include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\clothing.dm" @@ -3171,6 +3190,7 @@ #include "code\modules\maps\misc_maps\lavaland\_lavaland.dm" #include "code\modules\maps\overmap\planets\_lythios43c.dm" #include "code\modules\maps\overmap\planets\_virgo3b.dm" +#include "code\modules\maps\overmap\planets\admin_croatoan.dm" #include "code\modules\maps\overmap\planets\classd.dm" #include "code\modules\maps\overmap\planets\classg.dm" #include "code\modules\maps\overmap\planets\classh.dm" @@ -3593,6 +3613,7 @@ #include "code\modules\mob\living\silicon\pai\death.dm" #include "code\modules\mob\living\silicon\pai\defense.dm" #include "code\modules\mob\living\silicon\pai\examine.dm" +#include "code\modules\mob\living\silicon\pai\hologram_effect.dm" #include "code\modules\mob\living\silicon\pai\life.dm" #include "code\modules\mob\living\silicon\pai\mobility.dm" #include "code\modules\mob\living\silicon\pai\pai.dm" @@ -4219,16 +4240,12 @@ #include "code\modules\preferences\preference_setup\general\04_equipment.dm" #include "code\modules\preferences\preference_setup\general\05_background.dm" #include "code\modules\preferences\preference_setup\general\06_flavor.dm" -#include "code\modules\preferences\preference_setup\global\01_ui.dm" #include "code\modules\preferences\preference_setup\global\02_settings.dm" #include "code\modules\preferences\preference_setup\global\03_pai.dm" #include "code\modules\preferences\preference_setup\global\04_ooc.dm" #include "code\modules\preferences\preference_setup\global\05_media.dm" -#include "code\modules\preferences\preference_setup\global\language_prefix.dm" -#include "code\modules\preferences\preference_setup\global\setting_datums.dm" #include "code\modules\preferences\preference_setup\helpers\language_pick.dm" #include "code\modules\preferences\preference_setup\helpers\species_pick.dm" -#include "code\modules\preferences\preference_setup\keybindings\keybindings.dm" #include "code\modules\preferences\preference_setup\loadout\loadout.dm" #include "code\modules\preferences\preference_setup\occupation\occupation.dm" #include "code\modules\preferences\preference_setup\vore\01_ears.dm" diff --git a/code/__DEFINES/client/game_preferences.dm b/code/__DEFINES/client/game_preferences.dm new file mode 100644 index 00000000000..7fe82c5f8f1 --- /dev/null +++ b/code/__DEFINES/client/game_preferences.dm @@ -0,0 +1,32 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +//* Versioning *// + +// Migration Directives: +// * prefer append-update instead of change-remove. +// append-update means write new, changed data instead of overwrite old data +// this means that reverting a testmerge doesn't cause problems. + +// todo: how to do migration in a downstream-friendly way? current +// would require downstreams to manually edit code. +// this is bad! + +// current version; bump to trigger migrations +#define GAME_PREFERENCES_VERSION_CURRENT 1 +// prefs start at this version when legacy +#define GAME_PREFERENCES_VERSION_LEGACY 1 +// at or below this, we throw out all data +#define GAME_PREFERENCES_VERSION_DROP 0 + +//* Misc Keys *// + +/// boolean value for if we're in hotkeys mode +#define GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE "hotkey-mode" + +//* Category Names + +// these are the same due to low entry count + +#define GAME_PREFERENCE_CATEGORY_GAME "Game" +#define GAME_PREFERENCE_CATEGORY_GRAPHICS "Game" diff --git a/code/__DEFINES/controllers/_subsystems.dm b/code/__DEFINES/controllers/_subsystems.dm index 49fd3741c40..58c84f5d48c 100644 --- a/code/__DEFINES/controllers/_subsystems.dm +++ b/code/__DEFINES/controllers/_subsystems.dm @@ -84,6 +84,7 @@ DEFINE_BITFIELD(runlevels, list( #define INIT_ORDER_EARLY_INIT 185 #define INIT_ORDER_REPOSITORY 180 #define INIT_ORDER_STATPANELS 170 +#define INIT_ORDER_PREFERENCES 165 #define INIT_ORDER_INPUT 160 #define INIT_ORDER_JOBS 150 #define INIT_ORDER_CHARACTERS 140 diff --git a/code/__DEFINES/skin.dm b/code/__DEFINES/interface/skin.dm similarity index 92% rename from code/__DEFINES/skin.dm rename to code/__DEFINES/interface/skin.dm index 7772d625134..f4c2eeea2f8 100644 --- a/code/__DEFINES/skin.dm +++ b/code/__DEFINES/interface/skin.dm @@ -1,3 +1,6 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + //? WINCLONE IDs; NO SKIN CONTROL MAY HAVE THESE IDs, OR WINCLONE WILL NOT CREATE "NAKED" CONTROLS OF THIS TYPE! #define SKIN_ID_ABSTRACT_MENU "menu" #define SKIN_ID_ABSTRACT_WINDOW "window" @@ -17,6 +20,10 @@ /// main window split #define SKIN_SPLITTER_ID_MAIN "mainwindow.split" +//* Chat System +#define SKIN_OUTPUT_ID_LEGACY_CHAT "output" +#define SKIN_BROWSER_ID_CHAT "outputbrowser" + //* Cutscene System #define SKIN_BROWSER_ID_CUTSCENE "cutscenebrowser" diff --git a/code/__DEFINES/interface/verbs.dm b/code/__DEFINES/interface/verbs.dm new file mode 100644 index 00000000000..22a3b39eb81 --- /dev/null +++ b/code/__DEFINES/interface/verbs.dm @@ -0,0 +1,9 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +#define VERB_CATEGORY_IC "IC" +#define VERB_CATEGORY_OOC "OOC" +#define VERB_CATEGORY_OBJECT "Object" +#define VERB_CATEGORY_SYSTEM "System" + +// todo: admin verb categories too diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 75181326947..d3dd80bd1c4 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -424,13 +424,13 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) if (config_legacy.log_debug) WRITE_LOG(GLOB.world_runtime_log, "DEBUG: [text]") - for(var/client/C in GLOB.admins) - if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs)) - to_chat(C, - type = MESSAGE_TYPE_DEBUG, - html = "DEBUG: [text]", - confidential = TRUE, - ) + // for(var/client/C in GLOB.admins) + // if(C.get_preference_toggle(/datum/client_preference/debug/show_debug_logs)) + // to_chat(C, + // type = MESSAGE_TYPE_DEBUG, + // html = "DEBUG: [text]", + // confidential = TRUE, + // ) /proc/log_ghostsay(text, mob/speaker) if (config_legacy.log_say) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index e5511d5a9f6..4dcc1910152 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -267,7 +267,7 @@ var/turf/ear = get_turf(M) if(ear) // Ghostship is magic: Ghosts can hear radio chatter from anywhere - if(speaker_coverage[ear] || (istype(M, /mob/observer/dead) && M.is_preference_enabled(/datum/client_preference/ghost_radio))) + if(speaker_coverage[ear] || (istype(M, /mob/observer/dead) && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_radio))) . |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down. return . @@ -308,11 +308,11 @@ switch(type) // Audio messages use ghost_ears. if(1) - if(M.is_preference_enabled(/datum/client_preference/ghost_ears)) + if(M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears)) mobs |= M // Visual messages use ghost_sight. if(2) - if(M.is_preference_enabled(/datum/client_preference/ghost_sight)) + if(M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_sight)) mobs |= M // For objects below the top level who still want to hear. diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index e4a7c7c0050..08ba49b5fd2 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -320,41 +320,6 @@ /proc/capitalize(t as text) return uppertext(copytext_char(t, 1, 2)) + copytext_char(t, 2) -/** - * Syntax is "stringtoreplace"="stringtoreplacewith". - */ -/proc/autocorrect(input as text) - return input = replace_characters(input, list( - " i " = " I ", - "i'm" = "I'm", - "s's" = "s'", - "isnt" = "isn't", - "dont" = "don't", - "shouldnt" = "shouldn't", - " ive " = " I've ", - "whove" = "who've", - "whod" = "who’d", - "whats " = "what’s ", - "whatd" = "what’d", - "thats" = "that’s", - "thatll" = "that’ll", - "thatd" = "that’d", - " nows " = " now’s ", - "isnt" = "isn’t", - " arent " = " aren’t ", - "wasnt" = "wasn’t", - "werent" = "weren’t", - "havent" = "haven’t", - "hasnt" = "hasn’t", - "hadnt" = "hadn’t", - "doesnt" = "doesn’t", - "didnt" = "didn’t", - "couldnt" = "couldn’t", - "wouldnt" = "wouldn’t", - "mustnt" = "mustn’t", - "shouldnt" = "shouldn’t", - )) - /** * This proc strips html properly, remove < > and all text between * for complete text sanitizing should be used sanitize() @@ -460,7 +425,7 @@ GLOBAL_VAR_INIT(text_tag_icons, new /icon('./icons/chattags.dmi')) /proc/create_text_tag(tagname, tagdesc = tagname, client/C) - if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) + if(!(C && C.get_preference_toggle(/datum/game_preference_toggle/chat/legacy_chat_tags))) return tagdesc return icon2html(GLOB.text_tag_icons, C, tagname) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 2e3e736f72b..1cda55518d3 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -430,7 +430,7 @@ var/list/creatures = list() var/list/namecounts = list() for(var/mob/M in mobs) - if(isobserver(M) && ghostfollow && M.client?.holder && M.client.holder.fakekey && M.is_preference_enabled(/datum/client_preference/holder/stealth_ghost_mode)) + if(isobserver(M) && ghostfollow && M.client?.holder && M.client.holder.fakekey && M.get_preference_toggle(/datum/game_preference_toggle/admin/stealth_hides_ghost)) continue var/name = M.name if (name in names) diff --git a/code/controllers/configuration/entries/cross_server.dm b/code/controllers/configuration/entries/cross_server.dm index d8d29b91312..9a7bd1f9d92 100644 --- a/code/controllers/configuration/entries/cross_server.dm +++ b/code/controllers/configuration/entries/cross_server.dm @@ -1,28 +1,14 @@ +// todo: we need to rethink if we need/want a cluster at some point (and why is the answer yes :^)) +// and how to orchestrate. topics are nice, but they shouldn't be the end-all backend for this. +// +// not to mention we also need a cross-server/unified DB. +// 2025 DB rework..? + /datum/config_entry/string/comms_key protection = CONFIG_ENTRY_HIDDEN /datum/config_entry/string/comms_key/ValidateAndSet(str_val) return str_val != "default_pwd" && length(str_val) > 6 && ..() -// todo: remove -/datum/config_entry/keyed_list/cross_server_bunker_override - key_mode = KEY_MODE_TEXT - value_mode = VALUE_MODE_TEXT - protection = CONFIG_ENTRY_LOCKED - -/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateAndSet(str_val) - . = ..() - if(.) - var/list/newv = list() - for(var/I in config_entry_value) - newv[replacetext(I, "+", " ")] = config_entry_value[I] - config_entry_value = newv - -/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateListEntry(key_name, key_value) - return key_value != "byond:\\address:port" && ..() - -/datum/config_entry/flag/allow_cross_server_bunker_override - protection = CONFIG_ENTRY_LOCKED - // todo: remove, cluster staging/organization should be in a database /datum/config_entry/string/cross_comms_name diff --git a/code/controllers/configuration_old/configuration.dm b/code/controllers/configuration_old/configuration.dm index 3bd2f44c053..95e30b2287e 100644 --- a/code/controllers/configuration_old/configuration.dm +++ b/code/controllers/configuration_old/configuration.dm @@ -225,12 +225,6 @@ var/list/gamemode_cache = list() - var/lock_client_view_x - var/lock_client_view_y - var/max_client_view_x - var/max_client_view_y - - /datum/configuration_legacy/New() var/list/L = subtypesof(/datum/game_mode) for (var/T in L) diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index fe3ef114b9c..8958eba3cd6 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -405,5 +405,8 @@ /datum/controller/subsystem/proc/on_max_z_changed(old_z_count, new_z_count) return -// todo: generic json-based save/load for subsystems, for simple state storage -// todo: generic K-V store for subsystems, for storing stuff that's rare needed but still persistent. +/** + * Called when SQL is reconnected after being disconnected + */ +/datum/controller/subsystem/proc/on_sql_reconnect() + return diff --git a/code/controllers/subsystem/dbcore/_dbcore.dm b/code/controllers/subsystem/dbcore/_dbcore.dm index a3fb78f2fd3..728980a93fc 100644 --- a/code/controllers/subsystem/dbcore/_dbcore.dm +++ b/code/controllers/subsystem/dbcore/_dbcore.dm @@ -15,6 +15,8 @@ SUBSYSTEM_DEF(dbcore) var/connection // Arbitrary handle returned from rust_g. + var/was_ever_connected = FALSE + /datum/controller/subsystem/dbcore/Initialize() //We send warnings to the admins during subsystem init, as the clients will be New'd and messages //will queue properly with goonchat @@ -95,6 +97,12 @@ SUBSYSTEM_DEF(dbcore) . = (result["status"] == "ok") if (.) connection = result["handle"] + if(was_ever_connected) + // we got re-connected. + for(var/datum/controller/subsystem/subsystem in Master.subsystems) + subsystem.on_sql_reconnect() + world.on_sql_reconnect() + was_ever_connected = TRUE else connection = null last_error = result["data"] @@ -361,3 +369,9 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table text = replacetext(text, ";", "") text = replacetext(text, "&", "") return text + +/** + * Override this proc when you need to hook into it. + */ +/world/proc/on_sql_reconnect() + return diff --git a/code/controllers/subsystem/playtime.dm b/code/controllers/subsystem/playtime.dm index 24802707054..4dbfd544fc6 100644 --- a/code/controllers/subsystem/playtime.dm +++ b/code/controllers/subsystem/playtime.dm @@ -67,6 +67,10 @@ SUBSYSTEM_DEF(playtime) . += PLAYER_PLAYTIME_ROLE(J.id) /datum/controller/subsystem/playtime/proc/queue_playtimes(client/C) + set waitfor = FALSE + queue_playtimes_sync(C) + +/datum/controller/subsystem/playtime/proc/queue_playtimes_sync(client/C) if(isnull(C)) return if(!C.initialized) diff --git a/code/controllers/subsystem/preferences.dm b/code/controllers/subsystem/preferences.dm new file mode 100644 index 00000000000..08bdf079e1c --- /dev/null +++ b/code/controllers/subsystem/preferences.dm @@ -0,0 +1,76 @@ +SUBSYSTEM_DEF(preferences) + name = "Preferences" + init_order = INIT_ORDER_PREFERENCES + subsystem_flags = SS_NO_FIRE + + var/list/datum/game_preference_entry/entries_by_key + var/list/datum/game_preference_toggle/toggles_by_key + var/static/list/datum/game_preferences/preferences_by_key = list() + +/datum/controller/subsystem/preferences/Initialize() + init_preference_entries() + init_preference_toggles() + return ..() + +/datum/controller/subsystem/preferences/proc/resolve_preference_entry(datum/game_preference_entry/entrylike) + if(ispath(entrylike)) + entrylike = initial(entrylike.key) + entrylike = entries_by_key[entrylike] + else if(istype(entrylike)) + else + entrylike = entries_by_key[entrylike] + return entrylike + +/datum/controller/subsystem/preferences/proc/resolve_preference_toggle(datum/game_preference_toggle/togglelike) + if(ispath(togglelike)) + togglelike = initial(togglelike.key) + togglelike = toggles_by_key[togglelike] + else if(istype(togglelike)) + else + togglelike = toggles_by_key[togglelike] + return togglelike + +/datum/controller/subsystem/preferences/proc/init_preference_entries() + . = list() + for(var/datum/game_preference_entry/casted as anything in subtypesof(/datum/game_preference_entry)) + if(initial(casted.abstract_type) == casted) + continue + casted = new casted + if(!casted.key || !istext(casted.key)) + STACK_TRACE("bad key: [casted.key]") + continue + if(!isnull(.[casted.key])) + STACK_TRACE("dupe key between [casted.type] and [.[casted.key]:type]") + continue + .[casted.key] = casted + entries_by_key = . + +/datum/controller/subsystem/preferences/proc/init_preference_toggles() + . = list() + for(var/datum/game_preference_toggle/casted as anything in subtypesof(/datum/game_preference_toggle)) + if(initial(casted.abstract_type) == casted) + continue + casted = new casted + if(!casted.key || !istext(casted.key)) + STACK_TRACE("bad key: [casted.key]") + continue + if(!isnull(.[casted.key])) + STACK_TRACE("dupe key between [casted.type] and [.[casted.key]:type]") + continue + .[casted.key] = casted + toggles_by_key = . + +/datum/controller/subsystem/preferences/proc/resolve_game_preferences(key, ckey) + if(!istype(preferences_by_key[ckey], /datum/game_preferences)) + var/datum/game_preferences/initializing = new(key, ckey) + preferences_by_key[ckey] = initializing + initializing.initialize() + return preferences_by_key[ckey] + +/datum/controller/subsystem/preferences/on_sql_reconnect() + for(var/ckey in SSpreferences.preferences_by_key) + var/datum/game_preferences/preferences = SSpreferences.preferences_by_key[ckey] + if(!istype(preferences)) + continue + preferences.oops_sql_came_back_perform_a_reload() + return ..() diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 5dea5d4896e..165dbf16292 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -223,7 +223,7 @@ SUBSYSTEM_DEF(vote) usr.client.vote() /client/verb/vote() - set category = "OOC" + set category = VERB_CATEGORY_OOC set name = "Vote" if(SSvote) diff --git a/code/datums/elements/clothing/dynamic_recolor.dm b/code/datums/elements/clothing/dynamic_recolor.dm index 4c0802d97db..23968124d2a 100644 --- a/code/datums/elements/clothing/dynamic_recolor.dm +++ b/code/datums/elements/clothing/dynamic_recolor.dm @@ -40,7 +40,7 @@ /obj/item/clothing/proc/dynamic_recolor_verb() set name = "Set Color Style" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Set the coloration of this piece of clothing." set src in usr diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 6985d31efd3..84dbe96bd6a 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -52,7 +52,7 @@ . += "#[tm.number][details]
" /client/verb/showrevinfo() - set category = "OOC" + set category = VERB_CATEGORY_OOC set name = "Show Server Revision" set desc = "Check the current server code revision" diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index 66bb5e0a742..78954674804 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -91,7 +91,7 @@ if(direct) if(ismob(thing)) var/mob/M = thing - if(!M.is_preference_enabled(pref_check)) + if(!M.get_preference_toggle(pref_check)) continue SEND_SOUND(thing, S) else diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index aee8a07408d..83466f14b43 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -13,7 +13,7 @@ mid_length = 60 volume = 40 extra_range = 10 - pref_check = /datum/client_preference/supermatter_hum + pref_check = /datum/game_preference_toggle/ambience/supermatter_hum /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -102,4 +102,4 @@ mid_length = 4 end_sound = 'sound/machines/air_pump/airpumpshutdown.ogg' volume = 15 - pref_check = /datum/client_preference/air_pump_noise + pref_check = /datum/game_preference_toggle/ambience/atmospherics diff --git a/code/datums/looping_sounds/weather_sounds.dm b/code/datums/looping_sounds/weather_sounds.dm index 869673df27a..df7410b0eca 100644 --- a/code/datums/looping_sounds/weather_sounds.dm +++ b/code/datums/looping_sounds/weather_sounds.dm @@ -1,5 +1,5 @@ /datum/looping_sound/weather - pref_check = /datum/client_preference/weather_sounds + pref_check = /datum/game_preference_toggle/ambience/weather soundenvwet = -10000 soundenvdry = 0 diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index ee4a71eee14..5db22df8352 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -46,6 +46,6 @@ progress = clamp(progress, 0, goal) bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" - if (!shown && user.is_preference_enabled(/datum/client_preference/show_progress_bar)) + if (!shown) user.client.images += bar shown = 1 diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 4b984a1beac..d25c2379d64 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -75,25 +75,6 @@ for(var/client/C in GLOB.clients) C.AnnouncePR(final_composed) -/datum/world_topic/auto_bunker_passthrough - keyword = "auto_bunker_override" - require_comms_key = TRUE - -/datum/world_topic/auto_bunker_passthrough/Run(list/input) - if(!CONFIG_GET(flag/allow_cross_server_bunker_override)) - return "Function Disabled" - var/ckeytobypass = input["ckey"] - var/is_new_ckey = !(ckey(ckeytobypass) in GLOB.bunker_passthrough) - var/sender = input["source"] || "UNKNOWN" - GLOB.bunker_passthrough |= ckey(ckeytobypass) - GLOB.bunker_passthrough[ckey(ckeytobypass)] = world.realtime - SSpersistence.SavePanicBunker() //we can do this every time, it's okay - if(!is_new_ckey) - log_admin("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") - message_admins("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") - send2irc("Panic Bunker", "AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") - return "Success" - /datum/world_topic/jsonstatus keyword = "jsonstatus" diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm index da542288ea5..b502cea8cae 100644 --- a/code/game/antagonist/antagonist_objectives.dm +++ b/code/game/antagonist/antagonist_objectives.dm @@ -32,7 +32,7 @@ /mob/living/proc/write_ambition() set name = "Set Ambition" - set category = "IC" + set category = VERB_CATEGORY_IC set src = usr if(!mind) diff --git a/code/game/area/area.dm b/code/game/area/area.dm index c436fc18f1e..675cf7864d9 100644 --- a/code/game/area/area.dm +++ b/code/game/area/area.dm @@ -564,7 +564,7 @@ GLOBAL_LIST_EMPTY(forced_ambiance_list) /area/proc/play_ambience(var/mob/living/L) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch - if(!L?.is_preference_enabled(/datum/client_preference/play_ambiance)) + if(!L?.get_preference_toggle(/datum/game_preference_toggle/ambience/area_ambience)) return // If we previously were in an area with force-played ambiance, stop it. diff --git a/code/game/click/other_mobs.dm b/code/game/click/other_mobs.dm index 0b0ae6ee346..8cbc452f270 100644 --- a/code/game/click/other_mobs.dm +++ b/code/game/click/other_mobs.dm @@ -139,13 +139,6 @@ setClickCooldown(get_attack_speed()) A.attack_generic(src,rand(5,6),"bitten") -/* - pAI -*/ - -/mob/living/silicon/pai/UnarmedAttack(atom/A)//Stops runtimes due to attack_animal being the default - return - /* New Players: Have no reason to click on anything at all. diff --git a/code/game/click/rig.dm b/code/game/click/rig.dm index 360aa04cd04..d1b0f87f6fe 100644 --- a/code/game/click/rig.dm +++ b/code/game/click/rig.dm @@ -10,7 +10,7 @@ /client/verb/toggle_hardsuit_mode() set name = "Toggle Hardsuit Activation Mode" set desc = "Switch between hardsuit activation modes." - set category = "OOC" + set category = VERB_CATEGORY_OOC hardsuit_click_mode++ if(hardsuit_click_mode > MAX_HARDSUIT_CLICK_MODE) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index ff5617444f5..3f2835b7d3d 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -65,7 +65,7 @@ /obj/machinery/dna_scannernew/verb/eject() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject DNA Scanner" if (usr.stat != 0) @@ -95,7 +95,7 @@ /obj/machinery/dna_scannernew/verb/move_inside() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Enter DNA Scanner" if (usr.stat != 0) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 5a430ae0741..f5b71ab2dc0 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -539,7 +539,7 @@ var/global/list/additional_antag_types = list() /mob/verb/check_round_info() set name = "Check Round Info" - set category = "OOC" + set category = VERB_CATEGORY_OOC if(!SSticker || !SSticker.mode) to_chat(usr, "Something is terribly wrong; there is no gametype.") diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 7140731a6ed..e086731d45d 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -119,7 +119,7 @@ spawn(5) .() /obj/item/pinpointer/advpinpointer/verb/toggle_mode() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Toggle Pinpointer Mode" set src in view(1) diff --git a/code/game/gamemodes/technomancer/core_obj.dm b/code/game/gamemodes/technomancer/core_obj.dm index 879c6cb7099..01d47d27347 100644 --- a/code/game/gamemodes/technomancer/core_obj.dm +++ b/code/game/gamemodes/technomancer/core_obj.dm @@ -341,7 +341,7 @@ /obj/item/technomancer_core/verb/toggle_lock() set name = "Toggle Core Lock" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Toggles the locking mechanism on your manipulation core." var/had = HAS_TRAIT_FROM(src, TRAIT_ITEM_NODROP, TECHNOMANCER_TRAIT) diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 0a95097a387..dea856fe44a 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -92,7 +92,7 @@ /obj/machinery/optable/verb/climb_on() set name = "Climb On Table" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat || !ishuman(usr) || usr.restrained() || !check_table(usr)) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 6e36d6b781d..c894c4e47ef 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -295,7 +295,7 @@ /obj/machinery/sleeper/verb/move_eject() set name = "Eject occupant" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr == occupant) switch(usr.stat) diff --git a/code/game/machinery/_frame.dm b/code/game/machinery/_frame.dm index 0c32c989ef4..171763dd9dd 100644 --- a/code/game/machinery/_frame.dm +++ b/code/game/machinery/_frame.dm @@ -603,7 +603,7 @@ /obj/structure/frame/verb/rotate_counterclockwise() set name = "Rotate Frame Counter-Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.incapacitated()) @@ -622,7 +622,7 @@ /obj/structure/frame/verb/rotate_clockwise() set name = "Rotate Frame Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.incapacitated()) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 5efd47539ee..a9948a02049 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -107,7 +107,7 @@ /obj/machinery/bodyscanner/verb/eject() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject Body Scanner" if(usr.incapacitated()) diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index 5c27edd487b..2b89e6e6b2e 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -187,7 +187,7 @@ /obj/machinery/organ_printer/verb/eject_beaker() set name = "Eject Beaker" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != NONE) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 87610114a57..d041ea1fc64 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -305,7 +305,7 @@ /obj/machinery/clonepod/verb/eject() set name = "Eject Cloner" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0) @@ -377,7 +377,7 @@ // Empties all of the beakers from the cloning pod, used to refill it /obj/machinery/clonepod/verb/empty_beakers() set name = "Eject Beakers" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 0b78a2ed1e7..f6d34ea319f 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -10,7 +10,7 @@ /obj/machinery/computer/aiupload/verb/AccessInternals() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Access Computer's Internals" set src in oview(1) if(get_dist(src, usr) > 1 || usr.restrained() || usr.lying || usr.stat || istype(usr, /mob/living/silicon)) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 1867b9da430..40f65b2fb92 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -72,7 +72,7 @@ return ..() /obj/machinery/computer/med_data/verb/eject_id() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject ID Card" set src in oview(1) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index edfeb3565c3..981fc2fdfd9 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -58,7 +58,7 @@ return ..() /obj/machinery/computer/secure_data/verb/eject_id() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject ID Card" set src in oview(1) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index b574db38987..eb4321638e1 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -69,6 +69,7 @@ temperature_archived = air_contents.temperature heat_gas_contents() expel_gas() + update_icon() if(abs(temperature_archived-air_contents.temperature) > 1) network.update = TRUE @@ -214,6 +215,7 @@ /obj/machinery/atmospherics/component/unary/cryo_cell/update_icon() cut_overlay(fluid) fluid.color = null + fluid.alpha = max(255 - air_contents.temperature, 50) if(on) if(beaker) fluid.color = beaker.reagents.get_color() @@ -321,7 +323,7 @@ /obj/machinery/atmospherics/component/unary/cryo_cell/verb/move_eject() set name = "Eject occupant" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr == occupant)//If the user is inside the tube... if(usr.stat == 2)//and he's not dead.... @@ -340,7 +342,7 @@ /obj/machinery/atmospherics/component/unary/cryo_cell/verb/move_inside() set name = "Move Inside" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(isliving(usr)) var/mob/living/L = usr diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 52b0754c80f..0e49fb09854 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -555,7 +555,7 @@ /obj/machinery/cryopod/verb/eject() set name = "Eject Pod" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0) return @@ -581,7 +581,7 @@ /obj/machinery/cryopod/verb/move_inside() set name = "Enter Pod" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0 || !check_occupant_allowed(usr)) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 023687111b6..65c62f2eb07 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -260,7 +260,7 @@ return reagent_container?.reagents /obj/machinery/iv_drip/verb/eject_beaker() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Remove IV Container" set src in oview(1) @@ -280,7 +280,7 @@ update_appearance() /obj/machinery/iv_drip/verb/toggle_mode() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Toggle Mode" set src in oview(1) diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index ab29e0b796f..2cd56489cbd 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -213,7 +213,7 @@ var/bomb_set onclose(user, "nukebomb_hack") /obj/machinery/nuclearbomb/verb/make_deployable() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Make Deployable" set src in oview(1) diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index 331d22d233b..3f1e3fcba9c 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -173,7 +173,7 @@ //Create rightclick to view tank settings /obj/machinery/oxygen_pump/verb/settings() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Show Tank Settings" nano_ui_interact(usr) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 1d33af8d1ad..d63fd7c0469 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -100,7 +100,7 @@ Buildable meters icon_state = initial(fakeA.pipe_state) /obj/item/pipe/verb/flip() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Flip Pipe" set src in view(1) @@ -122,7 +122,7 @@ Buildable meters icon_state = "[initial(fakeA.pipe_state)][mirrored ? "m" : ""]" /obj/item/pipe/verb/rotate_clockwise() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Rotate Pipe Clockwise" set src in view(1) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 958c142cccc..e7a0d712e6f 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -282,7 +282,7 @@ update_appearance() /obj/machinery/recharge_station/verb/move_eject() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject Recharger" set src in oview(1) @@ -294,7 +294,7 @@ return /obj/machinery/recharge_station/verb/move_inside() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Enter Recharger" set src in oview(1) diff --git a/code/game/machinery/suit_storage/suit_cycler.dm b/code/game/machinery/suit_storage/suit_cycler.dm index ed8a64779be..dbdc44a1ea6 100644 --- a/code/game/machinery/suit_storage/suit_cycler.dm +++ b/code/game/machinery/suit_storage/suit_cycler.dm @@ -434,7 +434,7 @@ /obj/machinery/suit_cycler/verb/leave() set name = "Eject Cycler" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0) diff --git a/code/game/machinery/suit_storage/suit_storage_unit.dm b/code/game/machinery/suit_storage/suit_storage_unit.dm index 7698d7d9cb6..a1b8ff57cca 100644 --- a/code/game/machinery/suit_storage/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage/suit_storage_unit.dm @@ -409,7 +409,7 @@ /obj/machinery/suit_storage_unit/verb/get_out() set name = "Eject Suit Storage Unit" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0) @@ -423,7 +423,7 @@ /obj/machinery/suit_storage_unit/verb/move_inside() set name = "Hide in Suit Storage Unit" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 178cf7e403f..3aadb57ee04 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -246,14 +246,12 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept for (var/mob/R in receive) /* --- Loop through the receivers and categorize them --- */ - if(!R.is_preference_enabled(/datum/client_preference/holder/hear_radio)) - continue if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. continue // Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates - if(data == DATA_ANTAG && istype(R, /mob/observer/dead) && R.is_preference_enabled(/datum/client_preference/ghost_radio)) + if(data == DATA_ANTAG && istype(R, /mob/observer/dead) && R.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_radio)) continue // --- Check for compression --- @@ -446,10 +444,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Loop through the receivers and categorize them --- */ - if(!R.is_preference_enabled(/datum/client_preference/holder/hear_radio)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue - - // --- Check for compression --- if(compression > 0) diff --git a/code/game/machinery/teleporter/console.dm b/code/game/machinery/teleporter/console.dm index 6b5a96a4470..d2c7551f924 100644 --- a/code/game/machinery/teleporter/console.dm +++ b/code/game/machinery/teleporter/console.dm @@ -190,7 +190,7 @@ playsound(get_turf(src), 'sound/machines/ping.ogg', 50, 0) /obj/machinery/computer/teleporter/verb/set_id(t as text) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Set teleporter ID" set src in oview(1) set desc = "ID Tag:" diff --git a/code/game/machinery/transportpod.dm b/code/game/machinery/transportpod.dm index aab18a87252..e0718e9210a 100644 --- a/code/game/machinery/transportpod.dm +++ b/code/game/machinery/transportpod.dm @@ -79,7 +79,7 @@ update_icon() /obj/machinery/transportpod/verb/move_eject() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject Pod" set src in oview(1) @@ -91,7 +91,7 @@ return /obj/machinery/transportpod/verb/move_inside() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Enter Pod" set src in oview(1) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm deleted file mode 100644 index 9d2abe72bc2..00000000000 --- a/code/game/machinery/vending.dm +++ /dev/null @@ -1,2569 +0,0 @@ -/** - * A vending machine - */ -/obj/machinery/vending - name = "Vendomat" - desc = "A generic vending machine." - icon = 'icons/obj/vending.dmi' - icon_state = "generic" - anchored = TRUE - density = TRUE - // todo: temporary, as this is unbuildable - integrity_flags = INTEGRITY_INDESTRUCTIBLE - -//! ## Icons - /// Icon_state when vending. - var/icon_vend - /// Icon_state when denying access. - var/icon_deny - -//! ## Power - use_power = USE_POWER_IDLE - idle_power_usage = 10 - var/vend_power_usage = 150 //actuators and stuff - -//! ## Vending-related - /// No sales pitches if off! - var/active = TRUE - /// Are we ready to vend?? Is it time?? - var/vend_ready = TRUE - /// How long does it take to vend? - var/vend_delay = 1 SECOND - /// Bitmask of categories we're currently showing. - var/categories = CAT_NORMAL - /// What we're requesting payment for right now. - var/datum/stored_item/vending_product/currently_vending = null - /// Status screen messages like "insufficient funds", displayed in NanoUI. - var/status_message = "" - /// Set to TRUE if status_message is an error. - var/status_error = FALSE - - /** - * Variables used to initialize the product list - * These are used for initialization only, and so are optional if - * product_records is specified - */ - var/list/products = list() // For each, use the following pattern: - var/list/contraband = list() // list(/type/path = amount, /type/path2 = amount2) - var/list/premium = list() // No specified amount = only one in stock - var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price. - var/price_default = 0 - - /// List of vending_product items available. - var/list/product_records = list() - - - // Variables used to initialize advertising - /// String of slogans spoken out loud, separated by semicolons. - var/product_slogans = "" - /// String of small ad messages in the vending screen. - var/product_ads = "" - - var/list/ads_list = list() - - // Stuff relating vocalizations - var/list/slogan_list = list() - /// Set to true to silence it. - var/shut_up = TRUE - /// Thank you for shopping! - var/vend_reply - var/last_reply = FALSE - /// When did we last pitch? - var/last_slogan = 0 - /// How long until we can pitch again? - var/slogan_delay = 10 MINUTES - - // Things that can go wrong - /// Ignores if somebody doesn't have card access to that machine. - emagged = FALSE - /// Shock customers like an airlock. - var/seconds_electrified = 0 - /// Fire items at customers! We're broken! - var/shoot_inventory = FALSE - - var/scan_id = TRUE - var/obj/item/coin/coin - var/datum/wires/vending/wires = null - - var/list/log = list() - - /// Default access for checking logs is cargo. - var/req_log_access = ACCESS_SUPPLY_BAY - /// Defaults to 0, set to anything else for vendor to have logs. - var/has_logs = NONE - - -/obj/machinery/vending/Initialize(mapload) - . = ..() - wires = new(src) - spawn(4) - if(product_slogans) - slogan_list += splittext(product_slogans, ";") - - // So not all machines speak at the exact same time. - // The first time this machine says something will be at slogantime + this random value, - // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated. - last_slogan = world.time + rand(0, slogan_delay) - - if(product_ads) - ads_list += splittext(product_ads, ";") - - build_inventory() - power_change() - -/** - * Build produdct_records from the products lists - * - * products, contraband, premium, and prices allow specifying - * products that the vending machine is to carry without manually populating - * product_records. - */ -/obj/machinery/vending/proc/build_inventory() - var/list/all_products = list( - list(products, CAT_NORMAL), - list(contraband, CAT_HIDDEN), - list(premium, CAT_COIN)) - - for(var/current_list in all_products) - var/category = current_list[2] - - for(var/entry in current_list[1]) - var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry) - - product.price = (entry in prices) ? prices[entry] : price_default - product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 - product.category = category - - product_records.Add(product) - -/obj/machinery/vending/Destroy() - qdel(wires) - wires = null - qdel(coin) - coin = null - for(var/datum/stored_item/vending_product/R in product_records) - qdel(R) - product_records = null - return ..() - -/obj/machinery/vending/legacy_ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if(prob(50)) - qdel(src) - return - if(3.0) - if(prob(25)) - spawn(0) - malfunction() - return - return - else - return - -/obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - emagged = 1 - to_chat(user, "You short out \the [src]'s product lock.") - return 1 - -/obj/machinery/vending/attackby(obj/item/W, mob/user) - var/obj/item/card/id/I = W.GetID() - - if(currently_vending && GLOB.vendor_account && !GLOB.vendor_account.suspended) - var/paid = FALSE - var/handled = FALSE - - var/obj/item/paying_with = I || W - var/list/data = list() - var/amount = paying_with.attempt_use_currency(user, src, currently_vending.price, FALSE, NONE, data, FALSE, 7) - switch(amount) - if(PAYMENT_DYNAMIC_ERROR) - if(data[DYNAMIC_PAYMENT_DATA_FAIL_REASON]) - status_message = data[DYNAMIC_PAYMENT_DATA_FAIL_REASON] - status_error = TRUE - SSnanoui.update_uis(src) - return - if(PAYMENT_NOT_CURRENCY) - handled = FALSE - if(PAYMENT_INSUFFICIENT) - handled = TRUE - to_chat(user, SPAN_WARNING("That is not enough money!")) - else - handled = TRUE - paid = amount == currently_vending.price - - if(handled) - if(paid) - var/payer_name = "Unknown" - switch(data[DYNAMIC_PAYMENT_DATA_CURRENCY_TYPE]) - if(PAYMENT_TYPE_BANK_CARD) - var/datum/money_account/A = data[DYNAMIC_PAYMENT_DATA_BANK_ACCOUNT] - if(A) - payer_name = A.owner_name - else - payer_name = "(cash)" - credit_purchase(payer_name) - vend(currently_vending, usr) - SSnanoui.update_uis(src) - return // don't smack that machine with your 2 thalers - - if(I || istype(W, /obj/item/spacecash)) - attack_hand(user) - return - else if(W.is_screwdriver()) - panel_open = !panel_open - to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") - playsound(src, W.tool_sound, 50, 1) - cut_overlays() - if(panel_open) - add_overlay(image(icon, "[initial(icon_state)]-panel")) - - SSnanoui.update_uis(src) // Speaker switch is on the main UI, not wires UI - return - else if(istype(W, /obj/item/multitool) || W.is_wirecutter()) - if(panel_open) - attack_hand(user) - return - else if(istype(W, /obj/item/coin) && premium.len > 0) - if(!user.attempt_insert_item_for_installation(W, src)) - return - coin = W - categories |= CAT_COIN - to_chat(user, "You insert \the [W] into \the [src].") - SSnanoui.update_uis(src) - return - else if(W.is_wrench()) - playsound(src, W.tool_sound, 100, 1) - if(anchored) - user.visible_message("[user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("[user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - - if(do_after(user, 20 * W.tool_speed)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - return - else - - for(var/datum/stored_item/vending_product/R in product_records) - if(istype(W, R.item_path) && (W.name == R.item_name)) - stock(W, R, user) - return - ..() - -/obj/machinery/vending/query_transaction_details(list/data) - . = ..() - .[CHARGE_DETAIL_DEVICE] = name - .[CHARGE_DETAIL_LOCATION] = get_area(src).name - .[CHARGE_DETAIL_REASON] = currently_vending? "Purchase of [currently_vending.item_name]" : "Unknown" - .[CHARGE_DETAIL_RECIPIENT] = GLOB.vendor_account.owner_name - -/** - * Add money for current purchase to the vendor account. - * - * Called after the money has already been taken from the customer. - */ -/obj/machinery/vending/proc/credit_purchase(var/target as text) - GLOB.vendor_account.money += currently_vending.price - - var/datum/transaction/T = new() - T.target_name = target - T.purpose = "Purchase of [currently_vending.item_name]" - T.amount = "[currently_vending.price]" - T.source_terminal = name - T.date = GLOB.current_date_string - T.time = stationtime2text() - GLOB.vendor_account.transaction_log.Add(T) - -/obj/machinery/vending/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/vending/attack_hand(mob/user, list/params) - if(machine_stat & (BROKEN|NOPOWER)) - return - - if(seconds_electrified != 0) - if(shock(user, 100)) - return - - wires.Interact(user) - nano_ui_interact(user) - -/** - * Display the NanoUI window for the vending machine. - * - * See NanoUI documentation for details. - */ -/obj/machinery/vending/nano_ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - user.set_machine(src) - - var/list/data = list() - if(currently_vending) - data["mode"] = 1 - data["product"] = currently_vending.item_name - data["price"] = currently_vending.price - data["message_err"] = 0 - data["message"] = status_message - data["message_err"] = status_error - else - data["mode"] = 0 - var/list/listed_products = list() - - for(var/key = 1 to product_records.len) - var/datum/stored_item/vending_product/I = product_records[key] - - if(!(I.category & categories)) - continue - - listed_products.Add(list(list( - "key" = key, - "name" = I.item_name, - "price" = I.price, - "color" = I.display_color, - "amount" = I.get_amount()))) - - data["products"] = listed_products - - if(coin) - data["coin"] = coin.name - - if(panel_open) - data["panel"] = 1 - data["speaker"] = shut_up ? 0 : 1 - else - data["panel"] = 0 - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "vending_machine.tmpl", name, 440, 600) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/vending/Topic(href, href_list) - if(machine_stat & (BROKEN|NOPOWER)) - return - if(!IsAdminGhost(usr) && (usr.stat || usr.restrained())) - return - - if(href_list["remove_coin"] && !istype(usr,/mob/living/silicon)) - if(!coin) - to_chat(usr, "There is no coin in this machine.") - return - - coin.forceMove(src.loc) - if(!usr.get_active_held_item()) - usr.put_in_hands(coin) - to_chat(usr, "You remove \the [coin] from \the [src]") - coin = null - categories &= ~CAT_COIN - - if(IsAdminGhost(usr) || (usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) - if((href_list["vend"]) && (vend_ready) && (!currently_vending)) - if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH - to_chat(usr, "Access denied.") //Unless emagged of course - flick(icon_deny,src) - playsound(src.loc, 'sound/machines/deniedbeep.ogg', 50, 0) - return - - var/key = text2num(href_list["vend"]) - var/datum/stored_item/vending_product/R = product_records[key] - - // This should not happen unless the request from NanoUI was bad - if(!(R.category & categories)) - return - - if((R.price <= 0) || IsAdminGhost(usr)) - vend(R, usr) - else if(istype(usr,/mob/living/silicon)) //If the item is not free, provide feedback if a synth is trying to buy something. - to_chat(usr, "Lawed unit recognized. Lawed units cannot complete this transaction. Purchase canceled.") - return - else - currently_vending = R - if(!GLOB.vendor_account || GLOB.vendor_account.suspended) - status_message = "This machine is currently unable to process payments due to issues with the associated account." - status_error = 1 - else - status_message = "Please swipe a card or insert cash to pay for the item." - status_error = 0 - - else if(href_list["cancelpurchase"]) - currently_vending = null - - else if((href_list["togglevoice"]) && (panel_open)) - shut_up = !shut_up - - SSnanoui.update_uis(src) - -/obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user) - if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH - to_chat(usr, "Access denied.") //Unless emagged of course - flick(icon_deny,src) - playsound(src.loc, 'sound/machines/deniedbeep.ogg', 50, 0) - return - vend_ready = 0 //One thing at a time!! - status_message = "Vending..." - status_error = 0 - SSnanoui.update_uis(src) - - if(R.category & CAT_COIN) - if(!coin) - to_chat(user, "You need to insert a coin to get this item.") - return - if(coin.string_attached) - if(prob(50)) - to_chat(user, "You successfully pull the coin out before \the [src] could swallow it.") - else - to_chat(user, "You weren't able to pull the coin out fast enough, the machine ate it, string and all.") - qdel(coin) - coin = null - categories &= ~CAT_COIN - else - qdel(coin) - coin = null - categories &= ~CAT_COIN - - if(((last_reply + (vend_delay + 200)) <= world.time) && vend_reply) - spawn(0) - speak(vend_reply) - last_reply = world.time - - use_power(vend_power_usage) //actuators and stuff - if(icon_vend) //Show the vending animation if needed - flick(icon_vend,src) - spawn(vend_delay) - R.get_product(get_turf(src)) - if(has_logs) - do_logging(R, user, 1) - if(prob(1)) - sleep(3) - if(R.get_product(get_turf(src))) - visible_message("\The [src] clunks as it vends an additional item.") - - playsound(src, 'sound/items/vending.ogg', 50, 1, 1) - - status_message = "" - status_error = 0 - vend_ready = 1 - currently_vending = null - SSnanoui.update_uis(src) - - return 1 - -/obj/machinery/vending/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0) - if(user.GetIdCard()) - var/obj/item/card/id/tempid = user.GetIdCard() - var/list/list_item = list() - if(vending) - list_item += "vend" - else - list_item += "stock" - list_item += tempid.registered_name - list_item += stationtime2text() - list_item += R.item_name - log[++log.len] = list_item - -/obj/machinery/vending/proc/show_log(mob/user as mob) - if(user.GetIdCard()) - var/obj/item/card/id/tempid = user.GetIdCard() - if(req_log_access in tempid.GetAccess()) - var/datum/browser/popup = new(user, "vending_log", "Vending Log", 700, 500) - var/dat = "" - dat += "
[name] Vending Log
" - dat += "
Welcome [user.name]!

" - dat += "Below are the recent vending logs for your vending machine.
" - for(var/i in log) - dat += json_encode(i) - dat += ";
" - popup.set_content(dat) - popup.open() - else - to_chat(user,"You do not have the required access to view the vending logs for this machine.") - -/obj/machinery/vending/verb/check_logs() - set name = "Check Vending Logs" - set category = "Object" - set src in oview(1) - - show_log(usr) - -/** - * Add item to the machine - * - * Checks if item is vendable in this machine should be performed before - * calling. W is the item being inserted, R is the associated vending_product entry. - */ -/obj/machinery/vending/proc/stock(obj/item/W, var/datum/stored_item/vending_product/R, var/mob/user) - if(!user.attempt_insert_item_for_installation(W, src)) - return - - to_chat(user, "You insert \the [W] in the product receptor.") - R.add_product(W) - if(has_logs) - do_logging(R, user) - - SSnanoui.update_uis(src) - -/obj/machinery/vending/process(delta_time) - if(machine_stat & (BROKEN|NOPOWER)) - return - - if(!active) - return - - if(seconds_electrified > 0) - seconds_electrified-- - - //Pitch to the people! Really sell it! - if(((last_slogan + slogan_delay) <= world.time) && (slogan_list.len > 0) && (!shut_up) && prob(5)) - var/slogan = pick(slogan_list) - speak(slogan) - last_slogan = world.time - - if(shoot_inventory && prob(2)) - throw_item() - - return - -/obj/machinery/vending/proc/speak(message) - if(machine_stat & NOPOWER) - return - - if(!message) - return - - for(var/mob/O in hearers(src, null)) - O.show_message("\The [src] beeps, \"[message]\"",2) - return - -/obj/machinery/vending/power_change() - ..() - if(machine_stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else - if(!(machine_stat & NOPOWER)) - icon_state = initial(icon_state) - else - spawn(rand(0, 15)) - icon_state = "[initial(icon_state)]-off" - -//Oh no we're malfunctioning! Dump out some product and break. -/obj/machinery/vending/proc/malfunction() - for(var/datum/stored_item/vending_product/R in product_records) - while(R.get_amount()>0) - R.get_product(loc) - break - - machine_stat |= BROKEN - icon_state = "[initial(icon_state)]-broken" - return - -//Somebody cut an important wire and now we're following a new definition of "pitch." -/obj/machinery/vending/proc/throw_item() - var/obj/throw_item = null - var/mob/living/target = locate() in view(7,src) - if(!target) - return 0 - - for(var/datum/stored_item/vending_product/R in product_records) - throw_item = R.get_product(loc) - if(!throw_item) - continue - break - if(!throw_item) - return 0 - spawn(0) - throw_item.throw_at_old(target, 16, 3, src) - visible_message("\The [src] launches \a [throw_item] at \the [target]!") - return 1 - -/* - * Vending machine types - */ - -/* - -/obj/machinery/vending/[vendors name here] // --vending machine template :) - name = "" - desc = "" - icon = '' - icon_state = "" - vend_delay = 15 - products = list() - contraband = list() - premium = list() - -*/ - -/* -/obj/machinery/vending/atmospherics //Commenting this out until someone ponies up some actual working, broken, and unpowered sprites - Quarxink - name = "Tank Vendor" - desc = "A vendor with a wide variety of masks and gas tanks." - icon = 'icons/obj/objects.dmi' - icon_state = "dispenser" - product_paths = "/obj/item/tank/oxygen;/obj/item/tank/phoron;/obj/item/tank/emergency_oxygen;/obj/item/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath" - productamounts = "10;10;10;5;25" - vend_delay = 0 -*/ -/obj/machinery/vending/boozeomat - name = "Booze-O-Mat" - desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." - icon_state = "boozeomat" - icon_deny = "boozeomat-deny" - products = list( - /obj/item/reagent_containers/food/drinks/glass2/square = 10, - /obj/item/reagent_containers/food/drinks/glass2/rocks = 10, - /obj/item/reagent_containers/food/drinks/glass2/shake = 10, - /obj/item/reagent_containers/food/drinks/glass2/cocktail = 10, - /obj/item/reagent_containers/food/drinks/glass2/shot = 10, - /obj/item/reagent_containers/food/drinks/glass2/pint = 10, - /obj/item/reagent_containers/food/drinks/glass2/mug = 10, - /obj/item/reagent_containers/food/drinks/glass2/wine = 10, - /obj/item/reagent_containers/food/drinks/glass2/pitcher = 10, - /obj/item/reagent_containers/food/drinks/metaglass = 25, - /obj/item/reagent_containers/food/drinks/bottle/gin = 5, - /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, - /obj/item/reagent_containers/food/drinks/bottle/bluecuracao = 5, - /obj/item/reagent_containers/food/drinks/bottle/cognac = 5, - /obj/item/reagent_containers/food/drinks/bottle/grenadine = 5, - /obj/item/reagent_containers/food/drinks/bottle/kahlua = 5, - /obj/item/reagent_containers/food/drinks/bottle/melonliquor = 5, - /obj/item/reagent_containers/food/drinks/bottle/peppermintschnapps = 5, - /obj/item/reagent_containers/food/drinks/bottle/peachschnapps = 5, - /obj/item/reagent_containers/food/drinks/bottle/lemonadeschnapps = 5, - /obj/item/reagent_containers/food/drinks/bottle/rum = 5, - /obj/item/reagent_containers/food/drinks/bottle/whiterum = 5, - /obj/item/reagent_containers/food/drinks/bottle/sake = 5, - /obj/item/reagent_containers/food/drinks/bottle/specialwhiskey = 5, - /obj/item/reagent_containers/food/drinks/bottle/tequila = 5, - /obj/item/reagent_containers/food/drinks/bottle/vermouth = 5, - /obj/item/reagent_containers/food/drinks/bottle/vodka = 5, - /obj/item/reagent_containers/food/drinks/bottle/whiskey = 5, - /obj/item/reagent_containers/food/drinks/bottle/wine = 5, - /obj/item/reagent_containers/food/drinks/bottle/whitewine = 5, - /obj/item/reagent_containers/food/drinks/bottle/bitters = 5, - /obj/item/reagent_containers/food/drinks/bottle/victory_gin = 3, - /obj/item/reagent_containers/food/drinks/bottle/messa_mead = 3, - /obj/item/reagent_containers/food/drinks/bottle/small/ale = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/beer = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/cider = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/alcsassafras = 15, - /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 5, - /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 5, - /obj/item/reagent_containers/food/drinks/bottle/limejuice = 5, - /obj/item/reagent_containers/food/drinks/bottle/lemonjuice = 5, - /obj/item/reagent_containers/food/drinks/bottle/applejuice = 5, - /obj/item/reagent_containers/food/drinks/bottle/milk = 5, - /obj/item/reagent_containers/food/drinks/bottle/cream = 5, - /obj/item/reagent_containers/food/drinks/bottle/cola = 5, - /obj/item/reagent_containers/food/drinks/bottle/space_up = 5, - /obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind = 5, - /obj/item/reagent_containers/food/drinks/bottle/champagne/jericho = 1, - /obj/item/reagent_containers/food/drinks/bottle/champagne = 3, - /obj/item/reagent_containers/food/drinks/bottle/coconutmilk = 5, - /obj/item/reagent_containers/food/drinks/bottle/unathijuice = 2, - /obj/item/reagent_containers/food/drinks/cans/sodawater = 15, - /obj/item/reagent_containers/food/drinks/cans/tonic = 15, - /obj/item/reagent_containers/food/drinks/cans/gingerale = 15, - /obj/item/reagent_containers/food/drinks/flask/barflask = 5, - /obj/item/reagent_containers/food/drinks/flask/vacuumflask = 5, - /obj/item/reagent_containers/food/drinks/ice = 10, - /obj/item/reagent_containers/food/drinks/tea = 15, - /obj/item/reagent_containers/food/condiment/small/packet/matchapowder = 5, - /obj/item/reagent_containers/food/condiment/small/packet/taropowder = 5, - /obj/item/glass_extra/stick = 30, - /obj/item/glass_extra/straw = 30, - /obj/item/storage/single_use/med_pouch/overdose = 2, - ) - contraband = list() - vend_delay = 15 - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" - product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" - req_access = list(ACCESS_GENERAL_BAR) - req_log_access = ACCESS_GENERAL_BAR - has_logs = 1 - -/obj/machinery/vending/assist - products = list( - /obj/item/assembly/prox_sensor = 5, - /obj/item/assembly/igniter = 3, - /obj/item/assembly/signaler = 4, - /obj/item/tool/wirecutters = 1, - /obj/item/cartridge/signal = 4, - ) - contraband = list( - /obj/item/flashlight = 5, - /obj/item/assembly/timer = 2, - ) - product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" - -/obj/machinery/vending/coffee - name = "Hot Drinks machine" - desc = "A vending machine which dispenses hot drinks." - product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" - icon_state = "coffee" - icon_vend = "coffee-vend" - vend_delay = 34 - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - vend_power_usage = 85000 //85 kJ to heat a 250 mL cup of coffee - products = list( - /obj/item/reagent_containers/food/drinks/coffee = 25, - /obj/item/reagent_containers/food/drinks/tea = 25, - /obj/item/reagent_containers/food/drinks/h_chocolate = 25, - /obj/item/reagent_containers/food/drinks/cans/robustexpress = 10, - /obj/item/reagent_containers/food/drinks/cans/robustexpresslatte = 10 - ) - contraband = list( - /obj/item/reagent_containers/food/drinks/ice = 10 - ) - prices = list( - /obj/item/reagent_containers/food/drinks/coffee = 3, - /obj/item/reagent_containers/food/drinks/tea = 3, - /obj/item/reagent_containers/food/drinks/h_chocolate = 3, - /obj/item/reagent_containers/food/drinks/cans/robustexpress = 2, - /obj/item/reagent_containers/food/drinks/cans/robustexpresslatte = 2, - ) - -/obj/machinery/vending/snack - name = "Getmore Chocolate Corp" - desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars." - product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" - product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" - icon_state = "snack" - products = list( - /obj/item/reagent_containers/food/snacks/wrapped/candy = 6, - /obj/item/reagent_containers/food/drinks/dry_ramen = 6, - /obj/item/reagent_containers/food/snacks/bagged/chips =6, - /obj/item/reagent_containers/food/snacks/bagged/sosjerky = 6, - /obj/item/reagent_containers/food/snacks/boxed/no_raisin = 6, - /obj/item/reagent_containers/food/snacks/wrapped/spacetwinkie = 6, - /obj/item/reagent_containers/food/snacks/bagged/cheesiehonkers = 6, - /obj/item/reagent_containers/food/snacks/bagged/hotcheesiehonkers = 3, - /obj/item/reagent_containers/food/snacks/tastybread = 6, - /obj/item/reagent_containers/food/snacks/wrapped/skrellsnacks = 3, - /obj/item/reagent_containers/food/snacks/baschbeans = 6, - /obj/item/reagent_containers/food/snacks/creamcorn = 6, - /obj/item/reagent_containers/hard_candy/lollipop = 6, - /obj/item/reagent_containers/food/snacks/wrapped/spunow = 6, - /obj/item/reagent_containers/food/snacks/wrapped/glad2nut = 6, - /obj/item/reagent_containers/food/snacks/wrapped/natkat = 6 - ) - contraband = list( - /obj/item/reagent_containers/food/snacks/syndicake = 6, - /obj/item/reagent_containers/food/snacks/boxed/unajerky = 6, - ) - prices = list( - /obj/item/reagent_containers/food/snacks/wrapped/candy = 2, - /obj/item/reagent_containers/food/drinks/dry_ramen = 5, - /obj/item/reagent_containers/food/snacks/bagged/chips = 3, - /obj/item/reagent_containers/food/snacks/bagged/sosjerky = 3, - /obj/item/reagent_containers/food/snacks/boxed/no_raisin = 2, - /obj/item/reagent_containers/food/snacks/wrapped/spacetwinkie = 2, - /obj/item/reagent_containers/food/snacks/bagged/cheesiehonkers = 3, - /obj/item/reagent_containers/food/snacks/bagged/hotcheesiehonkers = 6, - /obj/item/reagent_containers/food/snacks/tastybread = 3, - /obj/item/reagent_containers/food/snacks/wrapped/skrellsnacks = 4, - /obj/item/reagent_containers/food/snacks/baschbeans = 6, - /obj/item/reagent_containers/food/snacks/creamcorn = 6, - /obj/item/reagent_containers/hard_candy/lollipop = 2, - /obj/item/reagent_containers/food/snacks/wrapped/spunow = 4, - /obj/item/reagent_containers/food/snacks/wrapped/glad2nut = 4, - /obj/item/reagent_containers/food/snacks/wrapped/natkat = 4 - ) - -/obj/machinery/vending/cola - name = "Robust Softdrinks" - desc = "A softdrink vendor provided by Robust Industries, LLC." - icon_state = "Cola_Machine" - icon_vend = "Cola_Machine-purchase" - product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!" - product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space." - products = list( - /obj/item/reagent_containers/food/drinks/cans/battery = 10, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 10, - /obj/item/reagent_containers/food/drinks/cans/coconutwater = 10, - /obj/item/reagent_containers/food/drinks/bottle/small/sassafras = 10, - /obj/item/reagent_containers/food/drinks/bottle/small/sarsaparilla = 10, - /obj/item/reagent_containers/food/drinks/cans/gingerale = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 10, - /obj/item/reagent_containers/food/drinks/cans/crystalgibb = 10, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb_cherry = 10, - /obj/item/reagent_containers/food/drinks/cans/ochamidori = 10, - /obj/item/reagent_containers/food/drinks/cans/ramune = 10, - /obj/item/reagent_containers/food/drinks/cans/starkist = 10, - /obj/item/reagent_containers/food/drinks/cans/cola = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_cherry = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_coffee = 10, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, - /obj/item/reagent_containers/food/drinks/cans/space_up = 10, - /obj/item/reagent_containers/food/drinks/cans/iced_tea = 10, - /obj/item/reagent_containers/food/drinks/cans/gondola_energy = 10, - /obj/item/reagent_containers/food/drinks/cans/robustexpressiced = 10, - /obj/item/reagent_containers/food/drinks/bludbox = 5, - /obj/item/reagent_containers/food/drinks/bludboxlight = 5, - ) - contraband = list( - /obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, - /obj/item/reagent_containers/food/snacks/liquidfood = 6, - /obj/item/reagent_containers/food/drinks/cans/dumbjuice = 4, - /obj/item/reagent_containers/food/drinks/cans/geometer = 2 - ) - prices = list( - /obj/item/reagent_containers/food/drinks/cans/cola = 2, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 2, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 2, - /obj/item/reagent_containers/food/drinks/cans/starkist = 2, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 2, - /obj/item/reagent_containers/food/drinks/cans/space_up = 2, - /obj/item/reagent_containers/food/drinks/cans/iced_tea = 2, - /obj/item/reagent_containers/food/drinks/cans/grape_juice = 2, - /obj/item/reagent_containers/food/drinks/cans/gingerale = 2, - /obj/item/reagent_containers/food/drinks/bottle/small/sarsaparilla = 2, - /obj/item/reagent_containers/food/drinks/bottle/small/sassafras = 2, - /obj/item/reagent_containers/food/drinks/cans/ochamidori = 3, - /obj/item/reagent_containers/food/drinks/cans/ramune = 2, - /obj/item/reagent_containers/food/drinks/cans/battery = 5, - /obj/item/reagent_containers/food/drinks/cans/crystalgibb = 2, - /obj/item/reagent_containers/food/drinks/cans/gondola_energy = 5, - /obj/item/reagent_containers/food/drinks/bludbox = 25, - /obj/item/reagent_containers/food/drinks/bludboxlight = 35, - /obj/item/reagent_containers/food/drinks/cans/coconutwater = 6, - /obj/item/reagent_containers/food/drinks/cans/kyocola = 2, - /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 2, - /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 2, - /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 2, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb_cherry = 2, - /obj/item/reagent_containers/food/drinks/cans/cola_cherry = 2, - /obj/item/reagent_containers/food/drinks/cans/cola_coffee = 2, - /obj/item/reagent_containers/food/drinks/cans/robustexpressiced = 2, - ) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - -/obj/machinery/vending/fitness // Added Liquid Protein and slightly adjusted price of liquid food items due to buff. - name = "SweatMAX" - desc = "Fueled by your inner inadequacy!" - icon_state = "fitness" - products = list( - /obj/item/reagent_containers/food/drinks/smallmilk = 8, - /obj/item/reagent_containers/food/drinks/smallchocmilk = 8, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 8, - /obj/item/reagent_containers/food/snacks/wrapped/proteinbar = 8, - /obj/item/reagent_containers/food/snacks/liquid = 10, - /obj/item/reagent_containers/food/snacks/liquid/protein = 10, - /obj/item/reagent_containers/pill/diet = 8, - /obj/item/towel/random = 8, - /obj/item/reagent_containers/food/snacks/brainsnax = 5, - ) - // yes, it's a ripoff, much like real sports food. - prices = list( - /obj/item/reagent_containers/food/drinks/smallmilk = 3, - /obj/item/reagent_containers/food/drinks/smallchocmilk = 3, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 15, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 5, - /obj/item/reagent_containers/food/snacks/wrapped/proteinbar = 10, - /obj/item/reagent_containers/food/snacks/liquid = 15, - /obj/item/reagent_containers/food/snacks/liquid/protein = 15, - /obj/item/reagent_containers/pill/diet = 10, - /obj/item/towel/random = 15, - /obj/item/reagent_containers/food/snacks/brainsnax = 10, - ) - contraband = list( - /obj/item/reagent_containers/syringe/steroid = 4 - ) -/obj/machinery/vending/weeb - name = "Nippon-Tan!" - desc = "A vendor full of asian snackfood variety!" - icon_state = "weeb" - icon_vend = "weeb-vend" - products = list( - /obj/item/reagent_containers/food/snacks/riceball = 10, - /obj/item/reagent_containers/food/snacks/hanamidango = 10, - /obj/item/reagent_containers/food/snacks/gomadango = 10, - /obj/item/reagent_containers/food/snacks/mochi = 10, - /obj/item/reagent_containers/food/snacks/dorayaki = 10, - /obj/item/reagent_containers/food/snacks/chocobanana = 10, - /obj/item/storage/box/pocky = 10, - /obj/item/storage/box/gondola = 10, - /obj/item/reagent_containers/food/snacks/bagged/wpeas = 10, - /obj/item/reagent_containers/food/drinks/cans/ochamidori = 10, - /obj/item/reagent_containers/food/drinks/cans/ramune = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 10, - /obj/item/clothing/under/kimono = 5, - /obj/item/clothing/under/kimono/yellow = 5, - /obj/item/clothing/under/kimono/blue = 5, - /obj/item/clothing/under/bsing = 5, - /obj/item/clothing/shoes/boots/bsing = 5, - /obj/item/clothing/under/ysing = 5, - /obj/item/clothing/shoes/boots/ysing = 5, - /obj/item/storage/daki = 10, - /obj/item/toy/katana = 10 - ) - prices = list( - /obj/item/reagent_containers/food/snacks/riceball = 5, - /obj/item/reagent_containers/food/snacks/hanamidango = 5, - /obj/item/reagent_containers/food/snacks/gomadango = 5, - /obj/item/reagent_containers/food/snacks/mochi = 5, - /obj/item/reagent_containers/food/snacks/dorayaki = 5, - /obj/item/reagent_containers/food/snacks/chocobanana = 5, - /obj/item/storage/box/pocky = 5, - /obj/item/storage/box/gondola = 5, - /obj/item/reagent_containers/food/snacks/bagged/wpeas = 5, - /obj/item/reagent_containers/food/drinks/cans/ochamidori = 8, - /obj/item/reagent_containers/food/drinks/cans/ramune = 10, - /obj/item/reagent_containers/food/drinks/cans/kyocola = 2, - /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 2, - /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 2, - /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 2, - /obj/item/clothing/under/kimono = 10, - /obj/item/clothing/under/kimono/yellow = 10, - /obj/item/clothing/under/kimono/blue = 10, - /obj/item/clothing/under/bsing = 10, - /obj/item/clothing/shoes/boots/bsing = 10, - /obj/item/clothing/under/ysing = 10, - /obj/item/clothing/shoes/boots/ysing = 10, - /obj/item/storage/daki = 50, - /obj/item/toy/katana = 15 - ) - -/obj/machinery/vending/cart - name = "PTech" - desc = "Cartridges for PDAs." - product_slogans = "Carts to go!" - icon_state = "cart" - icon_deny = "cart-deny" - req_access = list(ACCESS_COMMAND_HOP) - products = list( - /obj/item/cartridge/medical = 10, - /obj/item/cartridge/engineering = 10, - /obj/item/cartridge/security = 10, - /obj/item/cartridge/janitor = 10, - /obj/item/cartridge/signal/science = 10, - /obj/item/pda/heads = 10, - /obj/item/cartridge/captain = 3, - /obj/item/cartridge/quartermaster = 10, - ) - req_log_access = ACCESS_COMMAND_HOP - has_logs = 1 - -/obj/machinery/vending/cigarette - name = "cigarette machine" - desc = "If you want to get cancer, might as well do it in style!" - product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!" - product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs.;Feeling temperamental? Try a Temperamento!;Carcinoma Angels - go fuck yerself!;Don't be so hard on yourself, kid. Smoke a Lucky Star!" - vend_delay = 34 - icon_state = "cigs" - products = list( - /obj/item/storage/fancy/cigarettes = 5, - /obj/item/storage/fancy/cigarettes/dromedaryco = 5, - /obj/item/storage/fancy/cigarettes/killthroat = 5, - /obj/item/storage/fancy/cigarettes/luckystars = 5, - /obj/item/storage/fancy/cigarettes/jerichos = 5, - /obj/item/storage/fancy/cigarettes/menthols = 5, - /obj/item/storage/rollingpapers = 5, - /obj/item/storage/rollingblunts = 5, - /obj/item/storage/box/matches = 10, - /obj/item/flame/lighter/random = 4, - ) - contraband = list( - /obj/item/flame/lighter/zippo = 4, - ) - premium = list( - /obj/item/storage/fancy/cigar = 5, - /obj/item/storage/fancy/cigarettes/carcinomas = 5, - /obj/item/storage/fancy/cigarettes/professionals = 5, - /obj/item/storage/fancy/cigarettes/blackstars = 5, - ) - prices = list( - /obj/item/storage/fancy/cigarettes = 12, - /obj/item/storage/fancy/cigarettes/dromedaryco = 15, - /obj/item/storage/fancy/cigarettes/killthroat = 17, - /obj/item/storage/fancy/cigarettes/luckystars = 17, - /obj/item/storage/fancy/cigarettes/jerichos = 22, - /obj/item/storage/fancy/cigarettes/menthols = 18, - /obj/item/storage/rollingpapers = 15, - /obj/item/storage/rollingblunts = 25, - /obj/item/storage/box/matches = 3, - /obj/item/flame/lighter/random = 5, - ) - -/obj/machinery/vending/medical - name = "NanoMed Plus" - desc = "Medical drug dispenser." - icon_state = "med" - icon_deny = "med-deny" - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" - req_access = list(ACCESS_MEDICAL_MAIN) - products = list( - /obj/item/reagent_containers/glass/bottle/antitoxin = 4, - /obj/item/reagent_containers/glass/bottle/inaprovaline = 4, - /obj/item/reagent_containers/glass/bottle/stoxin = 4, - /obj/item/reagent_containers/glass/bottle/toxin = 4, - /obj/item/reagent_containers/syringe/antiviral = 4, - /obj/item/reagent_containers/syringe = 30, - /obj/item/healthanalyzer = 5, - /obj/item/reagent_containers/glass/beaker = 4, - /obj/item/reagent_containers/dropper = 2, - /obj/item/stack/medical/advanced/bruise_pack = 6, - /obj/item/stack/medical/advanced/ointment = 6, - /obj/item/stack/medical/splint = 4, - /obj/item/storage/pill_bottle/carbon = 2, - /obj/item/storage/pill_bottle = 3, - /obj/item/storage/box/vmcrystal = 4, - /obj/item/clothing/glasses/omnihud/med = 4, - /obj/item/glasses_kit = 1, - /obj/item/storage/quickdraw/syringe_case = 4, - /obj/item/storage/single_use/med_pouch/overdose = 3, - /obj/item/storage/single_use/med_pouch/radiation = 3, - /obj/item/storage/single_use/med_pouch/toxin = 3, - /obj/item/storage/single_use/med_pouch/oxyloss = 3, - /obj/item/storage/single_use/med_pouch/burn = 3, - /obj/item/storage/single_use/med_pouch/trauma = 3, - /obj/item/storage/hypokit = 6, - ) - contraband = list( - /obj/item/reagent_containers/pill/tox = 3, - /obj/item/reagent_containers/pill/stox = 4, - /obj/item/reagent_containers/pill/antitox = 6, - ) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - req_log_access = ACCESS_MEDICAL_CMO - has_logs = 1 - -/obj/machinery/vending/phoronresearch - name = "Toximate 3000" - desc = "All the fine parts you need in one vending machine!" - products = list( - /obj/item/clothing/under/rank/scientist = 6, - /obj/item/clothing/suit/bio_suit = 6, - /obj/item/clothing/head/bio_hood = 6, - /obj/item/transfer_valve = 6, - /obj/item/assembly/timer = 6, - /obj/item/assembly/signaler = 6, - /obj/item/assembly/prox_sensor = 6, - /obj/item/assembly/igniter = 6, - ) - req_log_access = ACCESS_SCIENCE_RD - has_logs = 1 - -/obj/machinery/vending/wallmed1 - name = "NanoMed" - desc = "A wall-mounted version of the NanoMed." - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" - icon_state = "wallmed" - icon_deny = "wallmed-deny" - density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude - products = list( - /obj/item/stack/medical/bruise_pack = 2, - /obj/item/storage/single_use/med_pouch/trauma = 1, - /obj/item/stack/medical/ointment = 2, - /obj/item/storage/single_use/med_pouch/burn = 1, - /obj/item/reagent_containers/hypospray/autoinjector = 4, - /obj/item/healthanalyzer = 1, - ) - contraband = list( - /obj/item/reagent_containers/syringe/antitoxin = 4, - /obj/item/reagent_containers/syringe/antiviral = 4, - /obj/item/reagent_containers/pill/tox = 1, - ) - req_log_access = ACCESS_MEDICAL_CMO - has_logs = 1 - -// Modified version from tether_things.dm -/obj/machinery/vending/wallmed1/public - products = list( - /obj/item/stack/medical/bruise_pack = 8, - /obj/item/storage/single_use/med_pouch/trauma = 2, - /obj/item/stack/medical/ointment = 8, - /obj/item/storage/single_use/med_pouch/burn = 2, - /obj/item/reagent_containers/hypospray/autoinjector = 16, - /obj/item/healthanalyzer = 4, - ) - -//Airlock antitox vendor. Used on the tether map and a few other POIS and such -/obj/machinery/vending/wallmed_airlock - name = "Airlock NanoMed" - desc = "Wall-mounted Medical Equipment dispenser. This limited-use version dispenses antitoxins with mild painkillers for surface EVAs." - icon_state = "wallmed" - density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude - products = list( - /obj/item/reagent_containers/pill/airlock = 20, - /obj/item/storage/single_use/med_pouch/oxyloss = 2, - /obj/item/storage/single_use/med_pouch/toxin = 2, - /obj/item/healthanalyzer = 1, - ) - contraband = list(/obj/item/reagent_containers/pill/tox = 2) - req_log_access = ACCESS_MEDICAL_CMO - has_logs = 1 - -/obj/machinery/vending/wallmed2 - name = "NanoMed" - desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment." - icon_state = "wallmed" - icon_deny = "wallmed-deny" - density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude - products = list( - /obj/item/reagent_containers/hypospray/autoinjector = 5, - /obj/item/reagent_containers/syringe/antitoxin = 3, - /obj/item/stack/medical/bruise_pack = 3, - /obj/item/storage/single_use/med_pouch/oxyloss = 1, - /obj/item/storage/single_use/med_pouch/trauma = 1, - /obj/item/storage/single_use/med_pouch/burn = 1, - /obj/item/storage/single_use/med_pouch/toxin = 1, - /obj/item/storage/single_use/med_pouch/radiation = 1, - /obj/item/storage/single_use/med_pouch/overdose = 1, - /obj/item/stack/medical/ointment = 3, - /obj/item/healthanalyzer = 3, - ) - contraband = list( - /obj/item/reagent_containers/pill/tox = 3, - ) - req_log_access = ACCESS_MEDICAL_CMO - has_logs = 1 - -/obj/machinery/vending/security - name = "SecTech" - desc = "A security equipment vendor." - product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" - icon_state = "sec" - icon_deny = "sec-deny" - req_access = list(ACCESS_SECURITY_EQUIPMENT) - products = list( - /obj/item/handcuffs = 8, - /obj/item/grenade/flashbang = 4, - /obj/item/flash = 5, - /obj/item/reagent_containers/spray/pepper = 6, - /obj/item/reagent_containers/food/snacks/donut/normal = 12, - /obj/item/storage/box/evidence = 6, - /obj/item/gun/ballistic/sec = 2, - /obj/item/ammo_magazine/m45/rubber = 6, - /obj/item/clothing/mask/gas/half = 6, - /obj/item/clothing/glasses/omnihud/sec = 6, - /obj/item/hailer = 6, - /obj/item/barrier_tape_roll/police = 6, - /obj/item/flashlight/glowstick = 6, - ) - contraband = list( - /obj/item/clothing/glasses/sunglasses = 2, - /obj/item/storage/box/donut = 2, - ) - req_log_access = ACCESS_SECURITY_ARMORY - has_logs = 1 - -/obj/machinery/vending/hydronutrients - name = "NutriMax" - desc = "A plant nutrients vendor." - product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!" - product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." - icon_state = "nutri" - icon_deny = "nutri-deny" - products = list( - /obj/item/reagent_containers/glass/bottle/eznutrient = 6, - /obj/item/reagent_containers/glass/bottle/left4zed = 4, - /obj/item/reagent_containers/glass/bottle/robustharvest = 3, - /obj/item/plantspray/pests = 20, - /obj/item/reagent_containers/syringe = 5, - /obj/item/reagent_containers/glass/beaker = 4, - /obj/item/storage/bag/plants = 5, - ) - premium = list( - /obj/item/reagent_containers/glass/bottle/ammonia = 10, - /obj/item/reagent_containers/glass/bottle/diethylamine = 5, - ) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - -/obj/machinery/vending/hydroseeds - name = "MegaSeed Servitor" - desc = "When you need seeds fast!" - product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" - product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" - icon_state = "seeds" - - products = list( - /obj/item/seeds/bananaseed = 3, - /obj/item/seeds/berryseed = 3, - /obj/item/seeds/carrotseed = 3, - /obj/item/seeds/coconutseed = 3, - /obj/item/seeds/chantermycelium = 3, - /obj/item/seeds/chiliseed = 3, - /obj/item/seeds/cornseed = 3, - /obj/item/seeds/eggplantseed = 3, - /obj/item/seeds/potatoseed = 3, - /obj/item/seeds/replicapod = 3, - /obj/item/seeds/soyaseed = 3, - /obj/item/seeds/sunflowerseed = 3, - /obj/item/seeds/taroseed = 3, - /obj/item/seeds/tomatoseed = 3, - /obj/item/seeds/towermycelium = 3, - /obj/item/seeds/wheatseed = 3, - /obj/item/seeds/appleseed = 3, - /obj/item/seeds/poppyseed = 3, - /obj/item/seeds/sugarcaneseed = 3, - /obj/item/seeds/ambrosiavulgarisseed = 3, - /obj/item/seeds/peanutseed = 3, - /obj/item/seeds/whitebeetseed = 3, - /obj/item/seeds/watermelonseed = 3, - /obj/item/seeds/lavenderseed = 3, - /obj/item/seeds/limeseed = 3, - /obj/item/seeds/lemonseed = 3, - /obj/item/seeds/orangeseed = 3, - /obj/item/seeds/grassseed = 3, - /obj/item/seeds/cocoapodseed = 3, - /obj/item/seeds/plumpmycelium = 2, - /obj/item/seeds/cabbageseed = 3, - /obj/item/seeds/grapeseed = 3, - /obj/item/seeds/pumpkinseed = 3, - /obj/item/seeds/cherryseed = 3, - /obj/item/seeds/plastiseed = 3, - /obj/item/seeds/riceseed = 3, - /obj/item/seeds/shrinkshroom = 3, - /obj/item/seeds/megashroom = 3, - /obj/item/seeds/peaseed = 3, - /obj/item/seeds/tobaccoseed = 3, - ) - contraband = list( - /obj/item/seeds/amanitamycelium = 2, - /obj/item/seeds/glowshroom = 2, - /obj/item/seeds/libertymycelium = 2, - /obj/item/seeds/mtearseed = 2, - /obj/item/seeds/nettleseed = 2, - /obj/item/seeds/reishimycelium = 2, - /obj/item/seeds/reishimycelium = 2, - /obj/item/seeds/shandseed = 2, - ) - premium = list( - /obj/item/toy/waterflower = 1, - /obj/item/toy/gnome = 1, - ) - -/** - * Populate hydroseeds product_records - * - * This needs to be customized to fetch the actual names of the seeds, otherwise - * the machine would simply list "packet of seeds" times 20 - */ -/obj/machinery/vending/hydroseeds/build_inventory() - var/list/all_products = list( - list(products, CAT_NORMAL), - list(contraband, CAT_HIDDEN), - list(premium, CAT_COIN)) - - for(var/current_list in all_products) - var/category = current_list[2] - - for(var/entry in current_list[1]) - var/obj/item/seeds/S = new entry(src) - var/name = S.name - var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name) - - product.price = (entry in prices) ? prices[entry] : 0 - product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 - product.category = category - - product_records.Add(product) - -/obj/machinery/vending/magivend - name = "MagiVend" - desc = "A magic vending machine." - icon_state = "MagiVend" - product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!" - vend_delay = 15 - vend_reply = "Have an enchanted evening!" - product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!" - products = list( - /obj/item/clothing/head/wizard = 1, - /obj/item/clothing/suit/wizrobe = 1, - /obj/item/clothing/head/wizard/red = 1, - /obj/item/clothing/suit/wizrobe/red = 1, - /obj/item/clothing/shoes/sandal = 1, - /obj/item/staff = 2, - ) - -/obj/machinery/vending/dinnerware - name = "Dinnerware" - desc = "A kitchen and restaurant equipment vendor." - product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." - icon_state = "dinnerware" - products = list( - /obj/item/tray = 8, - /obj/item/material/kitchen/utensil/fork = 6, - /obj/item/material/knife/plastic = 6, - /obj/item/material/kitchen/utensil/spoon = 6, - /obj/item/material/knife = 3, - /obj/item/material/kitchen/rollingpin = 2, - /obj/item/reagent_containers/food/drinks/glass2/square = 8, - /obj/item/reagent_containers/food/drinks/glass2/shake = 8, - /obj/item/glass_extra/stick = 15, - /obj/item/glass_extra/straw = 15, - /obj/item/clothing/suit/chef/classic = 2, - /obj/item/storage/toolbox/lunchbox = 3, - /obj/item/storage/toolbox/lunchbox/heart = 3, - /obj/item/storage/toolbox/lunchbox/cat = 3, - /obj/item/storage/toolbox/lunchbox/nt = 3, - /obj/item/storage/toolbox/lunchbox/mars = 3, - /obj/item/storage/toolbox/lunchbox/cti = 3, - /obj/item/storage/toolbox/lunchbox/nymph = 3, - /obj/item/storage/toolbox/lunchbox/syndicate = 3, - /obj/item/storage/toolbox/lunchbox/cyancowgirl = 3, - /obj/item/trash/bowl = 30, - /obj/item/reagent_containers/cooking_container/oven = 5, - /obj/item/reagent_containers/cooking_container/fryer = 4, - ) - contraband = list( - /obj/item/material/knife/butch = 2, - ) - -/obj/machinery/vending/sovietsoda - name = "BODA" - desc = "An old sweet water vending machine,how did this end up here?" - icon_state = "sovietsoda" - product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." - products = list( - /obj/item/reagent_containers/food/drinks/bottle/space_up = 30, - ) - contraband = list( - /obj/item/reagent_containers/food/drinks/bottle/cola = 20, - ) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - -/obj/machinery/vending/tool - name = "YouTool" - desc = "Tools for tools." - icon_state = "tool" - icon_deny = "tool-deny" - //req_access = list(ACCESS_ENGINEERING_MAINT) //Maintenance access - products = list( - /obj/item/stack/cable_coil/random = 10, - /obj/item/tool/crowbar = 5, - /obj/item/weldingtool = 3, - /obj/item/tool/wirecutters = 5, - /obj/item/tool/wrench = 5, - /obj/item/atmos_analyzer = 5, - /obj/item/t_scanner = 5, - /obj/item/tool/screwdriver = 5, - /obj/item/flashlight/glowstick = 3, - /obj/item/flashlight/glowstick/red = 3, - /obj/item/flashlight/glowstick/blue = 3, - /obj/item/flashlight/glowstick/orange = 3, - /obj/item/flashlight/glowstick/yellow = 3, - /obj/item/reagent_containers/spray/windowsealant = 5, - ) - contraband = list( - /obj/item/weldingtool/hugetank = 2, - /obj/item/clothing/gloves/fyellow = 2, - ) - premium = list( - /obj/item/clothing/gloves/yellow = 1, - ) - req_log_access = ACCESS_ENGINEERING_CE - has_logs = 1 - -/obj/machinery/vending/engivend - name = "Engi-Vend" - desc = "Spare tool vending. What? Did you expect some witty description?" - icon_state = "engivend" - icon_deny = "engivend-deny" - req_access = list(ACCESS_ENGINEERING_ENGINE) - products = list( - /obj/item/geiger_counter = 4, - /obj/item/clothing/glasses/meson = 2, - /obj/item/multitool = 4, - /obj/item/cell/high = 10, - /obj/item/airlock_electronics = 10, - /obj/item/module/power_control = 10, - /obj/item/circuitboard/airalarm = 10, - /obj/item/circuitboard/firealarm = 10, - /obj/item/circuitboard/status_display = 2, - /obj/item/circuitboard/ai_status_display = 2, - /obj/item/circuitboard/newscaster = 2, - /obj/item/circuitboard/machine/holopad = 2, - /obj/item/circuitboard/intercom = 4, - /obj/item/circuitboard/security/telescreen/entertainment = 4, - /obj/item/stock_parts/motor = 2, - /obj/item/stock_parts/spring = 2, - /obj/item/stock_parts/gear = 2, - /obj/item/circuitboard/atm, - /obj/item/circuitboard/guestpass, - /obj/item/circuitboard/keycard_auth, - /obj/item/circuitboard/photocopier, - /obj/item/circuitboard/fax, - /obj/item/circuitboard/request, - /obj/item/circuitboard/microwave, - /obj/item/circuitboard/washing, - /obj/item/circuitboard/scanner_console, - /obj/item/circuitboard/sleeper_console, - /obj/item/circuitboard/body_scanner, - /obj/item/circuitboard/sleeper, - /obj/item/circuitboard/dna_analyzer, - /obj/item/clothing/glasses/omnihud/eng = 6, - ) - contraband = list( - /obj/item/cell/potato = 3, - ) - premium = list( - /obj/item/storage/belt/utility = 3, - ) - product_records = list() - req_log_access = ACCESS_ENGINEERING_CE - has_logs = 1 - -/obj/machinery/vending/engineering - name = "Robco Tool Maker" - desc = "Everything you need for do-it-yourself station repair." - icon_state = "engi" - icon_deny = "engi-deny" - req_access = list(ACCESS_ENGINEERING_ENGINE) - products = list( - /obj/item/clothing/under/rank/chief_engineer = 4, - /obj/item/clothing/under/rank/engineer = 4, - /obj/item/clothing/shoes/orange = 4, - /obj/item/clothing/head/hardhat = 4, - /obj/item/storage/belt/utility = 4, - /obj/item/clothing/glasses/meson = 4, - /obj/item/clothing/gloves/yellow = 4, - /obj/item/tool/screwdriver = 12, - /obj/item/tool/crowbar = 12, - /obj/item/tool/wirecutters = 12, - /obj/item/multitool = 12, - /obj/item/tool/wrench = 12, - /obj/item/t_scanner = 12, - /obj/item/stack/cable_coil/heavyduty = 8, - /obj/item/cell = 8, - /obj/item/weldingtool = 8, - /obj/item/clothing/head/welding = 8, - /obj/item/light/tube = 10, - /obj/item/clothing/suit/fire = 4, - /obj/item/stock_parts/scanning_module = 5, - /obj/item/stock_parts/micro_laser = 5, - /obj/item/stock_parts/matter_bin = 5, - /obj/item/stock_parts/manipulator = 5, - /obj/item/stock_parts/console_screen = 5, - ) - // There was an incorrect entry (cablecoil/power). I improvised to cablecoil/heavyduty. - // Another invalid entry, /obj/item/circuitry. I don't even know what that would translate to, removed it. - // The original products list wasn't finished. The ones without given quantities became quantity 5. -Sayu - req_log_access = ACCESS_ENGINEERING_CE - has_logs = 1 - -/obj/machinery/vending/robotics - name = "Robotech Deluxe" - desc = "All the tools you need to create your own robot army." - icon_state = "robotics" - icon_deny = "robotics-deny" - req_access = list(ACCESS_SCIENCE_ROBOTICS) - products = list( - /obj/item/clothing/suit/storage/toggle/labcoat = 4, - /obj/item/clothing/under/rank/roboticist = 4, - /obj/item/stack/cable_coil = 4, - /obj/item/flash = 4, - /obj/item/cell/high = 12, - /obj/item/assembly/prox_sensor = 3, - /obj/item/assembly/signaler = 3, - /obj/item/healthanalyzer = 3, - /obj/item/surgical/scalpel = 2, - /obj/item/surgical/circular_saw = 2, - /obj/item/tank/anesthetic = 2, - /obj/item/clothing/mask/breath/medical = 5, - /obj/item/tool/screwdriver = 5, - /obj/item/tool/crowbar = 5, - ) - //everything after the power cell had no amounts, I improvised. -Sayu - req_log_access = ACCESS_SCIENCE_RD - has_logs = 1 - -/obj/machinery/vending/giftvendor - name = "AlliCo Baubles and Confectionaries" - desc = "For that special someone!" - icon_state = "giftvendor" - vend_delay = 15 - products = list( - /obj/item/storage/fancy/heartbox = 5, - /obj/item/toy/bouquet = 5, - /obj/item/toy/bouquet/fake = 4, - /obj/item/paper/card/smile = 3, - /obj/item/paper/card/heart = 3, - /obj/item/paper/card/cat = 3, - /obj/item/paper/card/flower = 3, - /obj/item/clothing/accessory/bracelet/friendship = 5, - /obj/item/toy/plushie/therapy/red = 2, - /obj/item/toy/plushie/therapy/purple = 2, - /obj/item/toy/plushie/therapy/blue = 2, - /obj/item/toy/plushie/therapy/yellow = 2, - /obj/item/toy/plushie/therapy/orange = 2, - /obj/item/toy/plushie/therapy/green = 2, - /obj/item/toy/plushie/nymph = 2, - /obj/item/toy/plushie/mouse = 2, - /obj/item/toy/plushie/kitten = 2, - /obj/item/toy/plushie/lizard = 2, - /obj/item/toy/plushie/spider = 2, - /obj/item/toy/plushie/farwa = 2, - /obj/item/toy/plushie/corgi = 1, - /obj/item/toy/plushie/octopus = 1, - /obj/item/toy/plushie/face_hugger = 1, - /obj/item/toy/plushie/voxie = 1, - /obj/item/toy/plushie/carp = 1, - /obj/item/toy/plushie/deer = 1, - /obj/item/toy/plushie/tabby_cat = 1, - /obj/item/toy/plushie/cyancowgirl = 1, - /obj/item/toy/plushie/bear_grizzly = 2, - /obj/item/toy/plushie/bear_polar = 2, - /obj/item/toy/plushie/bear_panda = 2, - /obj/item/toy/plushie/bear_soda = 2, - /obj/item/toy/plushie/bear_bloody = 2, - /obj/item/toy/plushie/bear_space = 1, - /obj/item/toy/plushie/doll = 3, - /obj/item/storage/daki = 10, - /obj/item/toy/gnome = 4, - ) - premium = list( - /obj/item/reagent_containers/food/drinks/bottle/champagne = 1, - /obj/item/storage/trinketbox = 2, - ) - prices = list( - /obj/item/storage/fancy/heartbox = 25, - /obj/item/toy/bouquet = 25, - /obj/item/toy/bouquet/fake = 15, - /obj/item/paper/card/smile = 1, - /obj/item/paper/card/heart = 1, - /obj/item/paper/card/cat = 1, - /obj/item/paper/card/flower = 1, - /obj/item/clothing/accessory/bracelet/friendship = 10, - /obj/item/toy/plushie/therapy/red = 20, - /obj/item/toy/plushie/therapy/purple = 20, - /obj/item/toy/plushie/therapy/blue = 20, - /obj/item/toy/plushie/therapy/yellow = 20, - /obj/item/toy/plushie/therapy/orange = 20, - /obj/item/toy/plushie/therapy/green = 20, - /obj/item/toy/plushie/nymph = 35, - /obj/item/toy/plushie/mouse = 35, - /obj/item/toy/plushie/kitten = 35, - /obj/item/toy/plushie/lizard = 35, - /obj/item/toy/plushie/spider = 35, - /obj/item/toy/plushie/farwa = 35, - /obj/item/toy/plushie/corgi = 50, - /obj/item/toy/plushie/octopus = 50, - /obj/item/toy/plushie/face_hugger = 50, - /obj/item/toy/plushie/voxie = 50, - /obj/item/toy/plushie/carp = 50, - /obj/item/toy/plushie/deer = 50, - /obj/item/toy/plushie/tabby_cat = 50, - /obj/item/toy/plushie/cyancowgirl = 50, - /obj/item/toy/plushie/bear_grizzly = 20, - /obj/item/toy/plushie/bear_polar = 20, - /obj/item/toy/plushie/bear_panda = 20, - /obj/item/toy/plushie/bear_soda = 35, - /obj/item/toy/plushie/bear_bloody = 35, - /obj/item/toy/plushie/bear_space = 50, - /obj/item/toy/plushie/doll = 50, - /obj/item/storage/daki = 100, - /obj/item/toy/gnome = 20, - ) - -/obj/machinery/vending/fishing - name = "Loot Trawler" - desc = "A special vendor for fishing equipment." - product_ads = "Tired of trawling across the ocean floor? Get our loot!;Chum and rods.;Don't get baited into fishing without us!;Baby is your star-sign pisces? We'd make a perfect match.;Do not fear, plenty to catch around here.;Don't get reeled in helplessly, get your own rod today!" - icon_state = "fishvendor" - products = list( - /obj/item/fishing_rod = 10, - /obj/item/fishing_hook = 20, - /obj/item/fishing_line = 20, - /obj/item/fishing_hook/magnet = 10, - /obj/item/fishing_hook/rescue = 10, - /obj/item/fishing_hook/shiny = 10, - /obj/item/fishing_hook/weighted = 10, - /obj/item/fishing_line = 20, - /obj/item/fishing_line/bouncy = 10, - /obj/item/fishing_line/reinforced = 10, - /obj/item/bait_can/worm = 80, - /obj/item/aquarium_kit = 20, - /obj/item/storage/box/aquarium_props = 20, - /obj/item/storage/fish_case = 30, - /obj/item/book/fish_catalog = 20, - ) - price_default = 10 - prices = list( - /obj/item/fishing_rod = 50, - /obj/item/bait_can/worm = 5, - /obj/item/aquarium_kit = 50, - /obj/item/storage/box/aquarium_props = 25, - ) - -//Custom vendors - -/obj/machinery/vending/food - name = "Food-O-Mat" - desc = "A technological marvel, supposedly able to cook or mix a large variety of food or drink." - icon_state = "boozeomat" - icon_deny = "boozeomat-deny" - products = list( - /obj/item/tray = 8, - /obj/item/material/kitchen/utensil/fork = 6, - /obj/item/material/knife/plastic = 6, - /obj/item/material/kitchen/utensil/spoon = 6, - /obj/item/reagent_containers/food/snacks/tomatosoup = 8, - /obj/item/reagent_containers/food/snacks/mushroomsoup = 8, - /obj/item/reagent_containers/food/snacks/jellysandwich = 8, - /obj/item/reagent_containers/food/snacks/taco = 8, - /obj/item/reagent_containers/food/snacks/cheeseburger = 8, - /obj/item/reagent_containers/food/snacks/grilledcheese = 8, - /obj/item/reagent_containers/food/snacks/hotdog = 8, - /obj/item/reagent_containers/food/snacks/loadedbakedpotato = 8, - /obj/item/reagent_containers/food/snacks/omelette = 8, - /obj/item/reagent_containers/food/snacks/pastatomato = 8, - /obj/item/reagent_containers/food/snacks/tofuburger = 8, - /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza = 2, - /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza = 2, - /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita = 2, - /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza = 2, - /obj/item/reagent_containers/food/snacks/waffles = 4, - /obj/item/reagent_containers/food/snacks/muffin = 4, - /obj/item/reagent_containers/food/snacks/appletart = 4, - /obj/item/reagent_containers/food/snacks/sliceable/applecake = 2, - /obj/item/reagent_containers/food/snacks/sliceable/bananabread = 2, - /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread = 2, - /obj/item/reagent_containers/food/snacks/brainsnax = 5, - ) - contraband = list( - /obj/item/reagent_containers/food/snacks/mysterysoup = 10, - ) - vend_delay = 15 - -/obj/machinery/vending/food/arojoan //Fluff vendor for the lewd houseboat. - name = "Custom Food-O-Mat" - desc = "Do you think Joan cooks? Of course not. Lazy squirrel!" - icon_state = "boozeomat" - icon_deny = "boozeomat-deny" - products = list( - /obj/item/tray = 6, - /obj/item/material/kitchen/utensil/fork = 6, - /obj/item/material/knife/plastic = 6, - /obj/item/material/kitchen/utensil/spoon = 6, - /obj/item/reagent_containers/food/snacks/hotandsoursoup = 3, - /obj/item/reagent_containers/food/snacks/kitsuneudon = 3, - /obj/item/reagent_containers/food/snacks/generalschicken = 3, - /obj/item/reagent_containers/food/snacks/sliceable/sushi = 2, - /obj/item/reagent_containers/food/snacks/jellysandwich = 3, - /obj/item/reagent_containers/food/snacks/grilledcheese = 3, - /obj/item/reagent_containers/food/snacks/hotdog = 3, - /obj/item/storage/box/wings = 2, - /obj/item/reagent_containers/food/snacks/loadedbakedpotato = 3, - /obj/item/reagent_containers/food/snacks/omelette = 3, - /obj/item/reagent_containers/food/snacks/waffles = 3, - /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza = 1, - /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza = 1, - /obj/item/reagent_containers/food/snacks/appletart = 2, - /obj/item/reagent_containers/food/snacks/sliceable/applecake = 1, - /obj/item/reagent_containers/food/snacks/sliceable/bananabread = 2, - /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread = 2, - ) - contraband = list( - /obj/item/reagent_containers/food/snacks/mysterysoup = 10, - ) - vend_delay = 15 -/* For later, then -/obj/machinery/vending/weapon_machine - name = "Frozen Star Guns&Ammo" - desc = "A self-defense equipment vending machine. When you need to take care of that clown." - product_slogans = "The best defense is good offense!;Buy for your whole family today!;Nobody can outsmart bullet!;God created man - Frozen Star made them EQUAL!;Nobody can outsmart bullet!;Stupidity can be cured! By LEAD.;Dead kids can't bully your children!" - product_ads = "Stunning!;Take justice in your own hands!;LEADearship!" - icon_state = "weapon" - products = list(/obj/item/flash = 6, -/obj/item/reagent_containers/spray/pepper = 6, /obj/item/gun/ballistic/olivaw = 5, /obj/item/gun/ballistic/giskard = 5, /obj/item/ammo_magazine/mg/cl32/rubber = 20) - contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) - prices = list(/obj/item/flash = 600, -/obj/item/reagent_containers/spray/pepper = 800, /obj/item/gun/ballistic/olivaw = 1600, /obj/item/gun/ballistic/giskard = 1200, /obj/item/ammo_magazine/mg/cl32/rubber = 200) -*/ - -/obj/machinery/vending/blood - name = "Blood-Onator" - desc = "Freezer-vendor for storage and quick dispensing of blood packs" - product_ads = "The true life juice!;Vampire's choice!;Home-grown blood only!;Donate today, be saved tomorrow!;Approved by Zeng-Hu Pharmaceuticals Incorporated!; Curse you, Vey-Med artificial blood!" - icon_state = "blood" - idle_power_usage = 211 - req_access = list(ACCESS_MEDICAL_MAIN) - products = list( - /obj/item/reagent_containers/blood/prelabeled/APlus = 3, - /obj/item/reagent_containers/blood/prelabeled/AMinus = 3, - /obj/item/reagent_containers/blood/prelabeled/BPlus = 3, - /obj/item/reagent_containers/blood/prelabeled/BMinus = 3, - /obj/item/reagent_containers/blood/prelabeled/ABPlus = 2, - /obj/item/reagent_containers/blood/prelabeled/ABMinus = 1, - /obj/item/reagent_containers/blood/prelabeled/OPlus = 2, - /obj/item/reagent_containers/blood/prelabeled/OMinus = 5, - /obj/item/reagent_containers/blood/empty = 5, - /obj/item/reagent_containers/food/drinks/bludboxmax = 5, - /obj/item/reagent_containers/food/drinks/bludboxmaxlight = 5, - ) - contraband = list( - /obj/item/reagent_containers/glass/bottle/stoxin = 2, - ) - req_log_access = ACCESS_MEDICAL_CMO - has_logs = 1 - -/obj/machinery/vending/loadout - name = "Fingers and Toes" - desc = "A special vendor for gloves and shoes!" - product_ads = "Do you have fingers and toes? COVER THEM UP!;Show me your toes! Wait. NO DON'T! BUY NEW SHOES!;Don't leave prints, BUY SOME GLOVES!;Remember to check your shoes for micros! You don't have to let them out, but just check for them!;Fingers and Toes is not liable for micro entrapment or abuse under the feet of our patrons.!;This little piggy went WE WE WE all the way down to FINGERS AND TOES to pick up some sweet new gloves and shoes." - icon_state = "glovesnshoes" - products = list( - /obj/item/clothing/gloves/evening = 5, - /obj/item/clothing/gloves/fingerless = 5, - /obj/item/clothing/gloves/black = 5, - /obj/item/clothing/gloves/blue = 5, - /obj/item/clothing/gloves/brown = 5, - /obj/item/clothing/gloves/color = 5, - /obj/item/clothing/gloves/green = 5, - /obj/item/clothing/gloves/grey = 5, - /obj/item/clothing/gloves/sterile/latex = 5, - /obj/item/clothing/gloves/light_brown = 5, - /obj/item/clothing/gloves/sterile/nitrile = 5, - /obj/item/clothing/gloves/orange = 5, - /obj/item/clothing/gloves/purple = 5, - /obj/item/clothing/gloves/red = 5, - /obj/item/clothing/gloves/fluff/siren = 5, - /obj/item/clothing/gloves/white = 5, - /obj/item/clothing/gloves/duty = 5, - /obj/item/clothing/shoes/athletic = 5, - /obj/item/clothing/shoes/boots/fluff/siren = 5, - /obj/item/clothing/shoes/slippers = 5, - /obj/item/clothing/shoes/boots/cowboy/classic = 5, - /obj/item/clothing/shoes/boots/cowboy = 5, - /obj/item/clothing/shoes/boots/duty = 5, - /obj/item/clothing/shoes/flats/white/color = 5, - /obj/item/clothing/shoes/flipflop = 5, - /obj/item/clothing/shoes/heels = 5, - /obj/item/clothing/shoes/hitops/black = 5, - /obj/item/clothing/shoes/hitops/blue = 5, - /obj/item/clothing/shoes/hitops/green = 5, - /obj/item/clothing/shoes/hitops/orange = 5, - /obj/item/clothing/shoes/hitops/purple = 5, - /obj/item/clothing/shoes/hitops/red = 5, - /obj/item/clothing/shoes/flats/white/color = 5, - /obj/item/clothing/shoes/hitops/yellow = 5, - /obj/item/clothing/shoes/boots/jackboots = 5, - /obj/item/clothing/shoes/boots/jungle = 5, - /obj/item/clothing/shoes/black/cuffs = 5, - /obj/item/clothing/shoes/black/cuffs/blue = 5, - /obj/item/clothing/shoes/black/cuffs/red = 5, - /obj/item/clothing/shoes/sandal = 5, - /obj/item/clothing/shoes/black = 5, - /obj/item/clothing/shoes/blue = 5, - /obj/item/clothing/shoes/brown = 5, - /obj/item/clothing/shoes/laceup = 5, - /obj/item/clothing/shoes/green = 5, - /obj/item/clothing/shoes/laceup/brown = 5, - /obj/item/clothing/shoes/orange = 5, - /obj/item/clothing/shoes/purple = 5, - /obj/item/clothing/shoes/red = 5, - /obj/item/clothing/shoes/white = 5, - /obj/item/clothing/shoes/yellow = 5, - /obj/item/clothing/shoes/skater = 5, - /obj/item/clothing/shoes/boots/cowboy/snakeskin = 5, - /obj/item/clothing/shoes/boots/jackboots/toeless = 5, - /obj/item/clothing/shoes/boots/workboots/toeless = 5, - /obj/item/clothing/shoes/boots/winter = 5, - /obj/item/clothing/shoes/boots/workboots = 5, - /obj/item/clothing/shoes/footwraps = 5, - /obj/item/clothing/shoes/utilitarian = 5, - ) - premium = list( - /obj/item/clothing/gloves/rainbow = 1, - /obj/item/clothing/shoes/rainbow = 1, - ) - contraband = list( - /obj/item/clothing/shoes/syndigaloshes = 1, - /obj/item/clothing/shoes/clown_shoes = 1, - ) - price_default = 10 - -/obj/machinery/vending/loadout/uniform - name = "The Basics" - desc = "A vendor using compressed matter cartridges to store large amounts of basic station uniforms." - product_ads = "Don't get caught naked!;Pick up your uniform!;Using compressed matter cartridges and VERY ETHICAL labor practices, we bring you the uniforms you need!;No uniform? No problem!;We've got your covered!;The Basics is not responsible for being crushed under the amount of things inside our machines. DO NOT VEND IN EXCESS!!" - icon_state = "loadout" - icon_vend = "loadout-purchase" - vend_delay = 16 - products = list( - /obj/item/pda = 25, - /obj/item/radio/headset = 25, - /obj/item/storage/backpack/ = 10, - /obj/item/storage/backpack/messenger = 10, - /obj/item/storage/backpack/satchel = 10, - /obj/item/clothing/under/color = 5, - /obj/item/clothing/under/color/aqua = 5, - /obj/item/clothing/under/color/black = 5, - /obj/item/clothing/under/color/blackjumpskirt = 5, - /obj/item/clothing/under/color/blue = 5, - /obj/item/clothing/under/color/brown = 5, - /obj/item/clothing/under/color/green = 5, - /obj/item/clothing/under/color/grey = 5, - /obj/item/clothing/under/color/orange = 5, - /obj/item/clothing/under/color/pink = 5, - /obj/item/clothing/under/color/red = 5, - /obj/item/clothing/under/color/white = 5, - /obj/item/clothing/under/color/yellow = 5, - /obj/item/clothing/shoes/black = 20, - /obj/item/clothing/shoes/white = 20, - ) - -/obj/machinery/vending/loadout/accessory - name = "Looty Inc." - desc = "A special vendor for accessories." - product_ads = "Want shinies? We have the shinies.;Need that special something to complete your outfit? We have what you need!;Ditch that old dull dangly something you've got and pick up one of our shinies!;Bracelets, collars, scarfs rings and more! We have the fancy things you need!;Does your pet need a collar? We don't judge! Keep them in line with one of one of ours!;Top of the line materials! 'Hand crafted' goods!" - icon_state = "accessory" - icon_vend = "accessory-purchase" - vend_delay = 6 - products = list( - /obj/item/clothing/accessory = 5, - /obj/item/clothing/accessory/armband/med/color = 10, - /obj/item/clothing/accessory/asymmetric = 5, - /obj/item/clothing/accessory/asymmetric/purple = 5, - /obj/item/clothing/accessory/asymmetric/green = 5, - /obj/item/clothing/accessory/bracelet = 5, - /obj/item/clothing/accessory/bracelet/material = 5, - /obj/item/clothing/accessory/bracelet/friendship = 5, - /obj/item/clothing/accessory/chaps = 5, - /obj/item/clothing/accessory/chaps/black = 5, - /obj/item/storage/briefcase/clutch = 1, - /obj/item/clothing/accessory/collar = 5, - /obj/item/clothing/accessory/collar/bell = 5, - /obj/item/clothing/accessory/collar/spike = 5, - /obj/item/clothing/accessory/collar/pink = 5, - /obj/item/clothing/accessory/collar/holo = 5, - /obj/item/clothing/accessory/collar/shock = 5, - /obj/item/storage/belt/fannypack = 1, - /obj/item/storage/belt/fannypack/white = 5, - /obj/item/clothing/accessory/fullcape = 5, - /obj/item/clothing/accessory/halfcape = 5, - /obj/item/clothing/accessory/hawaii = 5, - /obj/item/clothing/accessory/hawaii/random = 5, - /obj/item/clothing/accessory/locket = 5, - /obj/item/storage/backpack/purse = 1, - /obj/item/clothing/accessory/sash = 5, - /obj/item/clothing/accessory/scarf = 5, - /obj/item/clothing/accessory/scarf/red = 5, - /obj/item/clothing/accessory/scarf/darkblue = 5, - /obj/item/clothing/accessory/scarf/purple = 5, - /obj/item/clothing/accessory/scarf/yellow = 5, - /obj/item/clothing/accessory/scarf/orange = 5, - /obj/item/clothing/accessory/scarf/lightblue = 5, - /obj/item/clothing/accessory/scarf/white = 5, - /obj/item/clothing/accessory/scarf/black = 5, - /obj/item/clothing/accessory/scarf/zebra = 5, - /obj/item/clothing/accessory/scarf/christmas = 5, - /obj/item/clothing/accessory/scarf/stripedred = 5, - /obj/item/clothing/accessory/scarf/stripedgreen = 5, - /obj/item/clothing/accessory/scarf/stripedblue = 5, - /obj/item/clothing/accessory/jacket = 5, - /obj/item/clothing/accessory/jacket/checkered = 5, - /obj/item/clothing/accessory/jacket/burgundy = 5, - /obj/item/clothing/accessory/jacket/navy = 5, - /obj/item/clothing/accessory/jacket/charcoal = 5, - /obj/item/clothing/accessory/vest = 5, - /obj/item/clothing/accessory/sweater = 5, - /obj/item/clothing/accessory/sweater/pink = 5, - /obj/item/clothing/accessory/sweater/mint = 5, - /obj/item/clothing/accessory/sweater/blue = 5, - /obj/item/clothing/accessory/sweater/heart = 5, - /obj/item/clothing/accessory/sweater/nt = 5, - /obj/item/clothing/accessory/sweater/keyhole = 5, - /obj/item/clothing/accessory/sweater/winterneck = 5, - /obj/item/clothing/accessory/sweater/uglyxmas = 5, - /obj/item/clothing/accessory/sweater/flowersweater = 5, - /obj/item/clothing/accessory/sweater/redneck = 5, - /obj/item/clothing/accessory/sweater/virgin = 5, - /obj/item/clothing/accessory/tie = 5, - /obj/item/clothing/accessory/tie/horrible = 5, - /obj/item/clothing/accessory/tie/white = 5, - /obj/item/clothing/accessory/tie/navy = 5, - /obj/item/clothing/accessory/tie/yellow = 5, - /obj/item/clothing/accessory/tie/darkgreen = 5, - /obj/item/clothing/accessory/tie/black = 5, - /obj/item/clothing/accessory/tie/red_long = 5, - /obj/item/clothing/accessory/tie/red_clip = 5, - /obj/item/clothing/accessory/tie/blue_long = 5, - /obj/item/clothing/accessory/tie/blue_clip = 5, - /obj/item/clothing/accessory/tie/red = 5, - /obj/item/clothing/accessory/wcoat = 5, - /obj/item/clothing/accessory/wcoat/red = 5, - /obj/item/clothing/accessory/wcoat/grey = 5, - /obj/item/clothing/accessory/wcoat/brown = 5, - /obj/item/clothing/accessory/wcoat/gentleman = 5, - /obj/item/clothing/accessory/wcoat/swvest = 5, - /obj/item/clothing/accessory/wcoat/swvest/blue = 5, - /obj/item/clothing/accessory/wcoat/swvest/red = 5, - /obj/item/storage/wallet = 5, - /obj/item/storage/wallet/poly = 5, - /obj/item/storage/wallet/womens = 5, - /obj/item/lipstick = 5, - /obj/item/lipstick/purple = 5, - /obj/item/lipstick/jade = 5, - /obj/item/lipstick/black = 5, - /obj/item/clothing/ears/earmuffs = 5, - /obj/item/clothing/ears/earmuffs/headphones = 5, - /obj/item/clothing/ears/earring/stud = 5, - /obj/item/clothing/ears/earring/dangle = 5, - /obj/item/clothing/gloves/ring/mariner = 5, - /obj/item/clothing/gloves/ring/engagement = 5, - /obj/item/clothing/gloves/ring/seal/signet = 5, - /obj/item/clothing/gloves/ring/seal/mason = 5, - /obj/item/clothing/gloves/ring/material/plastic = 5, - /obj/item/clothing/gloves/ring/material/steel = 5, - /obj/item/clothing/gloves/ring/material/gold = 5, - /obj/item/clothing/glasses/eyepatch = 5, - /obj/item/clothing/glasses/gglasses = 5, - /obj/item/clothing/glasses/regular/hipster = 5, - /obj/item/clothing/glasses/rimless = 5, - /obj/item/clothing/glasses/thin = 5, - /obj/item/clothing/glasses/monocle = 5, - /obj/item/clothing/glasses/goggles = 5, - /obj/item/clothing/glasses/fluff/spiffygogs = 5, - /obj/item/clothing/glasses/fakesunglasses = 5, - /obj/item/clothing/glasses/fakesunglasses/aviator = 5, - /obj/item/clothing/mask/bandana/blue = 5, - /obj/item/clothing/mask/bandana/gold = 5, - /obj/item/clothing/mask/bandana/green = 5, - /obj/item/clothing/mask/bandana/red = 5, - /obj/item/clothing/mask/surgical = 5, - ) - premium = list(/obj/item/bedsheet/rainbow = 1) - contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1) - price_default = 10 - -/obj/machinery/vending/loadout/clothing - name = "General Jump" - desc = "A special vendor using compressed matter cartridges to store large amounts of clothing." - product_ads = "Tired of your grey jumpsuit? Spruce yourself up!;We have the outfit for you!;Don't let that grey jumpsuit get you down, get a ROBUST outfit right now!;Using compressed matter catridges and VERY ETHICAL labor practices to bring YOU the clothing you crave!;Are you sure you want to go to work in THAT?;All of our wares have a whole TWO pockets!" - icon_state = "clothing" - icon_vend = "clothing-purchase" - vend_delay = 16 - products = list( - /obj/item/clothing/under/bathrobe = 5, - /obj/item/clothing/under/dress/black_corset = 5, - /obj/item/clothing/under/blazer = 5, - /obj/item/clothing/under/blazer/skirt = 5, - /obj/item/clothing/under/cheongsam = 5, - /obj/item/clothing/under/cheongsam/red = 5, - /obj/item/clothing/under/cheongsam/blue = 5, - /obj/item/clothing/under/cheongsam/black = 5, - /obj/item/clothing/under/cheongsam/darkred = 5, - /obj/item/clothing/under/cheongsam/darkgreen = 5, - /obj/item/clothing/under/cheongsam/green = 5, - /obj/item/clothing/under/cheongsam/purple = 5, - /obj/item/clothing/under/cheongsam/darkblue = 5, - /obj/item/clothing/under/croptop = 5, - /obj/item/clothing/under/croptop/red = 5, - /obj/item/clothing/under/croptop/grey = 5, - /obj/item/clothing/under/cuttop = 5, - /obj/item/clothing/under/cuttop/red = 5, - /obj/item/clothing/under/suit_jacket/female/skirt = 5, - /obj/item/clothing/under/dress/dress_fire = 5, - /obj/item/clothing/under/dress/flamenco = 5, - /obj/item/clothing/under/dress/flower_dress = 5, - /obj/item/clothing/under/fluff/gnshorts = 5, - /obj/item/clothing/under/color = 5, - /obj/item/clothing/under/color/aqua = 5, - /obj/item/clothing/under/color/black = 5, - /obj/item/clothing/under/color/blackf = 5, - /obj/item/clothing/under/color/blackjumpskirt = 5, - /obj/item/clothing/under/color/blue = 5, - /obj/item/clothing/under/color/brown = 5, - /obj/item/clothing/under/color/darkblue = 5, - /obj/item/clothing/under/color/darkred = 5, - /obj/item/clothing/under/color/green = 5, - /obj/item/clothing/under/color/grey = 5, - /obj/item/clothing/under/color/lightblue = 5, - /obj/item/clothing/under/color/lightbrown = 5, - /obj/item/clothing/under/color/lightgreen = 5, - /obj/item/clothing/under/color/lightpurple = 5, - /obj/item/clothing/under/color/lightred = 5, - /obj/item/clothing/under/color/orange = 5, - /obj/item/clothing/under/color/pink = 5, - /obj/item/clothing/under/color/prison = 5, - /obj/item/clothing/under/color/ranger = 5, - /obj/item/clothing/under/color/red = 5, - /obj/item/clothing/under/color/white = 5, - /obj/item/clothing/under/color/yellow = 5, - /obj/item/clothing/under/color/yellowgreen = 5, - /obj/item/clothing/under/brandjumpsuit/aether = 5, - /obj/item/clothing/under/brandjumpsuit/focal = 5, - /obj/item/clothing/under/brandjumpsuit/hephaestus = 5, - /obj/item/clothing/under/brandjumpsuit/wardt = 5, - /obj/item/clothing/under/kilt = 5, - /obj/item/clothing/under/fluff/latexmaid = 5, - /obj/item/clothing/under/dress/lilacdress = 5, - /obj/item/clothing/under/dress/white2 = 5, - /obj/item/clothing/under/dress/white4 = 5, - /obj/item/clothing/under/dress/maid = 5, - /obj/item/clothing/under/dress/maid/sexy = 5, - /obj/item/clothing/under/dress/maid/janitor = 5, - /obj/item/clothing/head/headband/maid = 5, - /obj/item/clothing/under/kamishimo = 5, - /obj/item/clothing/under/kimono = 5, - /obj/item/clothing/under/kimono_black = 5, - /obj/item/clothing/under/kimono_sakura = 5, - /obj/item/clothing/under/kimono_fancy = 5, - /obj/item/clothing/under/kimono/red = 5, - /obj/item/clothing/under/kimono/orange = 5, - /obj/item/clothing/under/kimono/yellow = 5, - /obj/item/clothing/under/kimono/green = 5, - /obj/item/clothing/under/kimono/blue = 5, - /obj/item/clothing/under/kimono/purple = 5, - /obj/item/clothing/under/kimono/violet = 5, - /obj/item/clothing/under/kimono/pink = 5, - /obj/item/clothing/under/kimono/earth = 5, - /obj/item/clothing/under/cheong = 5, - /obj/item/clothing/under/cheong/white = 5, - /obj/item/clothing/under/cheong/red = 5, - /obj/item/clothing/under/qipao = 5, - /obj/item/clothing/under/qipao/white = 5, - /obj/item/clothing/under/qipao/red = 5, - /obj/item/clothing/under/moderncoat = 5, - /obj/item/clothing/under/permit = 5, - /obj/item/clothing/under/oldwoman = 5, - /obj/item/clothing/under/frontier = 5, - /obj/item/clothing/under/brandjumpsuit/mbill = 5, - /obj/item/clothing/under/pants/baggy/ = 5, - /obj/item/clothing/under/pants/baggy/classicjeans = 5, - /obj/item/clothing/under/pants/baggy/mustangjeans = 5, - /obj/item/clothing/under/pants/baggy/blackjeans = 5, - /obj/item/clothing/under/pants/baggy/greyjeans = 5, - /obj/item/clothing/under/pants/baggy/youngfolksjeans = 5, - /obj/item/clothing/under/pants/baggy/white = 5, - /obj/item/clothing/under/pants/baggy/red = 5, - /obj/item/clothing/under/pants/baggy/black = 5, - /obj/item/clothing/under/pants/baggy/tan = 5, - /obj/item/clothing/under/pants/baggy/track = 5, - /obj/item/clothing/under/pants/baggy/khaki = 5, - /obj/item/clothing/under/pants/baggy/camo = 5, - /obj/item/clothing/under/pants/utility/ = 5, - /obj/item/clothing/under/pants/utility/orange = 5, - /obj/item/clothing/under/pants/utility/blue = 5, - /obj/item/clothing/under/pants/utility/white = 5, - /obj/item/clothing/under/pants/utility/red = 5, - /obj/item/clothing/under/pants/chaps = 5, - /obj/item/clothing/under/pants/chaps/black = 5, - /obj/item/clothing/under/pants/track = 5, - /obj/item/clothing/under/pants/track/red = 5, - /obj/item/clothing/under/pants/track/white = 5, - /obj/item/clothing/under/pants/track/green = 5, - /obj/item/clothing/under/pants/track/blue = 5, - /obj/item/clothing/under/pants/yogapants = 5, - /obj/item/clothing/under/ascetic = 5, - /obj/item/clothing/under/dress/white3 = 5, - /obj/item/clothing/under/skirt/pleated = 5, - /obj/item/clothing/under/dress/darkred = 5, - /obj/item/clothing/under/dress/redeveninggown = 5, - /obj/item/clothing/under/dress/red_swept_dress = 5, - /obj/item/clothing/under/dress/sailordress = 5, - /obj/item/clothing/under/dress/sari = 5, - /obj/item/clothing/under/dress/sari/green = 5, - /obj/item/clothing/under/shorts/red = 5, - /obj/item/clothing/under/shorts/green = 5, - /obj/item/clothing/under/shorts/blue = 5, - /obj/item/clothing/under/shorts/black = 5, - /obj/item/clothing/under/shorts/grey = 5, - /obj/item/clothing/under/shorts/white = 5, - /obj/item/clothing/under/shorts/jeans = 5, - /obj/item/clothing/under/shorts/jeans/ = 5, - /obj/item/clothing/under/shorts/jeans/classic = 5, - /obj/item/clothing/under/shorts/jeans/mustang = 5, - /obj/item/clothing/under/shorts/jeans/youngfolks = 5, - /obj/item/clothing/under/shorts/jeans/black = 5, - /obj/item/clothing/under/shorts/jeans/grey = 5, - /obj/item/clothing/under/shorts/khaki/ = 5, - /obj/item/clothing/under/skirt/loincloth = 5, - /obj/item/clothing/under/skirt/khaki = 5, - /obj/item/clothing/under/skirt/blue = 5, - /obj/item/clothing/under/skirt/red = 5, - /obj/item/clothing/under/skirt/denim = 5, - /obj/item/clothing/under/skirt/pleated = 5, - /obj/item/clothing/under/skirt/outfit/plaid_blue = 5, - /obj/item/clothing/under/skirt/outfit/plaid_red = 5, - /obj/item/clothing/under/skirt/outfit/plaid_purple = 5, - /obj/item/clothing/under/skirt/outfit/plaid_green = 5, - /obj/item/clothing/under/overalls/sleek = 5, - /obj/item/clothing/under/sl_suit = 5, - /obj/item/clothing/under/gentlesuit = 5, - /obj/item/clothing/under/gentlesuit/skirt = 5, - /obj/item/clothing/under/suit_jacket = 5, - /obj/item/clothing/under/suit_jacket/really_black/skirt = 5, - /obj/item/clothing/under/suit_jacket/really_black = 5, - /obj/item/clothing/under/suit_jacket/female/skirt = 5, - /obj/item/clothing/under/suit_jacket/female/ = 5, - /obj/item/clothing/under/suit_jacket/red = 5, - /obj/item/clothing/under/suit_jacket/red/skirt = 5, - /obj/item/clothing/under/suit_jacket/charcoal = 5, - /obj/item/clothing/under/suit_jacket/charcoal/skirt = 5, - /obj/item/clothing/under/suit_jacket/navy = 5, - /obj/item/clothing/under/suit_jacket/navy/skirt = 5, - /obj/item/clothing/under/suit_jacket/burgundy = 5, - /obj/item/clothing/under/suit_jacket/burgundy/skirt = 5, - /obj/item/clothing/under/suit_jacket/checkered = 5, - /obj/item/clothing/under/suit_jacket/checkered/skirt = 5, - /obj/item/clothing/under/suit_jacket/tan = 5, - /obj/item/clothing/under/suit_jacket/tan/skirt = 5, - /obj/item/clothing/under/scratch = 5, - /obj/item/clothing/under/scratch/skirt = 5, - /obj/item/clothing/under/sundress = 5, - /obj/item/clothing/under/sundress_white = 5, - /obj/item/clothing/under/turtlebaggy = 5, - /obj/item/clothing/under/turtlebaggy/purple = 5, - /obj/item/clothing/under/turtlebaggy/red = 5, - /obj/item/clothing/under/turtlebaggy/blue = 5, - /obj/item/clothing/under/turtlebaggy/green = 5, - /obj/item/clothing/under/turtlebaggy/black = 5, - /obj/item/clothing/under/rank/psych/turtleneck/sweater = 5, - /obj/item/storage/box/fluff/swimsuit = 5, - /obj/item/storage/box/fluff/swimsuit/blue = 5, - /obj/item/storage/box/fluff/swimsuit/purple = 5, - /obj/item/storage/box/fluff/swimsuit/green = 5, - /obj/item/storage/box/fluff/swimsuit/red = 5, - /obj/item/storage/box/fluff/swimsuit/white = 5, - /obj/item/storage/box/fluff/swimsuit/earth = 5, - /obj/item/storage/box/fluff/swimsuit/engineering = 5, - /obj/item/storage/box/fluff/swimsuit/science = 5, - /obj/item/storage/box/fluff/swimsuit/security = 5, - /obj/item/storage/box/fluff/swimsuit/medical = 5, - /obj/item/storage/box/fluff/swimsuit/cowbikini = 5, - /obj/item/storage/box/fluff/swimsuit/captain = 5, - /obj/item/storage/box/fluff/swimsuit/highclass = 3, - /obj/item/storage/box/fluff/swimsuit/latex = 3, - /obj/item/storage/box/rainponcho = 5, - /obj/item/clothing/under/utility = 5, - /obj/item/clothing/under/utility/grey = 5, - /obj/item/clothing/under/utility/blue = 5, - /obj/item/clothing/under/fluff/v_nanovest = 5, - /obj/item/clothing/under/dress/westernbustle = 5, - /obj/item/clothing/under/wedding/bride_white = 5, - /obj/item/clothing/under/redcoatformal = 2, - /obj/item/clothing/under/leotardcolor = 5, - /obj/item/clothing/under/leotard = 5, - /obj/item/clothing/under/bunnysuit_f = 5, - /obj/item/clothing/under/bunnysuit_m = 5, - /obj/item/clothing/under/tabard_w = 5, - /obj/item/clothing/under/tabard_b = 5, - /obj/item/clothing/under/toga = 5, - /obj/item/clothing/under/countess = 5, - /obj/item/clothing/under/baroness = 5, - /obj/item/clothing/under/revealing = 5, - /obj/item/clothing/under/belial = 5, - /obj/item/clothing/under/lilin = 5, - /obj/item/clothing/under/asmodai = 5, - /obj/item/storage/backpack/ = 5, - /obj/item/storage/backpack/messenger = 5, - /obj/item/storage/backpack/satchel = 5, - ) - premium = list( - /obj/item/clothing/under/color/rainbow = 1, - ) - contraband = list( - /obj/item/clothing/under/rank/clown = 1, - ) - price_default = 10 - -/obj/machinery/vending/loadout/gadget - name = "Chips Co." - desc = "A special vendor for devices and gadgets." - product_ads = "You can't RESIST our great deals!;Feeling disconnected? We have a gadget for you!;You know you have the capacity to buy our capacitors!;FILL THAT HOLE IN YOUR HEART WITH OUR PLASTIC DISTRACTIONS!!!;Devices for everyone! Chips Co.!;ROBUST INVENTORY, GREAT PRICES! ;DON'T FORGET THE oyPAD 13s PRO! ON SALE NOW, ONLY ONE THOUSAND THALERS!" - icon_state = "gadgets" - icon_vend = "gadgets-purchase" - vend_delay = 11 - products = list( - /obj/item/clothing/suit/circuitry = 1, - /obj/item/clothing/head/circuitry = 1, - /obj/item/clothing/shoes/circuitry = 1, - /obj/item/clothing/gloves/circuitry = 1, - /obj/item/clothing/under/circuitry = 1, - /obj/item/clothing/glasses/circuitry = 1, - /obj/item/clothing/ears/circuitry = 1, - /obj/item/text_to_speech = 5, - /obj/item/paicard = 5, - /obj/item/communicator = 10, - /obj/item/communicator/watch = 10, - /obj/item/radio = 10, - /obj/item/camera = 5, - /obj/item/tape_recorder = 5, - /obj/item/modular_computer/tablet/preset/custom_loadout/cheap = 5, - /obj/item/pda = 10, - /obj/item/radio/headset = 10, - /obj/item/flashlight = 5, - /obj/item/laser_pointer = 3, - /obj/item/clothing/glasses/omnihud = 10, - /obj/item/device/walkpod = 5, - ) - premium = list( - /obj/item/perfect_tele/one_beacon = 1, - ) - contraband = list( - /obj/item/disk/nifsoft/compliance = 1, - ) - prices = list( - /obj/item/modular_computer/tablet/preset/custom_loadout/cheap = 300, - /obj/item/laser_pointer = 100, - /obj/item/device/walkpod = 300, - ) - price_default = 25 - -/obj/machinery/vending/loadout/loadout_misc - name = "Bits and Bobs" - desc = "A special vendor for things and also stuff!" - product_ads = "You never know when you might need an umbrella.;Hey kid... want some cardemon cards?;Miscellaneous for your miscellaneous heart.;Who's bob? Wouldn't you like to know.;I'm sorry there's no grappling hooks in our umbrellas.;We sell things AND stuff." - icon_state = "loadout_misc" - products = list( - /obj/item/cane = 5, - /obj/item/pack/cardemon = 25, - /obj/item/deck/holder = 5, - /obj/item/deck/cah = 5, - /obj/item/deck/cah/black = 5, - /obj/item/deck/tarot = 5, - /obj/item/deck/cards = 5, - /obj/item/pack/spaceball = 10, - /obj/item/storage/pill_bottle/dice = 5, - /obj/item/storage/pill_bottle/dice_nerd = 5, - /obj/item/melee/umbrella/random = 10, - /obj/item/deck/unus = 5, - ) - premium = list( - /obj/item/toy/bosunwhistle = 1, - ) - contraband = list( - /obj/item/toy/katana = 1, - ) - price_default = 25 - -/obj/machinery/vending/loadout/overwear - name = "Big D's Best" - desc = "A special vendor using compressed matter cartridges to store large amounts of overwear!" - product_ads = "Dress your best! It's what big D would want.;Overwear for all occasions!;Big D has what you need if what you need is some form of jacket!;Need a new hoodie? Bid D has you covered.;Big D says you need a new suit!;Big D smiles when he sees you in one of his coats!" - icon_state = "suit" - icon_vend = "suit-purchase" - vend_delay = 16 - products = list( - /obj/item/clothing/suit/storage/apron = 5, - /obj/item/clothing/suit/storage/flannel/aqua = 5, - /obj/item/clothing/suit/storage/toggle/bomber = 5, - /obj/item/clothing/suit/storage/bomber/alt = 5, - /obj/item/clothing/suit/storage/flannel/brown = 5, - /obj/item/clothing/suit/storage/toggle/cardigan = 5, - /obj/item/clothing/accessory/poncho/roles/cloak/custom = 5, - /obj/item/clothing/suit/storage/duster = 5, - /obj/item/clothing/suit/storage/toggle/denim_jacket = 5, - /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen = 5, - /obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless = 5, - /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless = 5, - /obj/item/clothing/suit/storage/fluff/gntop = 5, - /obj/item/clothing/suit/greatcoat = 5, - /obj/item/clothing/suit/storage/flannel = 5, - /obj/item/clothing/suit/storage/greyjacket = 5, - /obj/item/clothing/suit/storage/hazardvest = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/black = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/red = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/blue = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/green = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/orange = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/yellow = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/cti = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/mu = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/nt = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/smw = 5, - /obj/item/clothing/suit/storage/toggle/hoodie/nrti = 5, - /obj/item/clothing/suit/storage/fluff/jacket/field = 5, - /obj/item/clothing/suit/storage/fluff/jacket/air_cavalry = 5, - /obj/item/clothing/suit/storage/fluff/jacket/air_force = 5, - /obj/item/clothing/suit/storage/fluff/jacket/navy = 5, - /obj/item/clothing/suit/storage/fluff/jacket/special_forces = 5, - /obj/item/clothing/suit/kamishimo = 5, - /obj/item/clothing/suit/kimono = 5, - /obj/item/clothing/suit/storage/toggle/labcoat = 5, - /obj/item/clothing/suit/storage/toggle/labcoat/green = 5, - /obj/item/clothing/suit/leathercoat = 5, - /obj/item/clothing/suit/overcoat = 5, - /obj/item/clothing/suit/storage/toggle/leather_jacket = 5, - /obj/item/clothing/suit/storage/leather_jacket_alt = 5, - /obj/item/clothing/suit/storage/toggle/brown_jacket = 5, - /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen = 5, - /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen = 5, - /obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless = 5, - /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless = 5, - /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless = 5, - /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless = 5, - /obj/item/clothing/suit/storage/miljacket = 5, - /obj/item/clothing/suit/storage/miljacket/alt = 5, - /obj/item/clothing/suit/storage/miljacket/green = 5, - /obj/item/clothing/suit/storage/apron/overalls = 5, - /obj/item/clothing/suit/storage/toggle/peacoat = 5, - /obj/item/clothing/accessory/poncho = 5, - /obj/item/clothing/accessory/poncho/green = 5, - /obj/item/clothing/accessory/poncho/red = 5, - /obj/item/clothing/accessory/poncho/purple = 5, - /obj/item/clothing/accessory/poncho/blue = 5, - /obj/item/clothing/suit/jacket/puffer = 5, - /obj/item/clothing/suit/jacket/puffer/vest = 5, - /obj/item/clothing/suit/storage/flannel/red = 5, - /obj/item/clothing/suit/unathi/robe = 5, - /obj/item/clothing/suit/storage/snowsuit = 5, - /obj/item/clothing/suit/storage/toggle/internalaffairs = 5, - /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 5, - /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 5, - /obj/item/clothing/suit/suspenders = 5, - /obj/item/clothing/suit/storage/toggle/track = 5, - /obj/item/clothing/suit/storage/toggle/track/blue = 5, - /obj/item/clothing/suit/storage/toggle/track/green = 5, - /obj/item/clothing/suit/storage/toggle/track/red = 5, - /obj/item/clothing/suit/storage/toggle/track/white = 5, - /obj/item/clothing/suit/storage/trench = 5, - /obj/item/clothing/suit/storage/trench/grey = 5, - /obj/item/clothing/suit/varsity = 5, - /obj/item/clothing/suit/varsity/red = 5, - /obj/item/clothing/suit/varsity/purple = 5, - /obj/item/clothing/suit/varsity/green = 5, - /obj/item/clothing/suit/varsity/blue = 5, - /obj/item/clothing/suit/varsity/brown = 5, - /obj/item/clothing/suit/storage/hooded/wintercoat = 5, - /obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 5, - /obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5, - /obj/item/clothing/suit/storage/gothcoat = 3, - /obj/item/clothing/suit/storage/hobo = 3, - /obj/item/clothing/suit/storage/kamina = 3, - /obj/item/clothing/suit/nerdshirt = 3, - ) - premium = list( - /obj/item/clothing/suit/imperium_monk = 3, - ) - contraband = list( - /obj/item/toy/katana = 1, - ) - price_default = 10 - -/obj/machinery/vending/loadout/costume - name = "Thespian's Delight" - desc = "Sometimes nerds need costumes!" - product_ads = "Don't let your art be stifled!;Remember, practice makes perfect!;Break a leg!;Don't make me get the cane!;Thespian's Delight entering stage right!;Costumes for your acting needs!" - icon_state = "Theater_b" - products = list( - /obj/item/clothing/suit/storage/hooded/carp_costume = 3, - /obj/item/clothing/suit/storage/hooded/carp_costume = 3, - /obj/item/clothing/suit/chickensuit = 3, - /obj/item/clothing/head/chicken = 3, - /obj/item/clothing/head/helmet/gladiator = 3, - /obj/item/clothing/under/gladiator = 3, - /obj/item/clothing/suit/storage/toggle/labcoat/mad = 3, - /obj/item/clothing/under/gimmick/rank/captain/suit = 3, - /obj/item/clothing/glasses/gglasses = 3, - /obj/item/clothing/head/flatcap = 3, - /obj/item/clothing/shoes/boots/jackboots = 3, - /obj/item/clothing/shoes/boots/jackboots = 3, - /obj/item/clothing/shoes/boots/jackboots/knee = 3, - /obj/item/clothing/shoes/boots/jackboots/thigh = 3, - /obj/item/clothing/shoes/boots/jackboots/toeless/knee = 3, - /obj/item/clothing/shoes/boots/jackboots/toeless/thigh = 3, - /obj/item/clothing/under/schoolgirl = 3, - /obj/item/clothing/under/schoolgirl/red = 3, - /obj/item/clothing/under/schoolgirl/green = 3, - /obj/item/clothing/under/schoolgirl/orange = 3, - /obj/item/clothing/head/kitty = 3, - /obj/item/clothing/glasses/sunglasses/blindfold = 3, - /obj/item/clothing/head/beret = 3, - /obj/item/clothing/under/skirt = 3, - /obj/item/clothing/under/suit_jacket = 3, - /obj/item/clothing/head/that = 3, - /obj/item/clothing/accessory/wcoat = 3, - /obj/item/clothing/under/scratch = 3, - /obj/item/clothing/shoes/white = 3, - /obj/item/clothing/gloves/white = 3, - /obj/item/clothing/under/kilt = 3, - /obj/item/clothing/glasses/monocle = 3, - /obj/item/clothing/under/sl_suit = 3, - /obj/item/clothing/mask/fakemoustache = 3, - /obj/item/cane = 3, - /obj/item/clothing/head/bowler = 3, - /obj/item/clothing/head/plaguedoctorhat = 3, - /obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 3, - /obj/item/clothing/mask/gas/plaguedoctor = 3, - /obj/item/clothing/under/owl = 3, - /obj/item/clothing/mask/gas/owl_mask = 3, - /obj/item/clothing/under/waiter = 3, - /obj/item/clothing/suit/storage/apron = 3, - /obj/item/clothing/under/pirate = 3, - /obj/item/clothing/head/pirate = 3, - /obj/item/clothing/suit/pirate = 3, - /obj/item/clothing/glasses/eyepatch = 3, - /obj/item/clothing/head/ushanka = 3, - /obj/item/clothing/under/soviet = 3, - /obj/item/clothing/suit/imperium_monk = 1, - /obj/item/clothing/suit/holidaypriest = 3, - /obj/item/clothing/head/witchwig = 3, - /obj/item/clothing/head/wizard/marisa/fake = 3, - /obj/item/clothing/under/sundress = 3, - /obj/item/staff/broom = 3, - /obj/item/clothing/suit/wizrobe/fake = 3, - /obj/item/clothing/head/wizard/fake = 3, - /obj/item/staff = 3, - /obj/item/clothing/mask/gas/clown_hat = 3, - /obj/item/clothing/under/rank/clown = 3, - /obj/item/clothing/mask/gas/mime = 3, - /obj/item/clothing/under/mime = 3, - /obj/item/clothing/mask/gas/sexyclown = 3, - /obj/item/clothing/under/sexyclown = 3, - /obj/item/clothing/mask/gas/sexymime = 3, - /obj/item/clothing/under/sexymime = 3, - /obj/item/clothing/head/rice = 3, - /obj/item/clothing/head/lobster = 1, - /obj/item/clothing/under/lobster = 1, - /obj/item/clothing/suit/storage/hooded/bee_costume = 1, - /obj/item/clothing/suit/storage/hooded/flash_costume = 1, - /obj/item/clothing/head/nemes = 1, - /obj/item/clothing/head/pharaoh = 1, - /obj/item/clothing/suit/pharaoh = 2, - /obj/item/clothing/mask/gas/mummy = 2, - /obj/item/clothing/under/mummy = 2, - /obj/item/clothing/head/scarecrow = 2, - /obj/item/clothing/mask/gas/scarecrow = 2, - /obj/item/clothing/under/scarecrow = 2, - /obj/item/clothing/mask/gas/skeleton = 2, - /obj/item/clothing/under/skeleton = 2, - /obj/item/clothing/under/drfreeze = 2, - /obj/item/clothing/suit/drfreeze = 2, - /obj/item/clothing/under/darkholme = 2, - /obj/item/clothing/under/geisha = 2, - /obj/item/clothing/head/telegram = 2, - /obj/item/clothing/under/telegram = 2, - /obj/item/clothing/head/widehat_red = 2, - /obj/item/clothing/mask/gas/bumba = 2, - /obj/item/clothing/mask/gas/demon = 2, - /obj/item/clothing/mask/gas/goblin = 2, - /obj/item/clothing/mask/gas/guy = 3, - /obj/item/clothing/mask/gas/joy = 2, - /obj/item/clothing/under/red_mech = 1, - /obj/item/clothing/under/white_mech = 1, - /obj/item/clothing/under/blue_mech = 1, - /obj/item/clothing/head/bunny = 1, - /obj/item/clothing/suit/bunny = 1, - /obj/item/clothing/head/santa = 1, - /obj/item/clothing/head/santa/green = 1, - /obj/item/clothing/head/reindeer = 2, - /obj/item/clothing/head/holiday = 2, - /obj/item/clothing/head/holiday/green = 2, - /obj/item/clothing/suit/storage/toggle/holiday = 2, - /obj/item/clothing/suit/storage/toggle/holiday/green = 2, - /obj/item/clothing/under/christmas = 2, - /obj/item/clothing/under/christmas/green = 2, - /obj/item/clothing/under/christmasfem = 2, - /obj/item/clothing/under/christmasfem/green = 2, - /obj/item/clothing/shoes/santa = 1, - /obj/item/clothing/shoes/holiday = 2, - /obj/item/clothing/shoes/holiday/green = 2, - /obj/item/clothing/mask/gas/bat = 2, - /obj/item/clothing/mask/gas/bear = 2, - /obj/item/clothing/mask/gas/bee = 2, - /obj/item/clothing/mask/gas/dolphin = 2, - /obj/item/clothing/mask/gas/fox = 2, - /obj/item/clothing/mask/gas/frog = 2, - /obj/item/clothing/mask/gas/horsehead = 2, - /obj/item/clothing/mask/gas/jackal = 2, - /obj/item/clothing/mask/gas/monkeymask = 2, - /obj/item/clothing/mask/gas/pig = 2, - /obj/item/clothing/mask/gas/rat = 2, - /obj/item/clothing/mask/gas/raven = 2, - /obj/item/clothing/mask/gas/shark = 2, - /obj/item/clothing/under/bsing = 1, - /obj/item/clothing/shoes/boots/bsing = 1, - /obj/item/clothing/under/ysing = 1, - /obj/item/clothing/shoes/boots/ysing = 1, - /obj/item/clothing/suit/hevsuit = 3, - /obj/item/clothing/head/hevhelm = 3, - /obj/item/clothing/suit/banana = 3, - /obj/item/clothing/suit/assassin = 3, - /obj/item/clothing/head/bard = 3, - /obj/item/clothing/head/helmet/aquiline = 3, - /obj/item/clothing/under/aquiline_enforcer = 3, - /obj/item/clothing/under/yoko = 3, - /obj/item/clothing/under/kamina = 3, - /obj/item/clothing/under/tape = 3, - /obj/item/clothing/under/redcoat = 3, - /obj/item/clothing/under/general = 3, - /obj/item/clothing/under/american = 3, - /obj/item/clothing/under/prussian = 3, - ) - premium = list( - /obj/item/clothing/suit/imperium_monk = 3, - ) - contraband = list( - /obj/item/clothing/head/syndicatefake = 1, - /obj/item/clothing/suit/syndicatefake = 1, - ) - price_default = 25 - -/obj/machinery/vending/glukoz - name = "Glukoz Pharmavenda" - desc = "An illicit injector vendor stocked and maintained by the allegedly defunct pharmaceuticals company Glukoz Ltd." - icon = 'icons/obj/vending.dmi' - icon_state = "rxvendor" - icon_vend = "rxvendor" - product_slogans = "Glukoz Pharmavenda, voted top street pharmaceuticals vendor, 2519!" - product_ads = "Back so soon?;The hits keep comin'!;If you can afford it, it's only a habit!;Who's gonna know?;In a pinch? It's just a pinch!;Remove the cap!;You'll be back!" - products = list( - /obj/item/reagent_containers/hypospray/glukoz = 10, - /obj/item/reagent_containers/hypospray/glukoz/certaphil = 10, - /obj/item/reagent_containers/hypospray/glukoz/downer = 10, - /obj/item/reagent_containers/hypospray/glukoz/fuckit = 10, - /obj/item/reagent_containers/hypospray/glukoz/hangup = 10, - /obj/item/reagent_containers/hypospray/glukoz/hypnogamma = 10, - /obj/item/reagent_containers/hypospray/glukoz/medcon = 10, - /obj/item/reagent_containers/hypospray/glukoz/multibuzz = 10, - /obj/item/reagent_containers/hypospray/glukoz/numplus = 10, - /obj/item/reagent_containers/hypospray/glukoz/oxyduo = 10, - /obj/item/reagent_containers/hypospray/glukoz/pyrholidon = 10, - /obj/item/reagent_containers/hypospray/glukoz/viraplus = 10, - ) - prices = list( - /obj/item/reagent_containers/hypospray/glukoz = 15, - /obj/item/reagent_containers/hypospray/glukoz/certaphil = 25, - /obj/item/reagent_containers/hypospray/glukoz/downer = 25, - /obj/item/reagent_containers/hypospray/glukoz/fuckit = 50, - /obj/item/reagent_containers/hypospray/glukoz/hangup = 50, - /obj/item/reagent_containers/hypospray/glukoz/hypnogamma = 50, - /obj/item/reagent_containers/hypospray/glukoz/medcon = 75, - /obj/item/reagent_containers/hypospray/glukoz/multibuzz = 50, - /obj/item/reagent_containers/hypospray/glukoz/numplus = 50, - /obj/item/reagent_containers/hypospray/glukoz/oxyduo = 75, - /obj/item/reagent_containers/hypospray/glukoz/pyrholidon = 50, - /obj/item/reagent_containers/hypospray/glukoz/viraplus = 25, - ) - -/obj/machinery/vending/tool/adherent - name = "\improper Adherent Tool Dispenser" - desc = "This looks like a heavily modified vending machine. It contains technology that doesn't appear to be human in origin." - product_ads = "\[C#\]\[Cb\]\[Db\]. \[Ab\]\[A#\]\[Bb\]. \[E\]\[C\]\[Gb\]\[B#\]. \[C#\].;\[Cb\]\[A\]\[F\]\[Cb\]\[C\]\[E\]\[Cb\]\[E\]\[Fb\]. \[G#\]\[C\]\[Ab\]\[A\]\[C#\]\[B\]. \[Eb\]\[choral\]. \[E#\]\[C#\]\[Ab\]\[E\]\[C#\]\[Fb\]\[Cb\]\[F#\]\[C#\]\[Gb\]." - icon_state = "adh-tool" - icon_deny = "adh-tool-deny" - icon_vend = "adh-tool-vend" - vend_delay = 5 - products = list(/obj/item/weldingtool/electric/crystal = 5, - /obj/item/tool/wirecutters/crystal = 5, - /obj/item/tool/screwdriver/crystal = 5, - /obj/item/tool/crowbar/crystal = 5, - /obj/item/tool/wrench/crystal = 5, - /obj/item/multitool/crystal = 5, - /obj/item/storage/belt/utility/crystal = 5, - /obj/item/storage/toolbox/crystal = 5) - -/obj/machinery/vending/tool/adherent/vend(datum/stored_item/vending_product/, mob/living/carbon/user) - if (emagged || istype(user) && user.species.name == SPECIES_ADHERENT) - return ..() - to_chat(user, SPAN_WARNING("\The [src] emits a discordant chime.")) - diff --git a/code/game/machinery/vending/drinks.dm b/code/game/machinery/vending/drinks.dm new file mode 100644 index 00000000000..fd0deaf476f --- /dev/null +++ b/code/game/machinery/vending/drinks.dm @@ -0,0 +1,111 @@ +/obj/machinery/vending/coffee + name = "Hot Drinks machine" + desc = "A vending machine which dispenses hot drinks." + product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" + icon_state = "coffee" + icon_vend = "coffee-vend" + vend_delay = 34 + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + vend_power_usage = 85000 //85 kJ to heat a 250 mL cup of coffee + products = list( + /obj/item/reagent_containers/food/drinks/coffee = 25, + /obj/item/reagent_containers/food/drinks/tea = 25, + /obj/item/reagent_containers/food/drinks/h_chocolate = 25, + /obj/item/reagent_containers/food/drinks/cans/robustexpress = 10, + /obj/item/reagent_containers/food/drinks/cans/robustexpresslatte = 10 + ) + contraband = list( + /obj/item/reagent_containers/food/drinks/ice = 10 + ) + prices = list( + /obj/item/reagent_containers/food/drinks/coffee = 3, + /obj/item/reagent_containers/food/drinks/tea = 3, + /obj/item/reagent_containers/food/drinks/h_chocolate = 3, + /obj/item/reagent_containers/food/drinks/cans/robustexpress = 2, + /obj/item/reagent_containers/food/drinks/cans/robustexpresslatte = 2, + ) + +/obj/machinery/vending/cola + name = "Robust Softdrinks" + desc = "A softdrink vendor provided by Robust Industries, LLC." + icon_state = "Cola_Machine" + icon_vend = "Cola_Machine-purchase" + product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!" + product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space." + products = list( + /obj/item/reagent_containers/food/drinks/cans/battery = 10, + /obj/item/reagent_containers/food/drinks/cans/waterbottle = 10, + /obj/item/reagent_containers/food/drinks/cans/coconutwater = 10, + /obj/item/reagent_containers/food/drinks/bottle/small/sassafras = 10, + /obj/item/reagent_containers/food/drinks/bottle/small/sarsaparilla = 10, + /obj/item/reagent_containers/food/drinks/cans/gingerale = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 10, + /obj/item/reagent_containers/food/drinks/cans/crystalgibb = 10, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb_cherry = 10, + /obj/item/reagent_containers/food/drinks/cans/ochamidori = 10, + /obj/item/reagent_containers/food/drinks/cans/ramune = 10, + /obj/item/reagent_containers/food/drinks/cans/starkist = 10, + /obj/item/reagent_containers/food/drinks/cans/cola = 10, + /obj/item/reagent_containers/food/drinks/cans/cola_cherry = 10, + /obj/item/reagent_containers/food/drinks/cans/cola_coffee = 10, + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, + /obj/item/reagent_containers/food/drinks/cans/space_up = 10, + /obj/item/reagent_containers/food/drinks/cans/iced_tea = 10, + /obj/item/reagent_containers/food/drinks/cans/gondola_energy = 10, + /obj/item/reagent_containers/food/drinks/cans/robustexpressiced = 10, + /obj/item/reagent_containers/food/drinks/bludbox = 5, + /obj/item/reagent_containers/food/drinks/bludboxlight = 5, + ) + contraband = list( + /obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, + /obj/item/reagent_containers/food/snacks/liquidfood = 6, + /obj/item/reagent_containers/food/drinks/cans/dumbjuice = 4, + /obj/item/reagent_containers/food/drinks/cans/geometer = 2 + ) + prices = list( + /obj/item/reagent_containers/food/drinks/cans/cola = 2, + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 2, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 2, + /obj/item/reagent_containers/food/drinks/cans/starkist = 2, + /obj/item/reagent_containers/food/drinks/cans/waterbottle = 2, + /obj/item/reagent_containers/food/drinks/cans/space_up = 2, + /obj/item/reagent_containers/food/drinks/cans/iced_tea = 2, + /obj/item/reagent_containers/food/drinks/cans/grape_juice = 2, + /obj/item/reagent_containers/food/drinks/cans/gingerale = 2, + /obj/item/reagent_containers/food/drinks/bottle/small/sarsaparilla = 2, + /obj/item/reagent_containers/food/drinks/bottle/small/sassafras = 2, + /obj/item/reagent_containers/food/drinks/cans/ochamidori = 3, + /obj/item/reagent_containers/food/drinks/cans/ramune = 2, + /obj/item/reagent_containers/food/drinks/cans/battery = 5, + /obj/item/reagent_containers/food/drinks/cans/crystalgibb = 2, + /obj/item/reagent_containers/food/drinks/cans/gondola_energy = 5, + /obj/item/reagent_containers/food/drinks/bludbox = 25, + /obj/item/reagent_containers/food/drinks/bludboxlight = 35, + /obj/item/reagent_containers/food/drinks/cans/coconutwater = 6, + /obj/item/reagent_containers/food/drinks/cans/kyocola = 2, + /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 2, + /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 2, + /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 2, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb_cherry = 2, + /obj/item/reagent_containers/food/drinks/cans/cola_cherry = 2, + /obj/item/reagent_containers/food/drinks/cans/cola_coffee = 2, + /obj/item/reagent_containers/food/drinks/cans/robustexpressiced = 2, + ) + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + +/obj/machinery/vending/sovietsoda + name = "BODA" + desc = "An old sweet water vending machine,how did this end up here?" + icon_state = "sovietsoda" + product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." + products = list( + /obj/item/reagent_containers/food/drinks/bottle/space_up = 30, + ) + contraband = list( + /obj/item/reagent_containers/food/drinks/bottle/cola = 20, + ) + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. diff --git a/code/game/machinery/vending/engineering.dm b/code/game/machinery/vending/engineering.dm new file mode 100644 index 00000000000..6d99a69ca9b --- /dev/null +++ b/code/game/machinery/vending/engineering.dm @@ -0,0 +1,141 @@ +/obj/machinery/vending/tool + name = "YouTool" + desc = "Tools for tools." + icon_state = "tool" + icon_deny = "tool-deny" + //req_access = list(ACCESS_ENGINEERING_MAINT) //Maintenance access + products = list( + /obj/item/stack/cable_coil/random = 10, + /obj/item/tool/crowbar = 5, + /obj/item/weldingtool = 3, + /obj/item/tool/wirecutters = 5, + /obj/item/tool/wrench = 5, + /obj/item/atmos_analyzer = 5, + /obj/item/t_scanner = 5, + /obj/item/tool/screwdriver = 5, + /obj/item/flashlight/glowstick = 3, + /obj/item/flashlight/glowstick/red = 3, + /obj/item/flashlight/glowstick/blue = 3, + /obj/item/flashlight/glowstick/orange = 3, + /obj/item/flashlight/glowstick/yellow = 3, + /obj/item/reagent_containers/spray/windowsealant = 5, + ) + contraband = list( + /obj/item/weldingtool/hugetank = 2, + /obj/item/clothing/gloves/fyellow = 2, + ) + premium = list( + /obj/item/clothing/gloves/yellow = 1, + ) + req_log_access = ACCESS_ENGINEERING_CE + has_logs = 1 + +/obj/machinery/vending/engivend + name = "Engi-Vend" + desc = "Spare tool vending. What? Did you expect some witty description?" + icon_state = "engivend" + icon_deny = "engivend-deny" + req_access = list(ACCESS_ENGINEERING_ENGINE) + products = list( + /obj/item/geiger_counter = 4, + /obj/item/clothing/glasses/meson = 2, + /obj/item/multitool = 4, + /obj/item/cell/high = 10, + /obj/item/airlock_electronics = 10, + /obj/item/module/power_control = 10, + /obj/item/circuitboard/airalarm = 10, + /obj/item/circuitboard/firealarm = 10, + /obj/item/circuitboard/status_display = 2, + /obj/item/circuitboard/ai_status_display = 2, + /obj/item/circuitboard/newscaster = 2, + /obj/item/circuitboard/machine/holopad = 2, + /obj/item/circuitboard/intercom = 4, + /obj/item/circuitboard/security/telescreen/entertainment = 4, + /obj/item/stock_parts/motor = 2, + /obj/item/stock_parts/spring = 2, + /obj/item/stock_parts/gear = 2, + /obj/item/circuitboard/atm, + /obj/item/circuitboard/guestpass, + /obj/item/circuitboard/keycard_auth, + /obj/item/circuitboard/photocopier, + /obj/item/circuitboard/fax, + /obj/item/circuitboard/request, + /obj/item/circuitboard/microwave, + /obj/item/circuitboard/washing, + /obj/item/circuitboard/scanner_console, + /obj/item/circuitboard/sleeper_console, + /obj/item/circuitboard/body_scanner, + /obj/item/circuitboard/sleeper, + /obj/item/circuitboard/dna_analyzer, + /obj/item/clothing/glasses/omnihud/eng = 6, + ) + contraband = list( + /obj/item/cell/potato = 3, + ) + premium = list( + /obj/item/storage/belt/utility = 3, + ) + product_records = list() + req_log_access = ACCESS_ENGINEERING_CE + has_logs = 1 + +/obj/machinery/vending/engineering + name = "Robco Tool Maker" + desc = "Everything you need for do-it-yourself station repair." + icon_state = "engi" + icon_deny = "engi-deny" + req_access = list(ACCESS_ENGINEERING_ENGINE) + products = list( + /obj/item/clothing/under/rank/chief_engineer = 4, + /obj/item/clothing/under/rank/engineer = 4, + /obj/item/clothing/shoes/orange = 4, + /obj/item/clothing/head/hardhat = 4, + /obj/item/storage/belt/utility = 4, + /obj/item/clothing/glasses/meson = 4, + /obj/item/clothing/gloves/yellow = 4, + /obj/item/tool/screwdriver = 12, + /obj/item/tool/crowbar = 12, + /obj/item/tool/wirecutters = 12, + /obj/item/multitool = 12, + /obj/item/tool/wrench = 12, + /obj/item/t_scanner = 12, + /obj/item/stack/cable_coil/heavyduty = 8, + /obj/item/cell = 8, + /obj/item/weldingtool = 8, + /obj/item/clothing/head/welding = 8, + /obj/item/light/tube = 10, + /obj/item/clothing/suit/fire = 4, + /obj/item/stock_parts/scanning_module = 5, + /obj/item/stock_parts/micro_laser = 5, + /obj/item/stock_parts/matter_bin = 5, + /obj/item/stock_parts/manipulator = 5, + /obj/item/stock_parts/console_screen = 5, + ) + // There was an incorrect entry (cablecoil/power). I improvised to cablecoil/heavyduty. + // Another invalid entry, /obj/item/circuitry. I don't even know what that would translate to, removed it. + // The original products list wasn't finished. The ones without given quantities became quantity 5. -Sayu + req_log_access = ACCESS_ENGINEERING_CE + has_logs = 1 + +/obj/machinery/vending/tool/adherent + name = "\improper Adherent Tool Dispenser" + desc = "This looks like a heavily modified vending machine. It contains technology that doesn't appear to be human in origin." + product_ads = "\[C#\]\[Cb\]\[Db\]. \[Ab\]\[A#\]\[Bb\]. \[E\]\[C\]\[Gb\]\[B#\]. \[C#\].;\[Cb\]\[A\]\[F\]\[Cb\]\[C\]\[E\]\[Cb\]\[E\]\[Fb\]. \[G#\]\[C\]\[Ab\]\[A\]\[C#\]\[B\]. \[Eb\]\[choral\]. \[E#\]\[C#\]\[Ab\]\[E\]\[C#\]\[Fb\]\[Cb\]\[F#\]\[C#\]\[Gb\]." + icon_state = "adh-tool" + icon_deny = "adh-tool-deny" + icon_vend = "adh-tool-vend" + vend_delay = 5 + products = list(/obj/item/weldingtool/electric/crystal = 5, + /obj/item/tool/wirecutters/crystal = 5, + /obj/item/tool/screwdriver/crystal = 5, + /obj/item/tool/crowbar/crystal = 5, + /obj/item/tool/wrench/crystal = 5, + /obj/item/multitool/crystal = 5, + /obj/item/storage/belt/utility/crystal = 5, + /obj/item/storage/toolbox/crystal = 5) + +/obj/machinery/vending/tool/adherent/vend(datum/stored_item/vending_product/, mob/living/carbon/user) + if (emagged || istype(user) && user.species.name == SPECIES_ADHERENT) + return ..() + to_chat(user, SPAN_WARNING("\The [src] emits a discordant chime.")) + diff --git a/code/game/machinery/vending/loadout.dm b/code/game/machinery/vending/loadout.dm new file mode 100644 index 00000000000..b80c1f89bac --- /dev/null +++ b/code/game/machinery/vending/loadout.dm @@ -0,0 +1,795 @@ + +/obj/machinery/vending/loadout + name = "Fingers and Toes" + desc = "A special vendor for gloves and shoes!" + product_ads = "Do you have fingers and toes? COVER THEM UP!;Show me your toes! Wait. NO DON'T! BUY NEW SHOES!;Don't leave prints, BUY SOME GLOVES!;Remember to check your shoes for micros! You don't have to let them out, but just check for them!;Fingers and Toes is not liable for micro entrapment or abuse under the feet of our patrons.!;This little piggy went WE WE WE all the way down to FINGERS AND TOES to pick up some sweet new gloves and shoes." + icon_state = "glovesnshoes" + products = list( + /obj/item/clothing/gloves/evening = 5, + /obj/item/clothing/gloves/fingerless = 5, + /obj/item/clothing/gloves/black = 5, + /obj/item/clothing/gloves/blue = 5, + /obj/item/clothing/gloves/brown = 5, + /obj/item/clothing/gloves/color = 5, + /obj/item/clothing/gloves/green = 5, + /obj/item/clothing/gloves/grey = 5, + /obj/item/clothing/gloves/sterile/latex = 5, + /obj/item/clothing/gloves/light_brown = 5, + /obj/item/clothing/gloves/sterile/nitrile = 5, + /obj/item/clothing/gloves/orange = 5, + /obj/item/clothing/gloves/purple = 5, + /obj/item/clothing/gloves/red = 5, + /obj/item/clothing/gloves/fluff/siren = 5, + /obj/item/clothing/gloves/white = 5, + /obj/item/clothing/gloves/duty = 5, + /obj/item/clothing/shoes/athletic = 5, + /obj/item/clothing/shoes/boots/fluff/siren = 5, + /obj/item/clothing/shoes/slippers = 5, + /obj/item/clothing/shoes/boots/cowboy/classic = 5, + /obj/item/clothing/shoes/boots/cowboy = 5, + /obj/item/clothing/shoes/boots/duty = 5, + /obj/item/clothing/shoes/flats/white/color = 5, + /obj/item/clothing/shoes/flipflop = 5, + /obj/item/clothing/shoes/heels = 5, + /obj/item/clothing/shoes/hitops/black = 5, + /obj/item/clothing/shoes/hitops/blue = 5, + /obj/item/clothing/shoes/hitops/green = 5, + /obj/item/clothing/shoes/hitops/orange = 5, + /obj/item/clothing/shoes/hitops/purple = 5, + /obj/item/clothing/shoes/hitops/red = 5, + /obj/item/clothing/shoes/flats/white/color = 5, + /obj/item/clothing/shoes/hitops/yellow = 5, + /obj/item/clothing/shoes/boots/jackboots = 5, + /obj/item/clothing/shoes/boots/jungle = 5, + /obj/item/clothing/shoes/black/cuffs = 5, + /obj/item/clothing/shoes/black/cuffs/blue = 5, + /obj/item/clothing/shoes/black/cuffs/red = 5, + /obj/item/clothing/shoes/sandal = 5, + /obj/item/clothing/shoes/black = 5, + /obj/item/clothing/shoes/blue = 5, + /obj/item/clothing/shoes/brown = 5, + /obj/item/clothing/shoes/laceup = 5, + /obj/item/clothing/shoes/green = 5, + /obj/item/clothing/shoes/laceup/brown = 5, + /obj/item/clothing/shoes/orange = 5, + /obj/item/clothing/shoes/purple = 5, + /obj/item/clothing/shoes/red = 5, + /obj/item/clothing/shoes/white = 5, + /obj/item/clothing/shoes/yellow = 5, + /obj/item/clothing/shoes/skater = 5, + /obj/item/clothing/shoes/boots/cowboy/snakeskin = 5, + /obj/item/clothing/shoes/boots/jackboots/toeless = 5, + /obj/item/clothing/shoes/boots/workboots/toeless = 5, + /obj/item/clothing/shoes/boots/winter = 5, + /obj/item/clothing/shoes/boots/workboots = 5, + /obj/item/clothing/shoes/footwraps = 5, + /obj/item/clothing/shoes/utilitarian = 5, + ) + premium = list( + /obj/item/clothing/gloves/rainbow = 1, + /obj/item/clothing/shoes/rainbow = 1, + ) + contraband = list( + /obj/item/clothing/shoes/syndigaloshes = 1, + /obj/item/clothing/shoes/clown_shoes = 1, + ) + price_default = 10 + +/obj/machinery/vending/loadout/uniform + name = "The Basics" + desc = "A vendor using compressed matter cartridges to store large amounts of basic station uniforms." + product_ads = "Don't get caught naked!;Pick up your uniform!;Using compressed matter cartridges and VERY ETHICAL labor practices, we bring you the uniforms you need!;No uniform? No problem!;We've got your covered!;The Basics is not responsible for being crushed under the amount of things inside our machines. DO NOT VEND IN EXCESS!!" + icon_state = "loadout" + icon_vend = "loadout-purchase" + vend_delay = 16 + products = list( + /obj/item/pda = 25, + /obj/item/radio/headset = 25, + /obj/item/storage/backpack/ = 10, + /obj/item/storage/backpack/messenger = 10, + /obj/item/storage/backpack/satchel = 10, + /obj/item/clothing/under/color = 5, + /obj/item/clothing/under/color/aqua = 5, + /obj/item/clothing/under/color/black = 5, + /obj/item/clothing/under/color/blackjumpskirt = 5, + /obj/item/clothing/under/color/blue = 5, + /obj/item/clothing/under/color/brown = 5, + /obj/item/clothing/under/color/green = 5, + /obj/item/clothing/under/color/grey = 5, + /obj/item/clothing/under/color/orange = 5, + /obj/item/clothing/under/color/pink = 5, + /obj/item/clothing/under/color/red = 5, + /obj/item/clothing/under/color/white = 5, + /obj/item/clothing/under/color/yellow = 5, + /obj/item/clothing/shoes/black = 20, + /obj/item/clothing/shoes/white = 20, + ) + +/obj/machinery/vending/loadout/accessory + name = "Looty Inc." + desc = "A special vendor for accessories." + product_ads = "Want shinies? We have the shinies.;Need that special something to complete your outfit? We have what you need!;Ditch that old dull dangly something you've got and pick up one of our shinies!;Bracelets, collars, scarfs rings and more! We have the fancy things you need!;Does your pet need a collar? We don't judge! Keep them in line with one of one of ours!;Top of the line materials! 'Hand crafted' goods!" + icon_state = "accessory" + icon_vend = "accessory-purchase" + vend_delay = 6 + products = list( + /obj/item/clothing/accessory = 5, + /obj/item/clothing/accessory/armband/med/color = 10, + /obj/item/clothing/accessory/asymmetric = 5, + /obj/item/clothing/accessory/asymmetric/purple = 5, + /obj/item/clothing/accessory/asymmetric/green = 5, + /obj/item/clothing/accessory/bracelet = 5, + /obj/item/clothing/accessory/bracelet/material = 5, + /obj/item/clothing/accessory/bracelet/friendship = 5, + /obj/item/clothing/accessory/chaps = 5, + /obj/item/clothing/accessory/chaps/black = 5, + /obj/item/storage/briefcase/clutch = 1, + /obj/item/clothing/accessory/collar = 5, + /obj/item/clothing/accessory/collar/bell = 5, + /obj/item/clothing/accessory/collar/spike = 5, + /obj/item/clothing/accessory/collar/pink = 5, + /obj/item/clothing/accessory/collar/holo = 5, + /obj/item/clothing/accessory/collar/shock = 5, + /obj/item/storage/belt/fannypack = 1, + /obj/item/storage/belt/fannypack/white = 5, + /obj/item/clothing/accessory/fullcape = 5, + /obj/item/clothing/accessory/halfcape = 5, + /obj/item/clothing/accessory/hawaii = 5, + /obj/item/clothing/accessory/hawaii/random = 5, + /obj/item/clothing/accessory/locket = 5, + /obj/item/storage/backpack/purse = 1, + /obj/item/clothing/accessory/sash = 5, + /obj/item/clothing/accessory/scarf = 5, + /obj/item/clothing/accessory/scarf/red = 5, + /obj/item/clothing/accessory/scarf/darkblue = 5, + /obj/item/clothing/accessory/scarf/purple = 5, + /obj/item/clothing/accessory/scarf/yellow = 5, + /obj/item/clothing/accessory/scarf/orange = 5, + /obj/item/clothing/accessory/scarf/lightblue = 5, + /obj/item/clothing/accessory/scarf/white = 5, + /obj/item/clothing/accessory/scarf/black = 5, + /obj/item/clothing/accessory/scarf/zebra = 5, + /obj/item/clothing/accessory/scarf/christmas = 5, + /obj/item/clothing/accessory/scarf/stripedred = 5, + /obj/item/clothing/accessory/scarf/stripedgreen = 5, + /obj/item/clothing/accessory/scarf/stripedblue = 5, + /obj/item/clothing/accessory/jacket = 5, + /obj/item/clothing/accessory/jacket/checkered = 5, + /obj/item/clothing/accessory/jacket/burgundy = 5, + /obj/item/clothing/accessory/jacket/navy = 5, + /obj/item/clothing/accessory/jacket/charcoal = 5, + /obj/item/clothing/accessory/vest = 5, + /obj/item/clothing/accessory/sweater = 5, + /obj/item/clothing/accessory/sweater/pink = 5, + /obj/item/clothing/accessory/sweater/mint = 5, + /obj/item/clothing/accessory/sweater/blue = 5, + /obj/item/clothing/accessory/sweater/heart = 5, + /obj/item/clothing/accessory/sweater/nt = 5, + /obj/item/clothing/accessory/sweater/keyhole = 5, + /obj/item/clothing/accessory/sweater/winterneck = 5, + /obj/item/clothing/accessory/sweater/uglyxmas = 5, + /obj/item/clothing/accessory/sweater/flowersweater = 5, + /obj/item/clothing/accessory/sweater/redneck = 5, + /obj/item/clothing/accessory/sweater/virgin = 5, + /obj/item/clothing/accessory/tie = 5, + /obj/item/clothing/accessory/tie/horrible = 5, + /obj/item/clothing/accessory/tie/white = 5, + /obj/item/clothing/accessory/tie/navy = 5, + /obj/item/clothing/accessory/tie/yellow = 5, + /obj/item/clothing/accessory/tie/darkgreen = 5, + /obj/item/clothing/accessory/tie/black = 5, + /obj/item/clothing/accessory/tie/red_long = 5, + /obj/item/clothing/accessory/tie/red_clip = 5, + /obj/item/clothing/accessory/tie/blue_long = 5, + /obj/item/clothing/accessory/tie/blue_clip = 5, + /obj/item/clothing/accessory/tie/red = 5, + /obj/item/clothing/accessory/wcoat = 5, + /obj/item/clothing/accessory/wcoat/red = 5, + /obj/item/clothing/accessory/wcoat/grey = 5, + /obj/item/clothing/accessory/wcoat/brown = 5, + /obj/item/clothing/accessory/wcoat/gentleman = 5, + /obj/item/clothing/accessory/wcoat/swvest = 5, + /obj/item/clothing/accessory/wcoat/swvest/blue = 5, + /obj/item/clothing/accessory/wcoat/swvest/red = 5, + /obj/item/storage/wallet = 5, + /obj/item/storage/wallet/poly = 5, + /obj/item/storage/wallet/womens = 5, + /obj/item/lipstick = 5, + /obj/item/lipstick/purple = 5, + /obj/item/lipstick/jade = 5, + /obj/item/lipstick/black = 5, + /obj/item/clothing/ears/earmuffs = 5, + /obj/item/clothing/ears/earmuffs/headphones = 5, + /obj/item/clothing/ears/earring/stud = 5, + /obj/item/clothing/ears/earring/dangle = 5, + /obj/item/clothing/gloves/ring/mariner = 5, + /obj/item/clothing/gloves/ring/engagement = 5, + /obj/item/clothing/gloves/ring/seal/signet = 5, + /obj/item/clothing/gloves/ring/seal/mason = 5, + /obj/item/clothing/gloves/ring/material/plastic = 5, + /obj/item/clothing/gloves/ring/material/steel = 5, + /obj/item/clothing/gloves/ring/material/gold = 5, + /obj/item/clothing/glasses/eyepatch = 5, + /obj/item/clothing/glasses/gglasses = 5, + /obj/item/clothing/glasses/regular/hipster = 5, + /obj/item/clothing/glasses/rimless = 5, + /obj/item/clothing/glasses/thin = 5, + /obj/item/clothing/glasses/monocle = 5, + /obj/item/clothing/glasses/goggles = 5, + /obj/item/clothing/glasses/fluff/spiffygogs = 5, + /obj/item/clothing/glasses/fakesunglasses = 5, + /obj/item/clothing/glasses/fakesunglasses/aviator = 5, + /obj/item/clothing/mask/bandana/blue = 5, + /obj/item/clothing/mask/bandana/gold = 5, + /obj/item/clothing/mask/bandana/green = 5, + /obj/item/clothing/mask/bandana/red = 5, + /obj/item/clothing/mask/surgical = 5, + ) + premium = list(/obj/item/bedsheet/rainbow = 1) + contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1) + price_default = 10 + +/obj/machinery/vending/loadout/clothing + name = "General Jump" + desc = "A special vendor using compressed matter cartridges to store large amounts of clothing." + product_ads = "Tired of your grey jumpsuit? Spruce yourself up!;We have the outfit for you!;Don't let that grey jumpsuit get you down, get a ROBUST outfit right now!;Using compressed matter catridges and VERY ETHICAL labor practices to bring YOU the clothing you crave!;Are you sure you want to go to work in THAT?;All of our wares have a whole TWO pockets!" + icon_state = "clothing" + icon_vend = "clothing-purchase" + vend_delay = 16 + products = list( + /obj/item/clothing/under/bathrobe = 5, + /obj/item/clothing/under/dress/black_corset = 5, + /obj/item/clothing/under/blazer = 5, + /obj/item/clothing/under/blazer/skirt = 5, + /obj/item/clothing/under/cheongsam = 5, + /obj/item/clothing/under/cheongsam/red = 5, + /obj/item/clothing/under/cheongsam/blue = 5, + /obj/item/clothing/under/cheongsam/black = 5, + /obj/item/clothing/under/cheongsam/darkred = 5, + /obj/item/clothing/under/cheongsam/darkgreen = 5, + /obj/item/clothing/under/cheongsam/green = 5, + /obj/item/clothing/under/cheongsam/purple = 5, + /obj/item/clothing/under/cheongsam/darkblue = 5, + /obj/item/clothing/under/croptop = 5, + /obj/item/clothing/under/croptop/red = 5, + /obj/item/clothing/under/croptop/grey = 5, + /obj/item/clothing/under/cuttop = 5, + /obj/item/clothing/under/cuttop/red = 5, + /obj/item/clothing/under/suit_jacket/female/skirt = 5, + /obj/item/clothing/under/dress/dress_fire = 5, + /obj/item/clothing/under/dress/flamenco = 5, + /obj/item/clothing/under/dress/flower_dress = 5, + /obj/item/clothing/under/fluff/gnshorts = 5, + /obj/item/clothing/under/color = 5, + /obj/item/clothing/under/color/aqua = 5, + /obj/item/clothing/under/color/black = 5, + /obj/item/clothing/under/color/blackf = 5, + /obj/item/clothing/under/color/blackjumpskirt = 5, + /obj/item/clothing/under/color/blue = 5, + /obj/item/clothing/under/color/brown = 5, + /obj/item/clothing/under/color/darkblue = 5, + /obj/item/clothing/under/color/darkred = 5, + /obj/item/clothing/under/color/green = 5, + /obj/item/clothing/under/color/grey = 5, + /obj/item/clothing/under/color/lightblue = 5, + /obj/item/clothing/under/color/lightbrown = 5, + /obj/item/clothing/under/color/lightgreen = 5, + /obj/item/clothing/under/color/lightpurple = 5, + /obj/item/clothing/under/color/lightred = 5, + /obj/item/clothing/under/color/orange = 5, + /obj/item/clothing/under/color/pink = 5, + /obj/item/clothing/under/color/prison = 5, + /obj/item/clothing/under/color/ranger = 5, + /obj/item/clothing/under/color/red = 5, + /obj/item/clothing/under/color/white = 5, + /obj/item/clothing/under/color/yellow = 5, + /obj/item/clothing/under/color/yellowgreen = 5, + /obj/item/clothing/under/brandjumpsuit/aether = 5, + /obj/item/clothing/under/brandjumpsuit/focal = 5, + /obj/item/clothing/under/brandjumpsuit/hephaestus = 5, + /obj/item/clothing/under/brandjumpsuit/wardt = 5, + /obj/item/clothing/under/kilt = 5, + /obj/item/clothing/under/fluff/latexmaid = 5, + /obj/item/clothing/under/dress/lilacdress = 5, + /obj/item/clothing/under/dress/white2 = 5, + /obj/item/clothing/under/dress/white4 = 5, + /obj/item/clothing/under/dress/maid = 5, + /obj/item/clothing/under/dress/maid/sexy = 5, + /obj/item/clothing/under/dress/maid/janitor = 5, + /obj/item/clothing/head/headband/maid = 5, + /obj/item/clothing/under/kamishimo = 5, + /obj/item/clothing/under/kimono = 5, + /obj/item/clothing/under/kimono_black = 5, + /obj/item/clothing/under/kimono_sakura = 5, + /obj/item/clothing/under/kimono_fancy = 5, + /obj/item/clothing/under/kimono/red = 5, + /obj/item/clothing/under/kimono/orange = 5, + /obj/item/clothing/under/kimono/yellow = 5, + /obj/item/clothing/under/kimono/green = 5, + /obj/item/clothing/under/kimono/blue = 5, + /obj/item/clothing/under/kimono/purple = 5, + /obj/item/clothing/under/kimono/violet = 5, + /obj/item/clothing/under/kimono/pink = 5, + /obj/item/clothing/under/kimono/earth = 5, + /obj/item/clothing/under/cheong = 5, + /obj/item/clothing/under/cheong/white = 5, + /obj/item/clothing/under/cheong/red = 5, + /obj/item/clothing/under/qipao = 5, + /obj/item/clothing/under/qipao/white = 5, + /obj/item/clothing/under/qipao/red = 5, + /obj/item/clothing/under/moderncoat = 5, + /obj/item/clothing/under/permit = 5, + /obj/item/clothing/under/oldwoman = 5, + /obj/item/clothing/under/frontier = 5, + /obj/item/clothing/under/brandjumpsuit/mbill = 5, + /obj/item/clothing/under/pants/baggy/ = 5, + /obj/item/clothing/under/pants/baggy/classicjeans = 5, + /obj/item/clothing/under/pants/baggy/mustangjeans = 5, + /obj/item/clothing/under/pants/baggy/blackjeans = 5, + /obj/item/clothing/under/pants/baggy/greyjeans = 5, + /obj/item/clothing/under/pants/baggy/youngfolksjeans = 5, + /obj/item/clothing/under/pants/baggy/white = 5, + /obj/item/clothing/under/pants/baggy/red = 5, + /obj/item/clothing/under/pants/baggy/black = 5, + /obj/item/clothing/under/pants/baggy/tan = 5, + /obj/item/clothing/under/pants/baggy/track = 5, + /obj/item/clothing/under/pants/baggy/khaki = 5, + /obj/item/clothing/under/pants/baggy/camo = 5, + /obj/item/clothing/under/pants/utility/ = 5, + /obj/item/clothing/under/pants/utility/orange = 5, + /obj/item/clothing/under/pants/utility/blue = 5, + /obj/item/clothing/under/pants/utility/white = 5, + /obj/item/clothing/under/pants/utility/red = 5, + /obj/item/clothing/under/pants/chaps = 5, + /obj/item/clothing/under/pants/chaps/black = 5, + /obj/item/clothing/under/pants/track = 5, + /obj/item/clothing/under/pants/track/red = 5, + /obj/item/clothing/under/pants/track/white = 5, + /obj/item/clothing/under/pants/track/green = 5, + /obj/item/clothing/under/pants/track/blue = 5, + /obj/item/clothing/under/pants/yogapants = 5, + /obj/item/clothing/under/ascetic = 5, + /obj/item/clothing/under/dress/white3 = 5, + /obj/item/clothing/under/skirt/pleated = 5, + /obj/item/clothing/under/dress/darkred = 5, + /obj/item/clothing/under/dress/redeveninggown = 5, + /obj/item/clothing/under/dress/red_swept_dress = 5, + /obj/item/clothing/under/dress/sailordress = 5, + /obj/item/clothing/under/dress/sari = 5, + /obj/item/clothing/under/dress/sari/green = 5, + /obj/item/clothing/under/shorts/red = 5, + /obj/item/clothing/under/shorts/green = 5, + /obj/item/clothing/under/shorts/blue = 5, + /obj/item/clothing/under/shorts/black = 5, + /obj/item/clothing/under/shorts/grey = 5, + /obj/item/clothing/under/shorts/white = 5, + /obj/item/clothing/under/shorts/jeans = 5, + /obj/item/clothing/under/shorts/jeans/ = 5, + /obj/item/clothing/under/shorts/jeans/classic = 5, + /obj/item/clothing/under/shorts/jeans/mustang = 5, + /obj/item/clothing/under/shorts/jeans/youngfolks = 5, + /obj/item/clothing/under/shorts/jeans/black = 5, + /obj/item/clothing/under/shorts/jeans/grey = 5, + /obj/item/clothing/under/shorts/khaki/ = 5, + /obj/item/clothing/under/skirt/loincloth = 5, + /obj/item/clothing/under/skirt/khaki = 5, + /obj/item/clothing/under/skirt/blue = 5, + /obj/item/clothing/under/skirt/red = 5, + /obj/item/clothing/under/skirt/denim = 5, + /obj/item/clothing/under/skirt/pleated = 5, + /obj/item/clothing/under/skirt/outfit/plaid_blue = 5, + /obj/item/clothing/under/skirt/outfit/plaid_red = 5, + /obj/item/clothing/under/skirt/outfit/plaid_purple = 5, + /obj/item/clothing/under/skirt/outfit/plaid_green = 5, + /obj/item/clothing/under/overalls/sleek = 5, + /obj/item/clothing/under/sl_suit = 5, + /obj/item/clothing/under/gentlesuit = 5, + /obj/item/clothing/under/gentlesuit/skirt = 5, + /obj/item/clothing/under/suit_jacket = 5, + /obj/item/clothing/under/suit_jacket/really_black/skirt = 5, + /obj/item/clothing/under/suit_jacket/really_black = 5, + /obj/item/clothing/under/suit_jacket/female/skirt = 5, + /obj/item/clothing/under/suit_jacket/female/ = 5, + /obj/item/clothing/under/suit_jacket/red = 5, + /obj/item/clothing/under/suit_jacket/red/skirt = 5, + /obj/item/clothing/under/suit_jacket/charcoal = 5, + /obj/item/clothing/under/suit_jacket/charcoal/skirt = 5, + /obj/item/clothing/under/suit_jacket/navy = 5, + /obj/item/clothing/under/suit_jacket/navy/skirt = 5, + /obj/item/clothing/under/suit_jacket/burgundy = 5, + /obj/item/clothing/under/suit_jacket/burgundy/skirt = 5, + /obj/item/clothing/under/suit_jacket/checkered = 5, + /obj/item/clothing/under/suit_jacket/checkered/skirt = 5, + /obj/item/clothing/under/suit_jacket/tan = 5, + /obj/item/clothing/under/suit_jacket/tan/skirt = 5, + /obj/item/clothing/under/scratch = 5, + /obj/item/clothing/under/scratch/skirt = 5, + /obj/item/clothing/under/sundress = 5, + /obj/item/clothing/under/sundress_white = 5, + /obj/item/clothing/under/turtlebaggy = 5, + /obj/item/clothing/under/turtlebaggy/purple = 5, + /obj/item/clothing/under/turtlebaggy/red = 5, + /obj/item/clothing/under/turtlebaggy/blue = 5, + /obj/item/clothing/under/turtlebaggy/green = 5, + /obj/item/clothing/under/turtlebaggy/black = 5, + /obj/item/clothing/under/rank/psych/turtleneck/sweater = 5, + /obj/item/storage/box/fluff/swimsuit = 5, + /obj/item/storage/box/fluff/swimsuit/blue = 5, + /obj/item/storage/box/fluff/swimsuit/purple = 5, + /obj/item/storage/box/fluff/swimsuit/green = 5, + /obj/item/storage/box/fluff/swimsuit/red = 5, + /obj/item/storage/box/fluff/swimsuit/white = 5, + /obj/item/storage/box/fluff/swimsuit/earth = 5, + /obj/item/storage/box/fluff/swimsuit/engineering = 5, + /obj/item/storage/box/fluff/swimsuit/science = 5, + /obj/item/storage/box/fluff/swimsuit/security = 5, + /obj/item/storage/box/fluff/swimsuit/medical = 5, + /obj/item/storage/box/fluff/swimsuit/cowbikini = 5, + /obj/item/storage/box/fluff/swimsuit/captain = 5, + /obj/item/storage/box/fluff/swimsuit/highclass = 3, + /obj/item/storage/box/fluff/swimsuit/latex = 3, + /obj/item/storage/box/rainponcho = 5, + /obj/item/clothing/under/utility = 5, + /obj/item/clothing/under/utility/grey = 5, + /obj/item/clothing/under/utility/blue = 5, + /obj/item/clothing/under/fluff/v_nanovest = 5, + /obj/item/clothing/under/dress/westernbustle = 5, + /obj/item/clothing/under/wedding/bride_white = 5, + /obj/item/clothing/under/redcoatformal = 2, + /obj/item/clothing/under/leotardcolor = 5, + /obj/item/clothing/under/leotard = 5, + /obj/item/clothing/under/bunnysuit_f = 5, + /obj/item/clothing/under/bunnysuit_m = 5, + /obj/item/clothing/under/tabard_w = 5, + /obj/item/clothing/under/tabard_b = 5, + /obj/item/clothing/under/toga = 5, + /obj/item/clothing/under/countess = 5, + /obj/item/clothing/under/baroness = 5, + /obj/item/clothing/under/revealing = 5, + /obj/item/clothing/under/belial = 5, + /obj/item/clothing/under/lilin = 5, + /obj/item/clothing/under/asmodai = 5, + /obj/item/storage/backpack/ = 5, + /obj/item/storage/backpack/messenger = 5, + /obj/item/storage/backpack/satchel = 5, + ) + premium = list( + /obj/item/clothing/under/color/rainbow = 1, + ) + contraband = list( + /obj/item/clothing/under/rank/clown = 1, + ) + price_default = 10 + +/obj/machinery/vending/loadout/gadget + name = "Chips Co." + desc = "A special vendor for devices and gadgets." + product_ads = "You can't RESIST our great deals!;Feeling disconnected? We have a gadget for you!;You know you have the capacity to buy our capacitors!;FILL THAT HOLE IN YOUR HEART WITH OUR PLASTIC DISTRACTIONS!!!;Devices for everyone! Chips Co.!;ROBUST INVENTORY, GREAT PRICES! ;DON'T FORGET THE oyPAD 13s PRO! ON SALE NOW, ONLY ONE THOUSAND THALERS!" + icon_state = "gadgets" + icon_vend = "gadgets-purchase" + vend_delay = 11 + products = list( + /obj/item/clothing/suit/circuitry = 1, + /obj/item/clothing/head/circuitry = 1, + /obj/item/clothing/shoes/circuitry = 1, + /obj/item/clothing/gloves/circuitry = 1, + /obj/item/clothing/under/circuitry = 1, + /obj/item/clothing/glasses/circuitry = 1, + /obj/item/clothing/ears/circuitry = 1, + /obj/item/text_to_speech = 5, + /obj/item/paicard = 5, + /obj/item/communicator = 10, + /obj/item/communicator/watch = 10, + /obj/item/radio = 10, + /obj/item/camera = 5, + /obj/item/tape_recorder = 5, + /obj/item/modular_computer/tablet/preset/custom_loadout/cheap = 5, + /obj/item/pda = 10, + /obj/item/radio/headset = 10, + /obj/item/flashlight = 5, + /obj/item/laser_pointer = 3, + /obj/item/clothing/glasses/omnihud = 10, + /obj/item/device/walkpod = 5, + ) + premium = list( + /obj/item/perfect_tele/one_beacon = 1, + ) + contraband = list( + /obj/item/disk/nifsoft/compliance = 1, + ) + prices = list( + /obj/item/modular_computer/tablet/preset/custom_loadout/cheap = 300, + /obj/item/laser_pointer = 100, + /obj/item/device/walkpod = 300, + ) + price_default = 25 + +/obj/machinery/vending/loadout/loadout_misc + name = "Bits and Bobs" + desc = "A special vendor for things and also stuff!" + product_ads = "You never know when you might need an umbrella.;Hey kid... want some cardemon cards?;Miscellaneous for your miscellaneous heart.;Who's bob? Wouldn't you like to know.;I'm sorry there's no grappling hooks in our umbrellas.;We sell things AND stuff." + icon_state = "loadout_misc" + products = list( + /obj/item/cane = 5, + /obj/item/pack/cardemon = 25, + /obj/item/deck/holder = 5, + /obj/item/deck/cah = 5, + /obj/item/deck/cah/black = 5, + /obj/item/deck/tarot = 5, + /obj/item/deck/cards = 5, + /obj/item/pack/spaceball = 10, + /obj/item/storage/pill_bottle/dice = 5, + /obj/item/storage/pill_bottle/dice_nerd = 5, + /obj/item/melee/umbrella/random = 10, + /obj/item/deck/unus = 5, + ) + premium = list( + /obj/item/toy/bosunwhistle = 1, + ) + contraband = list( + /obj/item/toy/katana = 1, + ) + price_default = 25 + +/obj/machinery/vending/loadout/overwear + name = "Big D's Best" + desc = "A special vendor using compressed matter cartridges to store large amounts of overwear!" + product_ads = "Dress your best! It's what big D would want.;Overwear for all occasions!;Big D has what you need if what you need is some form of jacket!;Need a new hoodie? Bid D has you covered.;Big D says you need a new suit!;Big D smiles when he sees you in one of his coats!" + icon_state = "suit" + icon_vend = "suit-purchase" + vend_delay = 16 + products = list( + /obj/item/clothing/suit/storage/apron = 5, + /obj/item/clothing/suit/storage/flannel/aqua = 5, + /obj/item/clothing/suit/storage/toggle/bomber = 5, + /obj/item/clothing/suit/storage/bomber/alt = 5, + /obj/item/clothing/suit/storage/flannel/brown = 5, + /obj/item/clothing/suit/storage/toggle/cardigan = 5, + /obj/item/clothing/accessory/poncho/roles/cloak/custom = 5, + /obj/item/clothing/suit/storage/duster = 5, + /obj/item/clothing/suit/storage/toggle/denim_jacket = 5, + /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen = 5, + /obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless = 5, + /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless = 5, + /obj/item/clothing/suit/storage/fluff/gntop = 5, + /obj/item/clothing/suit/greatcoat = 5, + /obj/item/clothing/suit/storage/flannel = 5, + /obj/item/clothing/suit/storage/greyjacket = 5, + /obj/item/clothing/suit/storage/hazardvest = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/black = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/red = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/blue = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/green = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/orange = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/yellow = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/cti = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/mu = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/nt = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/smw = 5, + /obj/item/clothing/suit/storage/toggle/hoodie/nrti = 5, + /obj/item/clothing/suit/storage/fluff/jacket/field = 5, + /obj/item/clothing/suit/storage/fluff/jacket/air_cavalry = 5, + /obj/item/clothing/suit/storage/fluff/jacket/air_force = 5, + /obj/item/clothing/suit/storage/fluff/jacket/navy = 5, + /obj/item/clothing/suit/storage/fluff/jacket/special_forces = 5, + /obj/item/clothing/suit/kamishimo = 5, + /obj/item/clothing/suit/kimono = 5, + /obj/item/clothing/suit/storage/toggle/labcoat = 5, + /obj/item/clothing/suit/storage/toggle/labcoat/green = 5, + /obj/item/clothing/suit/leathercoat = 5, + /obj/item/clothing/suit/overcoat = 5, + /obj/item/clothing/suit/storage/toggle/leather_jacket = 5, + /obj/item/clothing/suit/storage/leather_jacket_alt = 5, + /obj/item/clothing/suit/storage/toggle/brown_jacket = 5, + /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen = 5, + /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen = 5, + /obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless = 5, + /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless = 5, + /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless = 5, + /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless = 5, + /obj/item/clothing/suit/storage/miljacket = 5, + /obj/item/clothing/suit/storage/miljacket/alt = 5, + /obj/item/clothing/suit/storage/miljacket/green = 5, + /obj/item/clothing/suit/storage/apron/overalls = 5, + /obj/item/clothing/suit/storage/toggle/peacoat = 5, + /obj/item/clothing/accessory/poncho = 5, + /obj/item/clothing/accessory/poncho/green = 5, + /obj/item/clothing/accessory/poncho/red = 5, + /obj/item/clothing/accessory/poncho/purple = 5, + /obj/item/clothing/accessory/poncho/blue = 5, + /obj/item/clothing/suit/jacket/puffer = 5, + /obj/item/clothing/suit/jacket/puffer/vest = 5, + /obj/item/clothing/suit/storage/flannel/red = 5, + /obj/item/clothing/suit/unathi/robe = 5, + /obj/item/clothing/suit/storage/snowsuit = 5, + /obj/item/clothing/suit/storage/toggle/internalaffairs = 5, + /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 5, + /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 5, + /obj/item/clothing/suit/suspenders = 5, + /obj/item/clothing/suit/storage/toggle/track = 5, + /obj/item/clothing/suit/storage/toggle/track/blue = 5, + /obj/item/clothing/suit/storage/toggle/track/green = 5, + /obj/item/clothing/suit/storage/toggle/track/red = 5, + /obj/item/clothing/suit/storage/toggle/track/white = 5, + /obj/item/clothing/suit/storage/trench = 5, + /obj/item/clothing/suit/storage/trench/grey = 5, + /obj/item/clothing/suit/varsity = 5, + /obj/item/clothing/suit/varsity/red = 5, + /obj/item/clothing/suit/varsity/purple = 5, + /obj/item/clothing/suit/varsity/green = 5, + /obj/item/clothing/suit/varsity/blue = 5, + /obj/item/clothing/suit/varsity/brown = 5, + /obj/item/clothing/suit/storage/hooded/wintercoat = 5, + /obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 5, + /obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5, + /obj/item/clothing/suit/storage/gothcoat = 3, + /obj/item/clothing/suit/storage/hobo = 3, + /obj/item/clothing/suit/storage/kamina = 3, + /obj/item/clothing/suit/nerdshirt = 3, + ) + premium = list( + /obj/item/clothing/suit/imperium_monk = 3, + ) + contraband = list( + /obj/item/toy/katana = 1, + ) + price_default = 10 + +/obj/machinery/vending/loadout/costume + name = "Thespian's Delight" + desc = "Sometimes nerds need costumes!" + product_ads = "Don't let your art be stifled!;Remember, practice makes perfect!;Break a leg!;Don't make me get the cane!;Thespian's Delight entering stage right!;Costumes for your acting needs!" + icon_state = "Theater_b" + products = list( + /obj/item/clothing/suit/storage/hooded/carp_costume = 3, + /obj/item/clothing/suit/storage/hooded/carp_costume = 3, + /obj/item/clothing/suit/chickensuit = 3, + /obj/item/clothing/head/chicken = 3, + /obj/item/clothing/head/helmet/gladiator = 3, + /obj/item/clothing/under/gladiator = 3, + /obj/item/clothing/suit/storage/toggle/labcoat/mad = 3, + /obj/item/clothing/under/gimmick/rank/captain/suit = 3, + /obj/item/clothing/glasses/gglasses = 3, + /obj/item/clothing/head/flatcap = 3, + /obj/item/clothing/shoes/boots/jackboots = 3, + /obj/item/clothing/shoes/boots/jackboots = 3, + /obj/item/clothing/shoes/boots/jackboots/knee = 3, + /obj/item/clothing/shoes/boots/jackboots/thigh = 3, + /obj/item/clothing/shoes/boots/jackboots/toeless/knee = 3, + /obj/item/clothing/shoes/boots/jackboots/toeless/thigh = 3, + /obj/item/clothing/under/schoolgirl = 3, + /obj/item/clothing/under/schoolgirl/red = 3, + /obj/item/clothing/under/schoolgirl/green = 3, + /obj/item/clothing/under/schoolgirl/orange = 3, + /obj/item/clothing/head/kitty = 3, + /obj/item/clothing/glasses/sunglasses/blindfold = 3, + /obj/item/clothing/head/beret = 3, + /obj/item/clothing/under/skirt = 3, + /obj/item/clothing/under/suit_jacket = 3, + /obj/item/clothing/head/that = 3, + /obj/item/clothing/accessory/wcoat = 3, + /obj/item/clothing/under/scratch = 3, + /obj/item/clothing/shoes/white = 3, + /obj/item/clothing/gloves/white = 3, + /obj/item/clothing/under/kilt = 3, + /obj/item/clothing/glasses/monocle = 3, + /obj/item/clothing/under/sl_suit = 3, + /obj/item/clothing/mask/fakemoustache = 3, + /obj/item/cane = 3, + /obj/item/clothing/head/bowler = 3, + /obj/item/clothing/head/plaguedoctorhat = 3, + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 3, + /obj/item/clothing/mask/gas/plaguedoctor = 3, + /obj/item/clothing/under/owl = 3, + /obj/item/clothing/mask/gas/owl_mask = 3, + /obj/item/clothing/under/waiter = 3, + /obj/item/clothing/suit/storage/apron = 3, + /obj/item/clothing/under/pirate = 3, + /obj/item/clothing/head/pirate = 3, + /obj/item/clothing/suit/pirate = 3, + /obj/item/clothing/glasses/eyepatch = 3, + /obj/item/clothing/head/ushanka = 3, + /obj/item/clothing/under/soviet = 3, + /obj/item/clothing/suit/imperium_monk = 1, + /obj/item/clothing/suit/holidaypriest = 3, + /obj/item/clothing/head/witchwig = 3, + /obj/item/clothing/head/wizard/marisa/fake = 3, + /obj/item/clothing/under/sundress = 3, + /obj/item/staff/broom = 3, + /obj/item/clothing/suit/wizrobe/fake = 3, + /obj/item/clothing/head/wizard/fake = 3, + /obj/item/staff = 3, + /obj/item/clothing/mask/gas/clown_hat = 3, + /obj/item/clothing/under/rank/clown = 3, + /obj/item/clothing/mask/gas/mime = 3, + /obj/item/clothing/under/mime = 3, + /obj/item/clothing/mask/gas/sexyclown = 3, + /obj/item/clothing/under/sexyclown = 3, + /obj/item/clothing/mask/gas/sexymime = 3, + /obj/item/clothing/under/sexymime = 3, + /obj/item/clothing/head/rice = 3, + /obj/item/clothing/head/lobster = 1, + /obj/item/clothing/under/lobster = 1, + /obj/item/clothing/suit/storage/hooded/bee_costume = 1, + /obj/item/clothing/suit/storage/hooded/flash_costume = 1, + /obj/item/clothing/head/nemes = 1, + /obj/item/clothing/head/pharaoh = 1, + /obj/item/clothing/suit/pharaoh = 2, + /obj/item/clothing/mask/gas/mummy = 2, + /obj/item/clothing/under/mummy = 2, + /obj/item/clothing/head/scarecrow = 2, + /obj/item/clothing/mask/gas/scarecrow = 2, + /obj/item/clothing/under/scarecrow = 2, + /obj/item/clothing/mask/gas/skeleton = 2, + /obj/item/clothing/under/skeleton = 2, + /obj/item/clothing/under/drfreeze = 2, + /obj/item/clothing/suit/drfreeze = 2, + /obj/item/clothing/under/darkholme = 2, + /obj/item/clothing/under/geisha = 2, + /obj/item/clothing/head/telegram = 2, + /obj/item/clothing/under/telegram = 2, + /obj/item/clothing/head/widehat_red = 2, + /obj/item/clothing/mask/gas/bumba = 2, + /obj/item/clothing/mask/gas/demon = 2, + /obj/item/clothing/mask/gas/goblin = 2, + /obj/item/clothing/mask/gas/guy = 3, + /obj/item/clothing/mask/gas/joy = 2, + /obj/item/clothing/under/red_mech = 1, + /obj/item/clothing/under/white_mech = 1, + /obj/item/clothing/under/blue_mech = 1, + /obj/item/clothing/head/bunny = 1, + /obj/item/clothing/suit/bunny = 1, + /obj/item/clothing/head/santa = 1, + /obj/item/clothing/head/santa/green = 1, + /obj/item/clothing/head/reindeer = 2, + /obj/item/clothing/head/holiday = 2, + /obj/item/clothing/head/holiday/green = 2, + /obj/item/clothing/suit/storage/toggle/holiday = 2, + /obj/item/clothing/suit/storage/toggle/holiday/green = 2, + /obj/item/clothing/under/christmas = 2, + /obj/item/clothing/under/christmas/green = 2, + /obj/item/clothing/under/christmasfem = 2, + /obj/item/clothing/under/christmasfem/green = 2, + /obj/item/clothing/shoes/santa = 1, + /obj/item/clothing/shoes/holiday = 2, + /obj/item/clothing/shoes/holiday/green = 2, + /obj/item/clothing/mask/gas/bat = 2, + /obj/item/clothing/mask/gas/bear = 2, + /obj/item/clothing/mask/gas/bee = 2, + /obj/item/clothing/mask/gas/dolphin = 2, + /obj/item/clothing/mask/gas/fox = 2, + /obj/item/clothing/mask/gas/frog = 2, + /obj/item/clothing/mask/gas/horsehead = 2, + /obj/item/clothing/mask/gas/jackal = 2, + /obj/item/clothing/mask/gas/monkeymask = 2, + /obj/item/clothing/mask/gas/pig = 2, + /obj/item/clothing/mask/gas/rat = 2, + /obj/item/clothing/mask/gas/raven = 2, + /obj/item/clothing/mask/gas/shark = 2, + /obj/item/clothing/under/bsing = 1, + /obj/item/clothing/shoes/boots/bsing = 1, + /obj/item/clothing/under/ysing = 1, + /obj/item/clothing/shoes/boots/ysing = 1, + /obj/item/clothing/suit/hevsuit = 3, + /obj/item/clothing/head/hevhelm = 3, + /obj/item/clothing/suit/banana = 3, + /obj/item/clothing/suit/assassin = 3, + /obj/item/clothing/head/bard = 3, + /obj/item/clothing/head/helmet/aquiline = 3, + /obj/item/clothing/under/aquiline_enforcer = 3, + /obj/item/clothing/under/yoko = 3, + /obj/item/clothing/under/kamina = 3, + /obj/item/clothing/under/tape = 3, + /obj/item/clothing/under/redcoat = 3, + /obj/item/clothing/under/general = 3, + /obj/item/clothing/under/american = 3, + /obj/item/clothing/under/prussian = 3, + ) + premium = list( + /obj/item/clothing/suit/imperium_monk = 3, + ) + contraband = list( + /obj/item/clothing/head/syndicatefake = 1, + /obj/item/clothing/suit/syndicatefake = 1, + ) + price_default = 25 diff --git a/code/game/machinery/vending/medical.dm b/code/game/machinery/vending/medical.dm new file mode 100644 index 00000000000..4cf792e7b35 --- /dev/null +++ b/code/game/machinery/vending/medical.dm @@ -0,0 +1,143 @@ +/obj/machinery/vending/medical + name = "NanoMed Plus" + desc = "Medical drug dispenser." + icon_state = "med" + icon_deny = "med-deny" + product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" + req_access = list(ACCESS_MEDICAL_MAIN) + products = list( + /obj/item/reagent_containers/glass/bottle/antitoxin = 4, + /obj/item/reagent_containers/glass/bottle/inaprovaline = 4, + /obj/item/reagent_containers/glass/bottle/stoxin = 4, + /obj/item/reagent_containers/glass/bottle/toxin = 4, + /obj/item/reagent_containers/syringe/antiviral = 4, + /obj/item/reagent_containers/syringe = 30, + /obj/item/healthanalyzer = 5, + /obj/item/reagent_containers/glass/beaker = 4, + /obj/item/reagent_containers/dropper = 2, + /obj/item/stack/medical/advanced/bruise_pack = 6, + /obj/item/stack/medical/advanced/ointment = 6, + /obj/item/stack/medical/splint = 4, + /obj/item/storage/pill_bottle/carbon = 2, + /obj/item/storage/pill_bottle = 3, + /obj/item/storage/box/vmcrystal = 4, + /obj/item/clothing/glasses/omnihud/med = 4, + /obj/item/glasses_kit = 1, + /obj/item/storage/quickdraw/syringe_case = 4, + /obj/item/storage/single_use/med_pouch/overdose = 3, + /obj/item/storage/single_use/med_pouch/radiation = 3, + /obj/item/storage/single_use/med_pouch/toxin = 3, + /obj/item/storage/single_use/med_pouch/oxyloss = 3, + /obj/item/storage/single_use/med_pouch/burn = 3, + /obj/item/storage/single_use/med_pouch/trauma = 3, + /obj/item/storage/hypokit = 6, + ) + contraband = list( + /obj/item/reagent_containers/pill/tox = 3, + /obj/item/reagent_containers/pill/stox = 4, + /obj/item/reagent_containers/pill/antitox = 6, + ) + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + req_log_access = ACCESS_MEDICAL_CMO + has_logs = 1 +/obj/machinery/vending/wallmed1 + name = "NanoMed" + desc = "A wall-mounted version of the NanoMed." + product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" + icon_state = "wallmed" + icon_deny = "wallmed-deny" + density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + products = list( + /obj/item/stack/medical/bruise_pack = 2, + /obj/item/storage/single_use/med_pouch/trauma = 1, + /obj/item/stack/medical/ointment = 2, + /obj/item/storage/single_use/med_pouch/burn = 1, + /obj/item/reagent_containers/hypospray/autoinjector = 4, + /obj/item/healthanalyzer = 1, + ) + contraband = list( + /obj/item/reagent_containers/syringe/antitoxin = 4, + /obj/item/reagent_containers/syringe/antiviral = 4, + /obj/item/reagent_containers/pill/tox = 1, + ) + req_log_access = ACCESS_MEDICAL_CMO + has_logs = 1 + +// Modified version from tether_things.dm +/obj/machinery/vending/wallmed1/public + products = list( + /obj/item/stack/medical/bruise_pack = 8, + /obj/item/storage/single_use/med_pouch/trauma = 2, + /obj/item/stack/medical/ointment = 8, + /obj/item/storage/single_use/med_pouch/burn = 2, + /obj/item/reagent_containers/hypospray/autoinjector = 16, + /obj/item/healthanalyzer = 4, + ) + +//Airlock antitox vendor. Used on the tether map and a few other POIS and such +/obj/machinery/vending/wallmed_airlock + name = "Airlock NanoMed" + desc = "Wall-mounted Medical Equipment dispenser. This limited-use version dispenses antitoxins with mild painkillers for surface EVAs." + icon_state = "wallmed" + density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + products = list( + /obj/item/reagent_containers/pill/airlock = 20, + /obj/item/storage/single_use/med_pouch/oxyloss = 2, + /obj/item/storage/single_use/med_pouch/toxin = 2, + /obj/item/healthanalyzer = 1, + ) + contraband = list(/obj/item/reagent_containers/pill/tox = 2) + req_log_access = ACCESS_MEDICAL_CMO + has_logs = 1 + +/obj/machinery/vending/wallmed2 + name = "NanoMed" + desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment." + icon_state = "wallmed" + icon_deny = "wallmed-deny" + density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + products = list( + /obj/item/reagent_containers/hypospray/autoinjector = 5, + /obj/item/reagent_containers/syringe/antitoxin = 3, + /obj/item/stack/medical/bruise_pack = 3, + /obj/item/storage/single_use/med_pouch/oxyloss = 1, + /obj/item/storage/single_use/med_pouch/trauma = 1, + /obj/item/storage/single_use/med_pouch/burn = 1, + /obj/item/storage/single_use/med_pouch/toxin = 1, + /obj/item/storage/single_use/med_pouch/radiation = 1, + /obj/item/storage/single_use/med_pouch/overdose = 1, + /obj/item/stack/medical/ointment = 3, + /obj/item/healthanalyzer = 3, + ) + contraband = list( + /obj/item/reagent_containers/pill/tox = 3, + ) + req_log_access = ACCESS_MEDICAL_CMO + has_logs = 1 + +/obj/machinery/vending/blood + name = "Blood-Onator" + desc = "Freezer-vendor for storage and quick dispensing of blood packs" + product_ads = "The true life juice!;Vampire's choice!;Home-grown blood only!;Donate today, be saved tomorrow!;Approved by Zeng-Hu Pharmaceuticals Incorporated!; Curse you, Vey-Med artificial blood!" + icon_state = "blood" + idle_power_usage = 211 + req_access = list(ACCESS_MEDICAL_MAIN) + products = list( + /obj/item/reagent_containers/blood/prelabeled/APlus = 3, + /obj/item/reagent_containers/blood/prelabeled/AMinus = 3, + /obj/item/reagent_containers/blood/prelabeled/BPlus = 3, + /obj/item/reagent_containers/blood/prelabeled/BMinus = 3, + /obj/item/reagent_containers/blood/prelabeled/ABPlus = 2, + /obj/item/reagent_containers/blood/prelabeled/ABMinus = 1, + /obj/item/reagent_containers/blood/prelabeled/OPlus = 2, + /obj/item/reagent_containers/blood/prelabeled/OMinus = 5, + /obj/item/reagent_containers/blood/empty = 5, + /obj/item/reagent_containers/food/drinks/bludboxmax = 5, + /obj/item/reagent_containers/food/drinks/bludboxmaxlight = 5, + ) + contraband = list( + /obj/item/reagent_containers/glass/bottle/stoxin = 2, + ) + req_log_access = ACCESS_MEDICAL_CMO + has_logs = 1 + diff --git a/code/game/machinery/vending/misc.dm b/code/game/machinery/vending/misc.dm new file mode 100644 index 00000000000..cd073249020 --- /dev/null +++ b/code/game/machinery/vending/misc.dm @@ -0,0 +1,232 @@ +/obj/machinery/vending/assist + products = list( + /obj/item/assembly/prox_sensor = 5, + /obj/item/assembly/igniter = 3, + /obj/item/assembly/signaler = 4, + /obj/item/tool/wirecutters = 1, + /obj/item/cartridge/signal = 4, + ) + contraband = list( + /obj/item/flashlight = 5, + /obj/item/assembly/timer = 2, + ) + product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" + +/obj/machinery/vending/cart + name = "PTech" + desc = "Cartridges for PDAs." + product_slogans = "Carts to go!" + icon_state = "cart" + icon_deny = "cart-deny" + req_access = list(ACCESS_COMMAND_HOP) + products = list( + /obj/item/cartridge/medical = 10, + /obj/item/cartridge/engineering = 10, + /obj/item/cartridge/security = 10, + /obj/item/cartridge/janitor = 10, + /obj/item/cartridge/signal/science = 10, + /obj/item/pda/heads = 10, + /obj/item/cartridge/captain = 3, + /obj/item/cartridge/quartermaster = 10, + ) + req_log_access = ACCESS_COMMAND_HOP + has_logs = 1 + +/obj/machinery/vending/cigarette + name = "cigarette machine" + desc = "If you want to get cancer, might as well do it in style!" + product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!" + product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs.;Feeling temperamental? Try a Temperamento!;Carcinoma Angels - go fuck yerself!;Don't be so hard on yourself, kid. Smoke a Lucky Star!" + vend_delay = 34 + icon_state = "cigs" + products = list( + /obj/item/storage/fancy/cigarettes = 5, + /obj/item/storage/fancy/cigarettes/dromedaryco = 5, + /obj/item/storage/fancy/cigarettes/killthroat = 5, + /obj/item/storage/fancy/cigarettes/luckystars = 5, + /obj/item/storage/fancy/cigarettes/jerichos = 5, + /obj/item/storage/fancy/cigarettes/menthols = 5, + /obj/item/storage/rollingpapers = 5, + /obj/item/storage/rollingblunts = 5, + /obj/item/storage/box/matches = 10, + /obj/item/flame/lighter/random = 4, + ) + contraband = list( + /obj/item/flame/lighter/zippo = 4, + ) + premium = list( + /obj/item/storage/fancy/cigar = 5, + /obj/item/storage/fancy/cigarettes/carcinomas = 5, + /obj/item/storage/fancy/cigarettes/professionals = 5, + /obj/item/storage/fancy/cigarettes/blackstars = 5, + ) + prices = list( + /obj/item/storage/fancy/cigarettes = 12, + /obj/item/storage/fancy/cigarettes/dromedaryco = 15, + /obj/item/storage/fancy/cigarettes/killthroat = 17, + /obj/item/storage/fancy/cigarettes/luckystars = 17, + /obj/item/storage/fancy/cigarettes/jerichos = 22, + /obj/item/storage/fancy/cigarettes/menthols = 18, + /obj/item/storage/rollingpapers = 15, + /obj/item/storage/rollingblunts = 25, + /obj/item/storage/box/matches = 3, + /obj/item/flame/lighter/random = 5, + ) + +/obj/machinery/vending/magivend + name = "MagiVend" + desc = "A magic vending machine." + icon_state = "MagiVend" + product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!" + vend_delay = 15 + vend_reply = "Have an enchanted evening!" + product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!" + products = list( + /obj/item/clothing/head/wizard = 1, + /obj/item/clothing/suit/wizrobe = 1, + /obj/item/clothing/head/wizard/red = 1, + /obj/item/clothing/suit/wizrobe/red = 1, + /obj/item/clothing/shoes/sandal = 1, + /obj/item/staff = 2, + ) + +/obj/machinery/vending/giftvendor + name = "AlliCo Baubles and Confectionaries" + desc = "For that special someone!" + icon_state = "giftvendor" + vend_delay = 15 + products = list( + /obj/item/storage/fancy/heartbox = 5, + /obj/item/toy/bouquet = 5, + /obj/item/toy/bouquet/fake = 4, + /obj/item/paper/card/smile = 3, + /obj/item/paper/card/heart = 3, + /obj/item/paper/card/cat = 3, + /obj/item/paper/card/flower = 3, + /obj/item/clothing/accessory/bracelet/friendship = 5, + /obj/item/toy/plushie/therapy/red = 2, + /obj/item/toy/plushie/therapy/purple = 2, + /obj/item/toy/plushie/therapy/blue = 2, + /obj/item/toy/plushie/therapy/yellow = 2, + /obj/item/toy/plushie/therapy/orange = 2, + /obj/item/toy/plushie/therapy/green = 2, + /obj/item/toy/plushie/nymph = 2, + /obj/item/toy/plushie/mouse = 2, + /obj/item/toy/plushie/kitten = 2, + /obj/item/toy/plushie/lizard = 2, + /obj/item/toy/plushie/spider = 2, + /obj/item/toy/plushie/farwa = 2, + /obj/item/toy/plushie/corgi = 1, + /obj/item/toy/plushie/octopus = 1, + /obj/item/toy/plushie/face_hugger = 1, + /obj/item/toy/plushie/voxie = 1, + /obj/item/toy/plushie/carp = 1, + /obj/item/toy/plushie/deer = 1, + /obj/item/toy/plushie/tabby_cat = 1, + /obj/item/toy/plushie/cyancowgirl = 1, + /obj/item/toy/plushie/bear_grizzly = 2, + /obj/item/toy/plushie/bear_polar = 2, + /obj/item/toy/plushie/bear_panda = 2, + /obj/item/toy/plushie/bear_soda = 2, + /obj/item/toy/plushie/bear_bloody = 2, + /obj/item/toy/plushie/bear_space = 1, + /obj/item/toy/plushie/doll = 3, + /obj/item/storage/daki = 10, + /obj/item/toy/gnome = 4, + ) + premium = list( + /obj/item/reagent_containers/food/drinks/bottle/champagne = 1, + /obj/item/storage/trinketbox = 2, + ) + prices = list( + /obj/item/storage/fancy/heartbox = 25, + /obj/item/toy/bouquet = 25, + /obj/item/toy/bouquet/fake = 15, + /obj/item/paper/card/smile = 1, + /obj/item/paper/card/heart = 1, + /obj/item/paper/card/cat = 1, + /obj/item/paper/card/flower = 1, + /obj/item/clothing/accessory/bracelet/friendship = 10, + /obj/item/toy/plushie/therapy/red = 20, + /obj/item/toy/plushie/therapy/purple = 20, + /obj/item/toy/plushie/therapy/blue = 20, + /obj/item/toy/plushie/therapy/yellow = 20, + /obj/item/toy/plushie/therapy/orange = 20, + /obj/item/toy/plushie/therapy/green = 20, + /obj/item/toy/plushie/nymph = 35, + /obj/item/toy/plushie/mouse = 35, + /obj/item/toy/plushie/kitten = 35, + /obj/item/toy/plushie/lizard = 35, + /obj/item/toy/plushie/spider = 35, + /obj/item/toy/plushie/farwa = 35, + /obj/item/toy/plushie/corgi = 50, + /obj/item/toy/plushie/octopus = 50, + /obj/item/toy/plushie/face_hugger = 50, + /obj/item/toy/plushie/voxie = 50, + /obj/item/toy/plushie/carp = 50, + /obj/item/toy/plushie/deer = 50, + /obj/item/toy/plushie/tabby_cat = 50, + /obj/item/toy/plushie/cyancowgirl = 50, + /obj/item/toy/plushie/bear_grizzly = 20, + /obj/item/toy/plushie/bear_polar = 20, + /obj/item/toy/plushie/bear_panda = 20, + /obj/item/toy/plushie/bear_soda = 35, + /obj/item/toy/plushie/bear_bloody = 35, + /obj/item/toy/plushie/bear_space = 50, + /obj/item/toy/plushie/doll = 50, + /obj/item/storage/daki = 100, + /obj/item/toy/gnome = 20, + ) + +//Custom vendors + +/* For later, then +/obj/machinery/vending/weapon_machine + name = "Frozen Star Guns&Ammo" + desc = "A self-defense equipment vending machine. When you need to take care of that clown." + product_slogans = "The best defense is good offense!;Buy for your whole family today!;Nobody can outsmart bullet!;God created man - Frozen Star made them EQUAL!;Nobody can outsmart bullet!;Stupidity can be cured! By LEAD.;Dead kids can't bully your children!" + product_ads = "Stunning!;Take justice in your own hands!;LEADearship!" + icon_state = "weapon" + products = list(/obj/item/flash = 6, +/obj/item/reagent_containers/spray/pepper = 6, /obj/item/gun/ballistic/olivaw = 5, /obj/item/gun/ballistic/giskard = 5, /obj/item/ammo_magazine/mg/cl32/rubber = 20) + contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) + prices = list(/obj/item/flash = 600, +/obj/item/reagent_containers/spray/pepper = 800, /obj/item/gun/ballistic/olivaw = 1600, /obj/item/gun/ballistic/giskard = 1200, /obj/item/ammo_magazine/mg/cl32/rubber = 200) +*/ + +/obj/machinery/vending/glukoz + name = "Glukoz Pharmavenda" + desc = "An illicit injector vendor stocked and maintained by the allegedly defunct pharmaceuticals company Glukoz Ltd." + icon = 'icons/obj/vending.dmi' + icon_state = "rxvendor" + icon_vend = "rxvendor" + product_slogans = "Glukoz Pharmavenda, voted top street pharmaceuticals vendor, 2519!" + product_ads = "Back so soon?;The hits keep comin'!;If you can afford it, it's only a habit!;Who's gonna know?;In a pinch? It's just a pinch!;Remove the cap!;You'll be back!" + products = list( + /obj/item/reagent_containers/hypospray/glukoz = 10, + /obj/item/reagent_containers/hypospray/glukoz/certaphil = 10, + /obj/item/reagent_containers/hypospray/glukoz/downer = 10, + /obj/item/reagent_containers/hypospray/glukoz/fuckit = 10, + /obj/item/reagent_containers/hypospray/glukoz/hangup = 10, + /obj/item/reagent_containers/hypospray/glukoz/hypnogamma = 10, + /obj/item/reagent_containers/hypospray/glukoz/medcon = 10, + /obj/item/reagent_containers/hypospray/glukoz/multibuzz = 10, + /obj/item/reagent_containers/hypospray/glukoz/numplus = 10, + /obj/item/reagent_containers/hypospray/glukoz/oxyduo = 10, + /obj/item/reagent_containers/hypospray/glukoz/pyrholidon = 10, + /obj/item/reagent_containers/hypospray/glukoz/viraplus = 10, + ) + prices = list( + /obj/item/reagent_containers/hypospray/glukoz = 15, + /obj/item/reagent_containers/hypospray/glukoz/certaphil = 25, + /obj/item/reagent_containers/hypospray/glukoz/downer = 25, + /obj/item/reagent_containers/hypospray/glukoz/fuckit = 50, + /obj/item/reagent_containers/hypospray/glukoz/hangup = 50, + /obj/item/reagent_containers/hypospray/glukoz/hypnogamma = 50, + /obj/item/reagent_containers/hypospray/glukoz/medcon = 75, + /obj/item/reagent_containers/hypospray/glukoz/multibuzz = 50, + /obj/item/reagent_containers/hypospray/glukoz/numplus = 50, + /obj/item/reagent_containers/hypospray/glukoz/oxyduo = 75, + /obj/item/reagent_containers/hypospray/glukoz/pyrholidon = 50, + /obj/item/reagent_containers/hypospray/glukoz/viraplus = 25, + ) diff --git a/code/game/machinery/vending/plants.dm b/code/game/machinery/vending/plants.dm new file mode 100644 index 00000000000..07116a335ee --- /dev/null +++ b/code/game/machinery/vending/plants.dm @@ -0,0 +1,111 @@ +/obj/machinery/vending/hydronutrients + name = "NutriMax" + desc = "A plant nutrients vendor." + product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!" + product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." + icon_state = "nutri" + icon_deny = "nutri-deny" + products = list( + /obj/item/reagent_containers/glass/bottle/eznutrient = 6, + /obj/item/reagent_containers/glass/bottle/left4zed = 4, + /obj/item/reagent_containers/glass/bottle/robustharvest = 3, + /obj/item/plantspray/pests = 20, + /obj/item/reagent_containers/syringe = 5, + /obj/item/reagent_containers/glass/beaker = 4, + /obj/item/storage/bag/plants = 5, + ) + premium = list( + /obj/item/reagent_containers/glass/bottle/ammonia = 10, + /obj/item/reagent_containers/glass/bottle/diethylamine = 5, + ) + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + +/obj/machinery/vending/hydroseeds + name = "MegaSeed Servitor" + desc = "When you need seeds fast!" + product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" + product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" + icon_state = "seeds" + + products = list( + /obj/item/seeds/bananaseed = 3, + /obj/item/seeds/berryseed = 3, + /obj/item/seeds/carrotseed = 3, + /obj/item/seeds/coconutseed = 3, + /obj/item/seeds/chantermycelium = 3, + /obj/item/seeds/chiliseed = 3, + /obj/item/seeds/cornseed = 3, + /obj/item/seeds/eggplantseed = 3, + /obj/item/seeds/potatoseed = 3, + /obj/item/seeds/replicapod = 3, + /obj/item/seeds/soyaseed = 3, + /obj/item/seeds/sunflowerseed = 3, + /obj/item/seeds/taroseed = 3, + /obj/item/seeds/tomatoseed = 3, + /obj/item/seeds/towermycelium = 3, + /obj/item/seeds/wheatseed = 3, + /obj/item/seeds/appleseed = 3, + /obj/item/seeds/poppyseed = 3, + /obj/item/seeds/sugarcaneseed = 3, + /obj/item/seeds/ambrosiavulgarisseed = 3, + /obj/item/seeds/peanutseed = 3, + /obj/item/seeds/whitebeetseed = 3, + /obj/item/seeds/watermelonseed = 3, + /obj/item/seeds/lavenderseed = 3, + /obj/item/seeds/limeseed = 3, + /obj/item/seeds/lemonseed = 3, + /obj/item/seeds/orangeseed = 3, + /obj/item/seeds/grassseed = 3, + /obj/item/seeds/cocoapodseed = 3, + /obj/item/seeds/plumpmycelium = 2, + /obj/item/seeds/cabbageseed = 3, + /obj/item/seeds/grapeseed = 3, + /obj/item/seeds/pumpkinseed = 3, + /obj/item/seeds/cherryseed = 3, + /obj/item/seeds/plastiseed = 3, + /obj/item/seeds/riceseed = 3, + /obj/item/seeds/shrinkshroom = 3, + /obj/item/seeds/megashroom = 3, + /obj/item/seeds/peaseed = 3, + /obj/item/seeds/tobaccoseed = 3, + ) + contraband = list( + /obj/item/seeds/amanitamycelium = 2, + /obj/item/seeds/glowshroom = 2, + /obj/item/seeds/libertymycelium = 2, + /obj/item/seeds/mtearseed = 2, + /obj/item/seeds/nettleseed = 2, + /obj/item/seeds/reishimycelium = 2, + /obj/item/seeds/reishimycelium = 2, + /obj/item/seeds/shandseed = 2, + ) + premium = list( + /obj/item/toy/waterflower = 1, + /obj/item/toy/gnome = 1, + ) + +/** + * Populate hydroseeds product_records + * + * This needs to be customized to fetch the actual names of the seeds, otherwise + * the machine would simply list "packet of seeds" times 20 + */ +/obj/machinery/vending/hydroseeds/build_inventory() + var/list/all_products = list( + list(products, CAT_NORMAL), + list(contraband, CAT_HIDDEN), + list(premium, CAT_COIN)) + + for(var/current_list in all_products) + var/category = current_list[2] + + for(var/entry in current_list[1]) + var/obj/item/seeds/S = new entry(src) + var/name = S.name + var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name) + + product.price = (entry in prices) ? prices[entry] : 0 + product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 + product.category = category + + product_records.Add(product) diff --git a/code/game/machinery/vending/research.dm b/code/game/machinery/vending/research.dm new file mode 100644 index 00000000000..62f3b995785 --- /dev/null +++ b/code/game/machinery/vending/research.dm @@ -0,0 +1,42 @@ + +/obj/machinery/vending/phoronresearch + name = "Toximate 3000" + desc = "All the fine parts you need in one vending machine!" + products = list( + /obj/item/clothing/under/rank/scientist = 6, + /obj/item/clothing/suit/bio_suit = 6, + /obj/item/clothing/head/bio_hood = 6, + /obj/item/transfer_valve = 6, + /obj/item/assembly/timer = 6, + /obj/item/assembly/signaler = 6, + /obj/item/assembly/prox_sensor = 6, + /obj/item/assembly/igniter = 6, + ) + req_log_access = ACCESS_SCIENCE_RD + has_logs = 1 + +/obj/machinery/vending/robotics + name = "Robotech Deluxe" + desc = "All the tools you need to create your own robot army." + icon_state = "robotics" + icon_deny = "robotics-deny" + req_access = list(ACCESS_SCIENCE_ROBOTICS) + products = list( + /obj/item/clothing/suit/storage/toggle/labcoat = 4, + /obj/item/clothing/under/rank/roboticist = 4, + /obj/item/stack/cable_coil = 4, + /obj/item/flash = 4, + /obj/item/cell/high = 12, + /obj/item/assembly/prox_sensor = 3, + /obj/item/assembly/signaler = 3, + /obj/item/healthanalyzer = 3, + /obj/item/surgical/scalpel = 2, + /obj/item/surgical/circular_saw = 2, + /obj/item/tank/anesthetic = 2, + /obj/item/clothing/mask/breath/medical = 5, + /obj/item/tool/screwdriver = 5, + /obj/item/tool/crowbar = 5, + ) + //everything after the power cell had no amounts, I improvised. -Sayu + req_log_access = ACCESS_SCIENCE_RD + has_logs = 1 diff --git a/code/game/machinery/vending/security.dm b/code/game/machinery/vending/security.dm new file mode 100644 index 00000000000..96ef3f0bfbc --- /dev/null +++ b/code/game/machinery/vending/security.dm @@ -0,0 +1,28 @@ +/obj/machinery/vending/security + name = "SecTech" + desc = "A security equipment vendor." + product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" + icon_state = "sec" + icon_deny = "sec-deny" + req_access = list(ACCESS_SECURITY_EQUIPMENT) + products = list( + /obj/item/handcuffs = 8, + /obj/item/grenade/flashbang = 4, + /obj/item/flash = 5, + /obj/item/reagent_containers/spray/pepper = 6, + /obj/item/reagent_containers/food/snacks/donut/normal = 12, + /obj/item/storage/box/evidence = 6, + /obj/item/gun/ballistic/sec = 2, + /obj/item/ammo_magazine/m45/rubber = 6, + /obj/item/clothing/mask/gas/half = 6, + /obj/item/clothing/glasses/omnihud/sec = 6, + /obj/item/hailer = 6, + /obj/item/barrier_tape_roll/police = 6, + /obj/item/flashlight/glowstick = 6, + ) + contraband = list( + /obj/item/clothing/glasses/sunglasses = 2, + /obj/item/storage/box/donut = 2, + ) + req_log_access = ACCESS_SECURITY_ARMORY + has_logs = 1 diff --git a/code/game/machinery/vending/service.dm b/code/game/machinery/vending/service.dm new file mode 100644 index 00000000000..6a90730d10c --- /dev/null +++ b/code/game/machinery/vending/service.dm @@ -0,0 +1,142 @@ +/obj/machinery/vending/boozeomat + name = "Booze-O-Mat" + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." + icon_state = "boozeomat" + icon_deny = "boozeomat-deny" + products = list( + /obj/item/reagent_containers/food/drinks/glass2/square = 10, + /obj/item/reagent_containers/food/drinks/glass2/rocks = 10, + /obj/item/reagent_containers/food/drinks/glass2/shake = 10, + /obj/item/reagent_containers/food/drinks/glass2/cocktail = 10, + /obj/item/reagent_containers/food/drinks/glass2/shot = 10, + /obj/item/reagent_containers/food/drinks/glass2/pint = 10, + /obj/item/reagent_containers/food/drinks/glass2/mug = 10, + /obj/item/reagent_containers/food/drinks/glass2/wine = 10, + /obj/item/reagent_containers/food/drinks/glass2/pitcher = 10, + /obj/item/reagent_containers/food/drinks/metaglass = 25, + /obj/item/reagent_containers/food/drinks/bottle/gin = 5, + /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, + /obj/item/reagent_containers/food/drinks/bottle/bluecuracao = 5, + /obj/item/reagent_containers/food/drinks/bottle/cognac = 5, + /obj/item/reagent_containers/food/drinks/bottle/grenadine = 5, + /obj/item/reagent_containers/food/drinks/bottle/kahlua = 5, + /obj/item/reagent_containers/food/drinks/bottle/melonliquor = 5, + /obj/item/reagent_containers/food/drinks/bottle/peppermintschnapps = 5, + /obj/item/reagent_containers/food/drinks/bottle/peachschnapps = 5, + /obj/item/reagent_containers/food/drinks/bottle/lemonadeschnapps = 5, + /obj/item/reagent_containers/food/drinks/bottle/rum = 5, + /obj/item/reagent_containers/food/drinks/bottle/whiterum = 5, + /obj/item/reagent_containers/food/drinks/bottle/sake = 5, + /obj/item/reagent_containers/food/drinks/bottle/specialwhiskey = 5, + /obj/item/reagent_containers/food/drinks/bottle/tequila = 5, + /obj/item/reagent_containers/food/drinks/bottle/vermouth = 5, + /obj/item/reagent_containers/food/drinks/bottle/vodka = 5, + /obj/item/reagent_containers/food/drinks/bottle/whiskey = 5, + /obj/item/reagent_containers/food/drinks/bottle/wine = 5, + /obj/item/reagent_containers/food/drinks/bottle/whitewine = 5, + /obj/item/reagent_containers/food/drinks/bottle/bitters = 5, + /obj/item/reagent_containers/food/drinks/bottle/victory_gin = 3, + /obj/item/reagent_containers/food/drinks/bottle/messa_mead = 3, + /obj/item/reagent_containers/food/drinks/bottle/small/ale = 15, + /obj/item/reagent_containers/food/drinks/bottle/small/beer = 15, + /obj/item/reagent_containers/food/drinks/bottle/small/cider = 15, + /obj/item/reagent_containers/food/drinks/bottle/small/alcsassafras = 15, + /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 5, + /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 5, + /obj/item/reagent_containers/food/drinks/bottle/limejuice = 5, + /obj/item/reagent_containers/food/drinks/bottle/lemonjuice = 5, + /obj/item/reagent_containers/food/drinks/bottle/applejuice = 5, + /obj/item/reagent_containers/food/drinks/bottle/milk = 5, + /obj/item/reagent_containers/food/drinks/bottle/cream = 5, + /obj/item/reagent_containers/food/drinks/bottle/cola = 5, + /obj/item/reagent_containers/food/drinks/bottle/space_up = 5, + /obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind = 5, + /obj/item/reagent_containers/food/drinks/bottle/champagne/jericho = 1, + /obj/item/reagent_containers/food/drinks/bottle/champagne = 3, + /obj/item/reagent_containers/food/drinks/bottle/coconutmilk = 5, + /obj/item/reagent_containers/food/drinks/bottle/unathijuice = 2, + /obj/item/reagent_containers/food/drinks/cans/sodawater = 15, + /obj/item/reagent_containers/food/drinks/cans/tonic = 15, + /obj/item/reagent_containers/food/drinks/cans/gingerale = 15, + /obj/item/reagent_containers/food/drinks/flask/barflask = 5, + /obj/item/reagent_containers/food/drinks/flask/vacuumflask = 5, + /obj/item/reagent_containers/food/drinks/ice = 10, + /obj/item/reagent_containers/food/drinks/tea = 15, + /obj/item/reagent_containers/food/condiment/small/packet/matchapowder = 5, + /obj/item/reagent_containers/food/condiment/small/packet/taropowder = 5, + /obj/item/glass_extra/stick = 30, + /obj/item/glass_extra/straw = 30, + /obj/item/storage/single_use/med_pouch/overdose = 2, + ) + contraband = list() + vend_delay = 15 + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" + product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" + req_access = list(ACCESS_GENERAL_BAR) + req_log_access = ACCESS_GENERAL_BAR + has_logs = 1 + +/obj/machinery/vending/dinnerware + name = "Dinnerware" + desc = "A kitchen and restaurant equipment vendor." + product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." + icon_state = "dinnerware" + products = list( + /obj/item/tray = 8, + /obj/item/material/kitchen/utensil/fork = 6, + /obj/item/material/knife/plastic = 6, + /obj/item/material/kitchen/utensil/spoon = 6, + /obj/item/material/knife = 3, + /obj/item/material/kitchen/rollingpin = 2, + /obj/item/reagent_containers/food/drinks/glass2/square = 8, + /obj/item/reagent_containers/food/drinks/glass2/shake = 8, + /obj/item/glass_extra/stick = 15, + /obj/item/glass_extra/straw = 15, + /obj/item/clothing/suit/chef/classic = 2, + /obj/item/storage/toolbox/lunchbox = 3, + /obj/item/storage/toolbox/lunchbox/heart = 3, + /obj/item/storage/toolbox/lunchbox/cat = 3, + /obj/item/storage/toolbox/lunchbox/nt = 3, + /obj/item/storage/toolbox/lunchbox/mars = 3, + /obj/item/storage/toolbox/lunchbox/cti = 3, + /obj/item/storage/toolbox/lunchbox/nymph = 3, + /obj/item/storage/toolbox/lunchbox/syndicate = 3, + /obj/item/storage/toolbox/lunchbox/cyancowgirl = 3, + /obj/item/trash/bowl = 30, + /obj/item/reagent_containers/cooking_container/oven = 5, + /obj/item/reagent_containers/cooking_container/fryer = 4, + ) + contraband = list( + /obj/item/material/knife/butch = 2, + ) + +/obj/machinery/vending/fishing + name = "Loot Trawler" + desc = "A special vendor for fishing equipment." + product_ads = "Tired of trawling across the ocean floor? Get our loot!;Chum and rods.;Don't get baited into fishing without us!;Baby is your star-sign pisces? We'd make a perfect match.;Do not fear, plenty to catch around here.;Don't get reeled in helplessly, get your own rod today!" + icon_state = "fishvendor" + products = list( + /obj/item/fishing_rod = 10, + /obj/item/fishing_hook = 20, + /obj/item/fishing_line = 20, + /obj/item/fishing_hook/magnet = 10, + /obj/item/fishing_hook/rescue = 10, + /obj/item/fishing_hook/shiny = 10, + /obj/item/fishing_hook/weighted = 10, + /obj/item/fishing_line = 20, + /obj/item/fishing_line/bouncy = 10, + /obj/item/fishing_line/reinforced = 10, + /obj/item/bait_can/worm = 80, + /obj/item/aquarium_kit = 20, + /obj/item/storage/box/aquarium_props = 20, + /obj/item/storage/fish_case = 30, + /obj/item/book/fish_catalog = 20, + ) + price_default = 10 + prices = list( + /obj/item/fishing_rod = 50, + /obj/item/bait_can/worm = 5, + /obj/item/aquarium_kit = 50, + /obj/item/storage/box/aquarium_props = 25, + ) diff --git a/code/game/machinery/vending/snacks.dm b/code/game/machinery/vending/snacks.dm new file mode 100644 index 00000000000..b60e12ad4f1 --- /dev/null +++ b/code/game/machinery/vending/snacks.dm @@ -0,0 +1,233 @@ + +/obj/machinery/vending/snack + name = "Getmore Chocolate Corp" + desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars." + product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" + product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" + icon_state = "snack" + products = list( + /obj/item/reagent_containers/food/snacks/wrapped/candy = 6, + /obj/item/reagent_containers/food/drinks/dry_ramen = 6, + /obj/item/reagent_containers/food/snacks/bagged/chips =6, + /obj/item/reagent_containers/food/snacks/bagged/sosjerky = 6, + /obj/item/reagent_containers/food/snacks/boxed/no_raisin = 6, + /obj/item/reagent_containers/food/snacks/wrapped/spacetwinkie = 6, + /obj/item/reagent_containers/food/snacks/bagged/cheesiehonkers = 6, + /obj/item/reagent_containers/food/snacks/bagged/hotcheesiehonkers = 3, + /obj/item/reagent_containers/food/snacks/tastybread = 6, + /obj/item/reagent_containers/food/snacks/wrapped/skrellsnacks = 3, + /obj/item/reagent_containers/food/snacks/baschbeans = 6, + /obj/item/reagent_containers/food/snacks/creamcorn = 6, + /obj/item/reagent_containers/hard_candy/lollipop = 6, + /obj/item/reagent_containers/food/snacks/wrapped/spunow = 6, + /obj/item/reagent_containers/food/snacks/wrapped/glad2nut = 6, + /obj/item/reagent_containers/food/snacks/wrapped/natkat = 6 + ) + contraband = list( + /obj/item/reagent_containers/food/snacks/syndicake = 6, + /obj/item/reagent_containers/food/snacks/boxed/unajerky = 6, + ) + prices = list( + /obj/item/reagent_containers/food/snacks/wrapped/candy = 2, + /obj/item/reagent_containers/food/drinks/dry_ramen = 5, + /obj/item/reagent_containers/food/snacks/bagged/chips = 3, + /obj/item/reagent_containers/food/snacks/bagged/sosjerky = 3, + /obj/item/reagent_containers/food/snacks/boxed/no_raisin = 2, + /obj/item/reagent_containers/food/snacks/wrapped/spacetwinkie = 2, + /obj/item/reagent_containers/food/snacks/bagged/cheesiehonkers = 3, + /obj/item/reagent_containers/food/snacks/bagged/hotcheesiehonkers = 6, + /obj/item/reagent_containers/food/snacks/tastybread = 3, + /obj/item/reagent_containers/food/snacks/wrapped/skrellsnacks = 4, + /obj/item/reagent_containers/food/snacks/baschbeans = 6, + /obj/item/reagent_containers/food/snacks/creamcorn = 6, + /obj/item/reagent_containers/hard_candy/lollipop = 2, + /obj/item/reagent_containers/food/snacks/wrapped/spunow = 4, + /obj/item/reagent_containers/food/snacks/wrapped/glad2nut = 4, + /obj/item/reagent_containers/food/snacks/wrapped/natkat = 4 + ) + +/obj/machinery/vending/fitness // Added Liquid Protein and slightly adjusted price of liquid food items due to buff. + name = "SweatMAX" + desc = "Fueled by your inner inadequacy!" + icon_state = "fitness" + products = list( + /obj/item/reagent_containers/food/drinks/smallmilk = 8, + /obj/item/reagent_containers/food/drinks/smallchocmilk = 8, + /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8, + /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 8, + /obj/item/reagent_containers/food/snacks/wrapped/proteinbar = 8, + /obj/item/reagent_containers/food/snacks/liquid = 10, + /obj/item/reagent_containers/food/snacks/liquid/protein = 10, + /obj/item/reagent_containers/pill/diet = 8, + /obj/item/towel/random = 8, + /obj/item/reagent_containers/food/snacks/brainsnax = 5, + ) + // yes, it's a ripoff, much like real sports food. + prices = list( + /obj/item/reagent_containers/food/drinks/smallmilk = 3, + /obj/item/reagent_containers/food/drinks/smallchocmilk = 3, + /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 15, + /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 5, + /obj/item/reagent_containers/food/snacks/wrapped/proteinbar = 10, + /obj/item/reagent_containers/food/snacks/liquid = 15, + /obj/item/reagent_containers/food/snacks/liquid/protein = 15, + /obj/item/reagent_containers/pill/diet = 10, + /obj/item/towel/random = 15, + /obj/item/reagent_containers/food/snacks/brainsnax = 10, + ) + contraband = list( + /obj/item/reagent_containers/syringe/steroid = 4 + ) +/obj/machinery/vending/weeb + name = "Nippon-Tan!" + desc = "A vendor full of asian snackfood variety!" + icon_state = "weeb" + icon_vend = "weeb-vend" + products = list( + /obj/item/reagent_containers/food/snacks/riceball = 10, + /obj/item/reagent_containers/food/snacks/hanamidango = 10, + /obj/item/reagent_containers/food/snacks/gomadango = 10, + /obj/item/reagent_containers/food/snacks/mochi = 10, + /obj/item/reagent_containers/food/snacks/dorayaki = 10, + /obj/item/reagent_containers/food/snacks/chocobanana = 10, + /obj/item/storage/box/pocky = 10, + /obj/item/storage/box/gondola = 10, + /obj/item/reagent_containers/food/snacks/bagged/wpeas = 10, + /obj/item/reagent_containers/food/drinks/cans/ochamidori = 10, + /obj/item/reagent_containers/food/drinks/cans/ramune = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 10, + /obj/item/clothing/under/kimono = 5, + /obj/item/clothing/under/kimono/yellow = 5, + /obj/item/clothing/under/kimono/blue = 5, + /obj/item/clothing/under/bsing = 5, + /obj/item/clothing/shoes/boots/bsing = 5, + /obj/item/clothing/under/ysing = 5, + /obj/item/clothing/shoes/boots/ysing = 5, + /obj/item/storage/daki = 10, + /obj/item/toy/katana = 10 + ) + prices = list( + /obj/item/reagent_containers/food/snacks/riceball = 5, + /obj/item/reagent_containers/food/snacks/hanamidango = 5, + /obj/item/reagent_containers/food/snacks/gomadango = 5, + /obj/item/reagent_containers/food/snacks/mochi = 5, + /obj/item/reagent_containers/food/snacks/dorayaki = 5, + /obj/item/reagent_containers/food/snacks/chocobanana = 5, + /obj/item/storage/box/pocky = 5, + /obj/item/storage/box/gondola = 5, + /obj/item/reagent_containers/food/snacks/bagged/wpeas = 5, + /obj/item/reagent_containers/food/drinks/cans/ochamidori = 8, + /obj/item/reagent_containers/food/drinks/cans/ramune = 10, + /obj/item/reagent_containers/food/drinks/cans/kyocola = 2, + /obj/item/reagent_containers/food/drinks/cans/kyocola_fire = 2, + /obj/item/reagent_containers/food/drinks/cans/kyocola_sakura = 2, + /obj/item/reagent_containers/food/drinks/cans/kyocola_blue = 2, + /obj/item/clothing/under/kimono = 10, + /obj/item/clothing/under/kimono/yellow = 10, + /obj/item/clothing/under/kimono/blue = 10, + /obj/item/clothing/under/bsing = 10, + /obj/item/clothing/shoes/boots/bsing = 10, + /obj/item/clothing/under/ysing = 10, + /obj/item/clothing/shoes/boots/ysing = 10, + /obj/item/storage/daki = 50, + /obj/item/toy/katana = 15 + ) + + +/obj/machinery/vending/food + name = "Food-O-Mat" + desc = "A technological marvel, supposedly able to cook or mix a large variety of food or drink." + icon_state = "vend_food" + icon_deny = "vend_food-deny" + products = list( + /obj/item/tray = 8, + /obj/item/material/kitchen/utensil/fork = 6, + /obj/item/material/knife/plastic = 6, + /obj/item/material/kitchen/utensil/spoon = 6, + /obj/item/reagent_containers/food/snacks/tomatosoup = 8, + /obj/item/reagent_containers/food/snacks/mushroomsoup = 8, + /obj/item/reagent_containers/food/snacks/jellysandwich = 8, + /obj/item/reagent_containers/food/snacks/taco = 8, + /obj/item/reagent_containers/food/snacks/cheeseburger = 8, + /obj/item/reagent_containers/food/snacks/grilledcheese = 8, + /obj/item/reagent_containers/food/snacks/hotdog = 8, + /obj/item/reagent_containers/food/snacks/loadedbakedpotato = 8, + /obj/item/reagent_containers/food/snacks/omelette = 8, + /obj/item/reagent_containers/food/snacks/pastatomato = 8, + /obj/item/reagent_containers/food/snacks/tofuburger = 8, + /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza = 2, + /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza = 2, + /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita = 2, + /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza = 2, + /obj/item/reagent_containers/food/snacks/waffles = 4, + /obj/item/reagent_containers/food/snacks/muffin = 4, + /obj/item/reagent_containers/food/snacks/appletart = 4, + /obj/item/reagent_containers/food/snacks/sliceable/applecake = 2, + /obj/item/reagent_containers/food/snacks/sliceable/bananabread = 2, + /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread = 2, + /obj/item/reagent_containers/food/snacks/brainsnax = 5, + ) + contraband = list( + /obj/item/reagent_containers/food/snacks/mysterysoup = 10, + ) + vend_delay = 15 + +/obj/machinery/vending/food/arojoan //Fluff vendor for the lewd houseboat. + name = "Custom Food-O-Mat" + desc = "Do you think Joan cooks? Of course not. Lazy squirrel!" + icon_state = "vend_food" + icon_deny = "vend_food-deny" + products = list( + /obj/item/tray = 6, + /obj/item/material/kitchen/utensil/fork = 6, + /obj/item/material/knife/plastic = 6, + /obj/item/material/kitchen/utensil/spoon = 6, + /obj/item/reagent_containers/food/snacks/hotandsoursoup = 3, + /obj/item/reagent_containers/food/snacks/kitsuneudon = 3, + /obj/item/reagent_containers/food/snacks/generalschicken = 3, + /obj/item/reagent_containers/food/snacks/sliceable/sushi = 2, + /obj/item/reagent_containers/food/snacks/jellysandwich = 3, + /obj/item/reagent_containers/food/snacks/grilledcheese = 3, + /obj/item/reagent_containers/food/snacks/hotdog = 3, + /obj/item/storage/box/wings = 2, + /obj/item/reagent_containers/food/snacks/loadedbakedpotato = 3, + /obj/item/reagent_containers/food/snacks/omelette = 3, + /obj/item/reagent_containers/food/snacks/waffles = 3, + /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza = 1, + /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza = 1, + /obj/item/reagent_containers/food/snacks/appletart = 2, + /obj/item/reagent_containers/food/snacks/sliceable/applecake = 1, + /obj/item/reagent_containers/food/snacks/sliceable/bananabread = 2, + /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread = 2, + ) + contraband = list( + /obj/item/reagent_containers/food/snacks/mysterysoup = 10, + ) + vend_delay = 15 + +/obj/machinery/vending/mre + name = "MRE Vendor" + desc = "A technological marvel, supposedly able to cook or mix a large variety of food or drink." + icon_state = "mre" + icon_deny = "mre-deny" + products = list( + /obj/item/storage/single_use/mre = 8, + /obj/item/storage/single_use/mre/menu2 = 8, + /obj/item/storage/single_use/mre/menu3 = 8, + /obj/item/storage/single_use/mre/menu4 = 8, + /obj/item/storage/single_use/mre/menu5 = 8, + /obj/item/storage/single_use/mre/menu6 = 8, + /obj/item/storage/single_use/mre/menu7 = 8, + /obj/item/storage/single_use/mre/menu8 = 8, + /obj/item/storage/single_use/mre/menu9 = 8, + /obj/item/storage/single_use/mre/menu10 = 8, + ) + contraband = list( + /obj/item/storage/single_use/mre/menu11 = 4, + /obj/item/storage/single_use/mre/menu13 = 4, + /obj/item/storage/single_use/mre/menu12 = 1, + ) + price_default = 20 //You have to pay for it, as to prevent chef players from raging :) diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm new file mode 100644 index 00000000000..f7506da156b --- /dev/null +++ b/code/game/machinery/vending/vending.dm @@ -0,0 +1,598 @@ +/** + * A vending machine + */ +/obj/machinery/vending + name = "Vendomat" + desc = "A generic vending machine." + icon = 'icons/obj/vending.dmi' + icon_state = "generic" + anchored = TRUE + density = TRUE + // todo: temporary, as this is unbuildable + integrity_flags = INTEGRITY_INDESTRUCTIBLE + +//! ## Icons + /// Icon_state when vending. + var/icon_vend + /// Icon_state when denying access. + var/icon_deny + +//! ## Power + use_power = USE_POWER_IDLE + idle_power_usage = 10 + var/vend_power_usage = 150 //actuators and stuff + +//! ## Vending-related + /// No sales pitches if off! + var/active = TRUE + /// Are we ready to vend?? Is it time?? + var/vend_ready = TRUE + /// How long does it take to vend? + var/vend_delay = 1 SECOND + /// Bitmask of categories we're currently showing. + var/categories = CAT_NORMAL + /// What we're requesting payment for right now. + var/datum/stored_item/vending_product/currently_vending = null + /// Status screen messages like "insufficient funds", displayed in NanoUI. + var/status_message = "" + /// Set to TRUE if status_message is an error. + var/status_error = FALSE + + /** + * Variables used to initialize the product list + * These are used for initialization only, and so are optional if + * product_records is specified + */ + var/list/products = list() // For each, use the following pattern: + var/list/contraband = list() // list(/type/path = amount, /type/path2 = amount2) + var/list/premium = list() // No specified amount = only one in stock + var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price. + var/price_default = 0 + + /// List of vending_product items available. + var/list/product_records = list() + + + // Variables used to initialize advertising + /// String of slogans spoken out loud, separated by semicolons. + var/product_slogans = "" + /// String of small ad messages in the vending screen. + var/product_ads = "" + + var/list/ads_list = list() + + // Stuff relating vocalizations + var/list/slogan_list = list() + /// Set to true to silence it. + var/shut_up = TRUE + /// Thank you for shopping! + var/vend_reply + var/last_reply = FALSE + /// When did we last pitch? + var/last_slogan = 0 + /// How long until we can pitch again? + var/slogan_delay = 10 MINUTES + + // Things that can go wrong + /// Ignores if somebody doesn't have card access to that machine. + emagged = FALSE + /// Shock customers like an airlock. + var/seconds_electrified = 0 + /// Fire items at customers! We're broken! + var/shoot_inventory = FALSE + + var/scan_id = TRUE + var/obj/item/coin/coin + var/datum/wires/vending/wires = null + + var/list/log = list() + + /// Default access for checking logs is cargo. + var/req_log_access = ACCESS_SUPPLY_BAY + /// Defaults to 0, set to anything else for vendor to have logs. + var/has_logs = NONE + + +/obj/machinery/vending/Initialize(mapload) + . = ..() + wires = new(src) + spawn(4) + if(product_slogans) + slogan_list += splittext(product_slogans, ";") + + // So not all machines speak at the exact same time. + // The first time this machine says something will be at slogantime + this random value, + // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated. + last_slogan = world.time + rand(0, slogan_delay) + + if(product_ads) + ads_list += splittext(product_ads, ";") + + build_inventory() + power_change() + +/** + * Build produdct_records from the products lists + * + * products, contraband, premium, and prices allow specifying + * products that the vending machine is to carry without manually populating + * product_records. + */ +/obj/machinery/vending/proc/build_inventory() + var/list/all_products = list( + list(products, CAT_NORMAL), + list(contraband, CAT_HIDDEN), + list(premium, CAT_COIN)) + + for(var/current_list in all_products) + var/category = current_list[2] + + for(var/entry in current_list[1]) + var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry) + + product.price = (entry in prices) ? prices[entry] : price_default + product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 + product.category = category + + product_records.Add(product) + +/obj/machinery/vending/Destroy() + qdel(wires) + wires = null + qdel(coin) + coin = null + for(var/datum/stored_item/vending_product/R in product_records) + qdel(R) + product_records = null + return ..() + +/obj/machinery/vending/legacy_ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if(prob(50)) + qdel(src) + return + if(3.0) + if(prob(25)) + spawn(0) + malfunction() + return + return + else + return + +/obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + emagged = 1 + to_chat(user, "You short out \the [src]'s product lock.") + return 1 + +/obj/machinery/vending/attackby(obj/item/W, mob/user) + var/obj/item/card/id/I = W.GetID() + + if(currently_vending && GLOB.vendor_account && !GLOB.vendor_account.suspended) + var/paid = FALSE + var/handled = FALSE + + var/obj/item/paying_with = I || W + var/list/data = list() + var/amount = paying_with.attempt_use_currency(user, src, currently_vending.price, FALSE, NONE, data, FALSE, 7) + switch(amount) + if(PAYMENT_DYNAMIC_ERROR) + if(data[DYNAMIC_PAYMENT_DATA_FAIL_REASON]) + status_message = data[DYNAMIC_PAYMENT_DATA_FAIL_REASON] + status_error = TRUE + SSnanoui.update_uis(src) + return + if(PAYMENT_NOT_CURRENCY) + handled = FALSE + if(PAYMENT_INSUFFICIENT) + handled = TRUE + to_chat(user, SPAN_WARNING("That is not enough money!")) + else + handled = TRUE + paid = amount == currently_vending.price + + if(handled) + if(paid) + var/payer_name = "Unknown" + switch(data[DYNAMIC_PAYMENT_DATA_CURRENCY_TYPE]) + if(PAYMENT_TYPE_BANK_CARD) + var/datum/money_account/A = data[DYNAMIC_PAYMENT_DATA_BANK_ACCOUNT] + if(A) + payer_name = A.owner_name + else + payer_name = "(cash)" + credit_purchase(payer_name) + vend(currently_vending, usr) + SSnanoui.update_uis(src) + return // don't smack that machine with your 2 thalers + + if(I || istype(W, /obj/item/spacecash)) + attack_hand(user) + return + else if(W.is_screwdriver()) + panel_open = !panel_open + to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") + playsound(src, W.tool_sound, 50, 1) + cut_overlays() + if(panel_open) + add_overlay(image(icon, "[initial(icon_state)]-panel")) + + SSnanoui.update_uis(src) // Speaker switch is on the main UI, not wires UI + return + else if(istype(W, /obj/item/multitool) || W.is_wirecutter()) + if(panel_open) + attack_hand(user) + return + else if(istype(W, /obj/item/coin) && premium.len > 0) + if(!user.attempt_insert_item_for_installation(W, src)) + return + coin = W + categories |= CAT_COIN + to_chat(user, "You insert \the [W] into \the [src].") + SSnanoui.update_uis(src) + return + else if(W.is_wrench()) + playsound(src, W.tool_sound, 100, 1) + if(anchored) + user.visible_message("[user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("[user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + + if(do_after(user, 20 * W.tool_speed)) + if(!src) return + to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") + anchored = !anchored + return + else + + for(var/datum/stored_item/vending_product/R in product_records) + if(istype(W, R.item_path) && (W.name == R.item_name)) + stock(W, R, user) + return + ..() + +/obj/machinery/vending/query_transaction_details(list/data) + . = ..() + .[CHARGE_DETAIL_DEVICE] = name + .[CHARGE_DETAIL_LOCATION] = get_area(src).name + .[CHARGE_DETAIL_REASON] = currently_vending? "Purchase of [currently_vending.item_name]" : "Unknown" + .[CHARGE_DETAIL_RECIPIENT] = GLOB.vendor_account.owner_name + +/** + * Add money for current purchase to the vendor account. + * + * Called after the money has already been taken from the customer. + */ +/obj/machinery/vending/proc/credit_purchase(var/target as text) + GLOB.vendor_account.money += currently_vending.price + + var/datum/transaction/T = new() + T.target_name = target + T.purpose = "Purchase of [currently_vending.item_name]" + T.amount = "[currently_vending.price]" + T.source_terminal = name + T.date = GLOB.current_date_string + T.time = stationtime2text() + GLOB.vendor_account.transaction_log.Add(T) + +/obj/machinery/vending/attack_ai(mob/user as mob) + return attack_hand(user) + +/obj/machinery/vending/attack_hand(mob/user, list/params) + if(machine_stat & (BROKEN|NOPOWER)) + return + + if(seconds_electrified != 0) + if(shock(user, 100)) + return + + wires.Interact(user) + nano_ui_interact(user) + +/** + * Display the NanoUI window for the vending machine. + * + * See NanoUI documentation for details. + */ +/obj/machinery/vending/nano_ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + user.set_machine(src) + + var/list/data = list() + if(currently_vending) + data["mode"] = 1 + data["product"] = currently_vending.item_name + data["price"] = currently_vending.price + data["message_err"] = 0 + data["message"] = status_message + data["message_err"] = status_error + else + data["mode"] = 0 + var/list/listed_products = list() + + for(var/key = 1 to product_records.len) + var/datum/stored_item/vending_product/I = product_records[key] + + if(!(I.category & categories)) + continue + + listed_products.Add(list(list( + "key" = key, + "name" = I.item_name, + "price" = I.price, + "color" = I.display_color, + "amount" = I.get_amount()))) + + data["products"] = listed_products + + if(coin) + data["coin"] = coin.name + + if(panel_open) + data["panel"] = 1 + data["speaker"] = shut_up ? 0 : 1 + else + data["panel"] = 0 + + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "vending_machine.tmpl", name, 440, 600) + ui.set_initial_data(data) + ui.open() + +/obj/machinery/vending/Topic(href, href_list) + if(machine_stat & (BROKEN|NOPOWER)) + return + if(!IsAdminGhost(usr) && (usr.stat || usr.restrained())) + return + + if(href_list["remove_coin"] && !istype(usr,/mob/living/silicon)) + if(!coin) + to_chat(usr, "There is no coin in this machine.") + return + + coin.forceMove(src.loc) + if(!usr.get_active_held_item()) + usr.put_in_hands(coin) + to_chat(usr, "You remove \the [coin] from \the [src]") + coin = null + categories &= ~CAT_COIN + + if(IsAdminGhost(usr) || (usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) + if((href_list["vend"]) && (vend_ready) && (!currently_vending)) + if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH + to_chat(usr, "Access denied.") //Unless emagged of course + flick(icon_deny,src) + playsound(src.loc, 'sound/machines/deniedbeep.ogg', 50, 0) + return + + var/key = text2num(href_list["vend"]) + var/datum/stored_item/vending_product/R = product_records[key] + + // This should not happen unless the request from NanoUI was bad + if(!(R.category & categories)) + return + + if((R.price <= 0) || IsAdminGhost(usr)) + vend(R, usr) + else if(istype(usr,/mob/living/silicon)) //If the item is not free, provide feedback if a synth is trying to buy something. + to_chat(usr, "Lawed unit recognized. Lawed units cannot complete this transaction. Purchase canceled.") + return + else + currently_vending = R + if(!GLOB.vendor_account || GLOB.vendor_account.suspended) + status_message = "This machine is currently unable to process payments due to issues with the associated account." + status_error = 1 + else + status_message = "Please swipe a card or insert cash to pay for the item." + status_error = 0 + + else if(href_list["cancelpurchase"]) + currently_vending = null + + else if((href_list["togglevoice"]) && (panel_open)) + shut_up = !shut_up + + SSnanoui.update_uis(src) + +/obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user) + if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH + to_chat(usr, "Access denied.") //Unless emagged of course + flick(icon_deny,src) + playsound(src.loc, 'sound/machines/deniedbeep.ogg', 50, 0) + return + vend_ready = 0 //One thing at a time!! + status_message = "Vending..." + status_error = 0 + SSnanoui.update_uis(src) + + if(R.category & CAT_COIN) + if(!coin) + to_chat(user, "You need to insert a coin to get this item.") + return + if(coin.string_attached) + if(prob(50)) + to_chat(user, "You successfully pull the coin out before \the [src] could swallow it.") + else + to_chat(user, "You weren't able to pull the coin out fast enough, the machine ate it, string and all.") + qdel(coin) + coin = null + categories &= ~CAT_COIN + else + qdel(coin) + coin = null + categories &= ~CAT_COIN + + if(((last_reply + (vend_delay + 200)) <= world.time) && vend_reply) + spawn(0) + speak(vend_reply) + last_reply = world.time + + use_power(vend_power_usage) //actuators and stuff + if(icon_vend) //Show the vending animation if needed + flick(icon_vend,src) + spawn(vend_delay) + R.get_product(get_turf(src)) + if(has_logs) + do_logging(R, user, 1) + if(prob(1)) + sleep(3) + if(R.get_product(get_turf(src))) + visible_message("\The [src] clunks as it vends an additional item.") + + playsound(src, 'sound/items/vending.ogg', 50, 1, 1) + + status_message = "" + status_error = 0 + vend_ready = 1 + currently_vending = null + SSnanoui.update_uis(src) + + return 1 + +/obj/machinery/vending/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0) + if(user.GetIdCard()) + var/obj/item/card/id/tempid = user.GetIdCard() + var/list/list_item = list() + if(vending) + list_item += "vend" + else + list_item += "stock" + list_item += tempid.registered_name + list_item += stationtime2text() + list_item += R.item_name + log[++log.len] = list_item + +/obj/machinery/vending/proc/show_log(mob/user as mob) + if(user.GetIdCard()) + var/obj/item/card/id/tempid = user.GetIdCard() + if(req_log_access in tempid.GetAccess()) + var/datum/browser/popup = new(user, "vending_log", "Vending Log", 700, 500) + var/dat = "" + dat += "
[name] Vending Log
" + dat += "
Welcome [user.name]!

" + dat += "Below are the recent vending logs for your vending machine.
" + for(var/i in log) + dat += json_encode(i) + dat += ";
" + popup.set_content(dat) + popup.open() + else + to_chat(user,"You do not have the required access to view the vending logs for this machine.") + +/obj/machinery/vending/verb/check_logs() + set name = "Check Vending Logs" + set category = VERB_CATEGORY_OBJECT + set src in oview(1) + + show_log(usr) + +/** + * Add item to the machine + * + * Checks if item is vendable in this machine should be performed before + * calling. W is the item being inserted, R is the associated vending_product entry. + */ +/obj/machinery/vending/proc/stock(obj/item/W, var/datum/stored_item/vending_product/R, var/mob/user) + if(!user.attempt_insert_item_for_installation(W, src)) + return + + to_chat(user, "You insert \the [W] in the product receptor.") + R.add_product(W) + if(has_logs) + do_logging(R, user) + + SSnanoui.update_uis(src) + +/obj/machinery/vending/process(delta_time) + if(machine_stat & (BROKEN|NOPOWER)) + return + + if(!active) + return + + if(seconds_electrified > 0) + seconds_electrified-- + + //Pitch to the people! Really sell it! + if(((last_slogan + slogan_delay) <= world.time) && (slogan_list.len > 0) && (!shut_up) && prob(5)) + var/slogan = pick(slogan_list) + speak(slogan) + last_slogan = world.time + + if(shoot_inventory && prob(2)) + throw_item() + + return + +/obj/machinery/vending/proc/speak(message) + if(machine_stat & NOPOWER) + return + + if(!message) + return + + for(var/mob/O in hearers(src, null)) + O.show_message("\The [src] beeps, \"[message]\"",2) + return + +/obj/machinery/vending/power_change() + ..() + if(machine_stat & BROKEN) + icon_state = "[initial(icon_state)]-broken" + else + if(!(machine_stat & NOPOWER)) + icon_state = initial(icon_state) + else + spawn(rand(0, 15)) + icon_state = "[initial(icon_state)]-off" + +//Oh no we're malfunctioning! Dump out some product and break. +/obj/machinery/vending/proc/malfunction() + for(var/datum/stored_item/vending_product/R in product_records) + while(R.get_amount()>0) + R.get_product(loc) + break + + machine_stat |= BROKEN + icon_state = "[initial(icon_state)]-broken" + return + +//Somebody cut an important wire and now we're following a new definition of "pitch." +/obj/machinery/vending/proc/throw_item() + var/obj/throw_item = null + var/mob/living/target = locate() in view(7,src) + if(!target) + return 0 + + for(var/datum/stored_item/vending_product/R in product_records) + throw_item = R.get_product(loc) + if(!throw_item) + continue + break + if(!throw_item) + return 0 + spawn(0) + throw_item.throw_at_old(target, 16, 3, src) + visible_message("\The [src] launches \a [throw_item] at \the [target]!") + return 1 + +/* Template for creating new vendors + +/obj/machinery/vending/[vendors name here] // --vending machine template :) + name = "" + desc = "" + icon = '' + icon_state = "" + vend_delay = 15 + products = list() + contraband = list() + premium = list() + +*/ + + diff --git a/code/game/machinery/virtual_reality/ar_console.dm b/code/game/machinery/virtual_reality/ar_console.dm index 4b709393de5..50724b83125 100644 --- a/code/game/machinery/virtual_reality/ar_console.dm +++ b/code/game/machinery/virtual_reality/ar_console.dm @@ -40,7 +40,7 @@ /obj/machinery/vr_sleeper/alien/eject() set src in view(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index 44341a10dd4..aacdf43c547 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -120,7 +120,7 @@ /obj/machinery/vr_sleeper/verb/eject() set src in view(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject VR Capsule" if(usr.incapacitated()) @@ -136,7 +136,7 @@ /obj/machinery/vr_sleeper/verb/climb_in() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Enter VR Capsule" if(usr.incapacitated()) diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm index f64a6e866bd..e5f0c1197e9 100644 --- a/code/game/machinery/vitals_monitor.dm +++ b/code/game/machinery/vitals_monitor.dm @@ -133,7 +133,7 @@ /obj/machinery/vitals_monitor/verb/toggle_beep() set name = "Toggle Monitor Beeping" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) var/mob/user = usr diff --git a/code/game/machinery/vr_console.dm b/code/game/machinery/vr_console.dm index 6ae30bbb571..bb977527e02 100644 --- a/code/game/machinery/vr_console.dm +++ b/code/game/machinery/vr_console.dm @@ -82,7 +82,7 @@ /obj/machinery/vr_sleeper/verb/eject() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject VR Capsule" if(usr.incapacitated()) @@ -99,7 +99,7 @@ /obj/machinery/vr_sleeper/verb/climb_in() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Enter VR Capsule" if(usr.incapacitated()) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 3a51e757c4f..db2d8c8b4d2 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -27,7 +27,7 @@ /obj/machinery/washing_machine/verb/start() set name = "Start Washing" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(!istype(usr, /mob/living)) //ew ew ew usr, but it's the only way to check. @@ -60,7 +60,7 @@ /obj/machinery/washing_machine/verb/climb_out() set name = "Climb out" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr.loc sleep(20) diff --git a/code/game/mecha/equipment/tools/passenger.dm b/code/game/mecha/equipment/tools/passenger.dm index 6f44e5a0cce..285331ad228 100644 --- a/code/game/mecha/equipment/tools/passenger.dm +++ b/code/game/mecha/equipment/tools/passenger.dm @@ -103,7 +103,7 @@ #define OCCUPIED 2 /obj/mecha/proc/move_inside_passenger() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Enter Passenger Compartment" set src in oview(1) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index fc65bdce151..0b274a4ae47 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1791,7 +1791,7 @@ move_inside() /obj/mecha/verb/enter() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Enter Exosuit" set src in oview(1) move_inside() @@ -1942,7 +1942,7 @@ /* /obj/mecha/verb/force_eject() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Force Eject" set src in view(5) src.go_out() diff --git a/code/game/mecha/micro/micro_equipment.dm b/code/game/mecha/micro/micro_equipment.dm index 1e0f76cea70..be8a6a92216 100644 --- a/code/game/mecha/micro/micro_equipment.dm +++ b/code/game/mecha/micro/micro_equipment.dm @@ -199,7 +199,7 @@ /obj/item/mecha_parts/mecha_equipment/tool/orescoop/verb/empty_box() //so you can still get the ore out if someone detaches it from the mech set name = "Empty Ore compartment" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(!istype(usr, /mob/living/carbon/human)) //Only living, intelligent creatures with hands can empty ore boxes. diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 385aad2097b..8f96673b39a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -239,7 +239,7 @@ /obj/item/verb/move_to_top() set name = "Move To Top" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(!istype(src.loc, /turf) || usr.stat || usr.restrained() ) @@ -493,7 +493,7 @@ else playsound(A, 'sound/weapons/throwtap.ogg', 1, volume, -1) else - playsound(src, drop_sound, 30, preference = /datum/client_preference/drop_sounds) + playsound(src, drop_sound, 30) /obj/item/throw_land(atom/A, datum/thrownthing/TT) . = ..() @@ -506,7 +506,7 @@ /obj/item/verb/verb_pickup() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Pick up" if(!(usr)) //BS12 EDIT @@ -692,7 +692,7 @@ GLOBAL_LIST_EMPTY(blood_overlay_cache) /mob/living/carbon/verb/showoff() set name = "Show Held Item" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/obj/item/I = get_active_held_item() if(I && !(I.atom_flags & ATOM_ABSTRACT)) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 09414202d85..7faba817a15 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1128,7 +1128,7 @@ GLOBAL_LIST_EMPTY(PDAs) tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]"))) for(var/mob/M in GLOB.player_list) - if(M.stat == DEAD && M.client && (M.is_preference_enabled(/datum/client_preference/ghost_ears))) // src.client is so that ghosts don't have to listen to mice + if(M.stat == DEAD && M.client && (M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears))) // src.client is so that ghosts don't have to listen to mice if(istype(M, /mob/new_player)) continue if(M.forbid_seeing_deadchat) @@ -1210,7 +1210,7 @@ GLOBAL_LIST_EMPTY(PDAs) new_message = 1 /obj/item/pda/verb/verb_reset_pda() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Reset PDA" set src in usr @@ -1225,7 +1225,7 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(usr, "You cannot do this while restrained.") /obj/item/pda/verb/verb_remove_id() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Remove id" set src in usr @@ -1242,7 +1242,7 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/pda/verb/verb_remove_pen() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Remove pen" set src in usr @@ -1255,7 +1255,7 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(usr, "You cannot do this while restrained.") /obj/item/pda/verb/verb_remove_cartridge() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Remove cartridge" set src in usr diff --git a/code/game/objects/items/devices/communicator/UI_tgui.dm b/code/game/objects/items/devices/communicator/UI_tgui.dm index 60aaeb2f05c..aeb323f274d 100644 --- a/code/game/objects/items/devices/communicator/UI_tgui.dm +++ b/code/game/objects/items/devices/communicator/UI_tgui.dm @@ -373,7 +373,7 @@ im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text)) log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]", usr) for(var/mob/M in GLOB.player_list) - if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + if(M.stat == DEAD && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears)) if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) continue if(exonet.get_atom_from_address(their_address) == M) diff --git a/code/game/objects/items/devices/communicator/messaging.dm b/code/game/objects/items/devices/communicator/messaging.dm index d231a2941f3..d78d54c8556 100644 --- a/code/game/objects/items/devices/communicator/messaging.dm +++ b/code/game/objects/items/devices/communicator/messaging.dm @@ -146,7 +146,7 @@ exonet_messages.Add("To [chosen_communicator]:
[text_message]") log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src) for(var/mob/M in GLOB.player_list) - if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + if(M.stat == DEAD && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears)) if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) continue if(M == src) diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm index 19afd5eef28..a65364e3d81 100644 --- a/code/game/objects/items/devices/defib.dm +++ b/code/game/objects/items/devices/defib.dm @@ -109,7 +109,7 @@ /obj/item/defib_kit/verb/toggle_paddles() set name = "Toggle Paddles" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/mob/living/carbon/human/user = usr if(!paddles) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index a6fbc69d99e..ad47a2cfaff 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -62,7 +62,7 @@ /obj/item/flashlight/verb/toggle() set name = "Toggle Flashlight Brightness" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr set_brightness(usr) @@ -306,7 +306,7 @@ /obj/item/flashlight/lamp/verb/toggle_light() set name = "Toggle light" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(!usr.stat) diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm index 0469c6bdaa1..64f772bd026 100644 --- a/code/game/objects/items/devices/floor_painter.dm +++ b/code/game/objects/items/devices/floor_painter.dm @@ -119,7 +119,7 @@ /obj/item/floor_painter/verb/choose_colour() set name = "Choose Colour" set desc = "Choose a floor painter colour." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(usr.incapacitated()) @@ -132,7 +132,7 @@ /obj/item/floor_painter/verb/choose_decal() set name = "Choose Decal" set desc = "Choose a floor painter decal." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(usr.incapacitated()) @@ -146,7 +146,7 @@ /obj/item/floor_painter/verb/choose_direction() set name = "Choose Direction" set desc = "Choose a floor painter direction." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(usr.incapacitated()) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 310f2d4973f..2f477cd5164 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -97,7 +97,7 @@ /obj/item/megaphone/super/verb/turn_volume_dial() set name = "Change Volume" set desc = "Allows you to change the megaphone's volume." - set category = "Object" + set category = VERB_CATEGORY_OBJECT adjust_volume(usr) @@ -110,7 +110,7 @@ /obj/item/megaphone/super/verb/change_font() set name = "Change... Pronunciation?" set desc = "Allows you to change the megaphone's font." - set category = "Object" + set category = VERB_CATEGORY_OBJECT adjust_font(usr) @@ -123,7 +123,7 @@ /obj/item/megaphone/super/verb/change_color() set name = "Change... Tune?" set desc = "Allows you to change the megaphone's color." - set category = "Object" + set category = VERB_CATEGORY_OBJECT adjust_color(usr) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 310b2988846..b67926c6097 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -295,6 +295,8 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard) pai.update_action_buttons() /obj/item/paicard/proc/removePersonality() + if(pai) + pai.delete_all_holograms() QDEL_NULL(pai) pai = null cached_holo_image = null diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 1aa2c8dbea5..e217dc918c6 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/radio/beacon) /obj/item/radio/beacon/verb/alter_signal(t as text) set name = "Alter Beacon's Signal" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(CHECK_MOBILITY(usr, MOBILITY_CAN_MOVE)) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index f7c49691a13..cdc248f6f6c 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -835,7 +835,7 @@ GLOBAL_DATUM_INIT(virtual_announcer_ai, /mob/living/silicon/ai/announcer, new(nu /obj/item/bluespace_radio/verb/toggle_handset() set name = "Toggle Handset" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/mob/living/carbon/human/user = usr if(!handset) diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index b8f2560a9a5..8165600c4cb 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -33,7 +33,7 @@ /obj/item/camerabug/verb/reset() set name = "Reset camera bug" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(linkedmonitor) linkedmonitor.unpair(src) linkedmonitor = null diff --git a/code/game/objects/items/devices/tape_recorder/tape_recorder.dm b/code/game/objects/items/devices/tape_recorder/tape_recorder.dm index 90d2b459bd5..076367dc8a2 100644 --- a/code/game/objects/items/devices/tape_recorder/tape_recorder.dm +++ b/code/game/objects/items/devices/tape_recorder/tape_recorder.dm @@ -205,7 +205,7 @@ /obj/item/tape_recorder/verb/playback_memory() set name = "Playback Tape" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -257,7 +257,7 @@ /obj/item/tape_recorder/verb/eject() set name = "Eject Tape" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -337,7 +337,7 @@ /obj/item/tape_recorder/verb/record() set name = "Start Recording" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -345,7 +345,7 @@ /obj/item/tape_recorder/verb/stop() set name = "Stop" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -355,7 +355,7 @@ /obj/item/tape_recorder/verb/wipe_tape() set name = "Wipe Tape" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -376,7 +376,7 @@ /obj/item/tape_recorder/verb/print_transcript() set name = "Print Transcript" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 508d252ec86..3a38f6b4f22 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -67,7 +67,7 @@ /obj/item/tape_recorder/verb/eject() set name = "Eject Tape" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -138,7 +138,7 @@ /obj/item/tape_recorder/verb/record() set name = "Start Recording" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -193,7 +193,7 @@ /obj/item/tape_recorder/verb/stop() set name = "Stop" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -211,7 +211,7 @@ /obj/item/tape_recorder/verb/wipe_tape() set name = "Wipe Tape" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -234,7 +234,7 @@ /obj/item/tape_recorder/verb/playback_memory() set name = "Playback Tape" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return @@ -306,7 +306,7 @@ /obj/item/tape_recorder/verb/print_transcript() set name = "Print Transcript" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.incapacitated()) return diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 401ab578fcb..02331f9744d 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -13,7 +13,7 @@ /obj/item/hailer/verb/set_message() set name = "Set Hailer Message" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Alter the message shouted by your hailer." if(!isnull(insults)) diff --git a/code/game/objects/items/godfigures.dm b/code/game/objects/items/godfigures.dm index dc1f8fa2fba..c2e1f7f3104 100644 --- a/code/game/objects/items/godfigures.dm +++ b/code/game/objects/items/godfigures.dm @@ -54,7 +54,7 @@ /obj/item/godfig/verb/rename_fig() set name = "Name Figure" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Rename your icon." var/mob/M = usr @@ -223,7 +223,7 @@ /* /obj/item/godfig/verb/resprite_figure() set name = "Customize Figure" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Click to choose an appearance for your icon." var/mob/M = usr diff --git a/code/game/objects/items/id_cards/cards.dm b/code/game/objects/items/id_cards/cards.dm index 4ce9ce5d66d..62997abe8a8 100644 --- a/code/game/objects/items/id_cards/cards.dm +++ b/code/game/objects/items/id_cards/cards.dm @@ -57,7 +57,7 @@ /obj/item/card/data/verb/label(t as text) set name = "Label Disk" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if (t) diff --git a/code/game/objects/items/id_cards/station_ids.dm b/code/game/objects/items/id_cards/station_ids.dm index 983bdb1a54b..176cc5e9de8 100644 --- a/code/game/objects/items/id_cards/station_ids.dm +++ b/code/game/objects/items/id_cards/station_ids.dm @@ -162,7 +162,7 @@ /obj/item/card/id/verb/read() set name = "Read ID Card" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr to_chat(usr, "[icon2html(thing = src, target = usr)] [src.name]: The current assignment on the card is [src.assignment].") @@ -360,7 +360,7 @@ /obj/item/card/id/prisoner name = "Prisoner ID card" - desc = "A card repressenting incareration. Do not lose." + desc = "A card representing someone's incarceration. Do not lose." icon_state = "civilian-id" assignment = "Prisoner" primary_color = rgb(243, 97, 0) @@ -369,7 +369,7 @@ var/points = 0 var/served = 0 //Time served in seconds - var/sentence = 0 //Sentance in minutes + var/sentence = 0 //Sentence in minutes var/crime = "\[redacted\]" job_access_type = null @@ -387,7 +387,7 @@ update_name(registered_name, assignment) playsound(loc, 'sound/machines/ping.ogg', 50, 1) if(isliving(loc)) - to_chat(loc, "\the [src] buzzes: You have served your sentence! You may now exit prison through the turnstiles and collect your belongings.") + to_chat(loc, "\The [src] buzzes: You have served your sentence! You may now exit prison through the turnstiles and collect your belongings.") STOP_PROCESSING(SSprocessing, src) else served += 1 @@ -398,13 +398,13 @@ var/minutesServed = round(served / 60) var/secondsServed = served - (minutesServed * 60) if(sentence <= 0) - to_chat(usr, "You are serving a permanent sentence for [crime].") + . += "\nYou are serving a permanent sentence for [crime]." else if(served >= (sentence * 60)) - to_chat(usr, "You have served your sentence for [crime].") + . += "\nYou have served your sentence for [crime]." else - to_chat(usr, "You have served [minutesServed] minutes [secondsServed] seconds of your [sentence] minute sentance for [crime].") + . += "\nYou have served [minutesServed] minutes [secondsServed] seconds of your [sentence] minute sentence for [crime]." if(goal > 0) - to_chat(usr, "You have accumulated [points] out of the [goal] points you need for freedom.") + . += "\nYou have accumulated [points] out of the [goal] points you need for freedom." diff --git a/code/game/objects/items/scanners/biology.dm b/code/game/objects/items/scanners/biology.dm index 1baffbd71d8..15dfdfbb12b 100644 --- a/code/game/objects/items/scanners/biology.dm +++ b/code/game/objects/items/scanners/biology.dm @@ -6,7 +6,7 @@ /obj/item/biology_analyzer/proc/print_report_verb() set name = "Print Plant Report" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src = usr if(usr.stat || usr.restrained() || usr.lying) diff --git a/code/game/objects/items/scanners/health.dm b/code/game/objects/items/scanners/health.dm index 01754f56c30..a5a907d2b98 100644 --- a/code/game/objects/items/scanners/health.dm +++ b/code/game/objects/items/scanners/health.dm @@ -275,7 +275,7 @@ /obj/item/healthanalyzer/verb/toggle_mode() set name = "Switch Verbosity" - set category = "Object" + set category = VERB_CATEGORY_OBJECT mode = !mode switch (mode) @@ -286,7 +286,7 @@ /obj/item/healthanalyzer/proc/toggle_adv() set name = "Toggle Advanced Scan" - set category = "Object" + set category = VERB_CATEGORY_OBJECT showadvscan = !showadvscan switch (showadvscan) diff --git a/code/game/objects/items/scanners/plant.dm b/code/game/objects/items/scanners/plant.dm index a06add08026..cfb901f01a5 100644 --- a/code/game/objects/items/scanners/plant.dm +++ b/code/game/objects/items/scanners/plant.dm @@ -101,7 +101,7 @@ /obj/item/plant_analyzer/proc/print_report_verb() set name = "Print Plant Report" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src = usr if(usr.stat || usr.restrained() || usr.lying) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index c8853d0b68c..6b5652a0277 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -518,7 +518,7 @@ /obj/item/storage/backpack/parachute/verb/pack_parachute() set name = "Pack/Unpack Parachute" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(src.loc, /mob/living)) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 2fbbec5b7f5..37aa5851254 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -16,7 +16,7 @@ /obj/item/storage/belt/verb/toggle_layer() set name = "Switch Belt Layer" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(show_above_suit == -1) to_chat(usr, SPAN_NOTICE("\The [src] cannot be worn above your suit!")) diff --git a/code/game/objects/items/storage/medical/firstaid.dm b/code/game/objects/items/storage/medical/firstaid.dm index 1d6f1bc4a34..74be1b9dc19 100644 --- a/code/game/objects/items/storage/medical/firstaid.dm +++ b/code/game/objects/items/storage/medical/firstaid.dm @@ -218,7 +218,7 @@ /obj/item/storage/pill_bottle/proc/choose_color() set name = "Recolor bottle" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Click to choose a color for the pill bottle." var/mob/M = usr diff --git a/code/game/objects/items/storage/quickdraw.dm b/code/game/objects/items/storage/quickdraw.dm index b60e8caff1a..11575db69b7 100644 --- a/code/game/objects/items/storage/quickdraw.dm +++ b/code/game/objects/items/storage/quickdraw.dm @@ -38,7 +38,7 @@ // /obj/item/storage/quickdraw/verb/toggle_quickdraw() // set name = "Switch Quickdraw Mode" -// set category = "Object" +// set category = VERB_CATEGORY_OBJECT // quickmode = !quickmode // switch (quickmode) diff --git a/code/game/objects/items/storage/single_use/mre.dm b/code/game/objects/items/storage/single_use/mre.dm index 67534ef1f12..c98c942db77 100644 --- a/code/game/objects/items/storage/single_use/mre.dm +++ b/code/game/objects/items/storage/single_use/mre.dm @@ -22,6 +22,7 @@ MRE Stuff ) /obj/item/storage/single_use/mre/menu2 + name = "MRE - Menu 2" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package. This one is menu 2, margherita." starts_with = list( /obj/item/storage/single_use/mrebag/menu2, @@ -36,6 +37,7 @@ MRE Stuff ) /obj/item/storage/single_use/mre/menu3 + name = "MRE - Menu 3" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package. This one is menu 3, vegetable pizza." starts_with = list( /obj/item/storage/single_use/mrebag/menu3, @@ -50,6 +52,7 @@ MRE Stuff ) /obj/item/storage/single_use/mre/menu4 + name = "MRE - Menu 4" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package. This one is menu 4, hamburger." starts_with = list( /obj/item/storage/single_use/mrebag/menu4, @@ -64,6 +67,7 @@ MRE Stuff ) /obj/item/storage/single_use/mre/menu5 + name = "MRE - Menu 5" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package. This one is menu 5, taco." starts_with = list( /obj/item/storage/single_use/mrebag/menu5, @@ -78,6 +82,7 @@ MRE Stuff ) /obj/item/storage/single_use/mre/menu6 + name = "MRE - Menu 6" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package. This one is menu 6, meatbread." starts_with = list( /obj/item/storage/single_use/mrebag/menu6, @@ -92,6 +97,7 @@ MRE Stuff ) /obj/item/storage/single_use/mre/menu7 + name = "MRE - Menu 7" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package. This one is menu 7, salad." starts_with = list( /obj/item/storage/single_use/mrebag/menu7, @@ -106,6 +112,7 @@ MRE Stuff ) /obj/item/storage/single_use/mre/menu8 + name = "MRE - Menu 8" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package. This one is menu 8, hot chili." starts_with = list( /obj/item/storage/single_use/mrebag/menu8, @@ -260,6 +267,5 @@ MRE Stuff /obj/item/storage/single_use/mrebag/dessert/menu9 starts_with = list(/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit) - /obj/item/storage/single_use/mrebag/dessert/menu11 starts_with = list(/obj/item/pen/crayon/rainbow) diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index d447f80218c..958ca476661 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -111,7 +111,7 @@ /obj/item/storage/wallet/poly/verb/change_color() set name = "Change Wallet Color" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Change the color of the wallet." set src in usr diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index e2b7fb48f5c..794faedf935 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -988,7 +988,7 @@ /obj/item/toy/plushie/verb/rename_plushie() set name = "Name Plushie" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Give your plushie a cute name!" var/mob/M = usr if(!M.mind) diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index 85e382fb8f2..937fa123221 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -74,7 +74,7 @@ chemtraces += V /obj/item/autopsy_scanner/verb/print_data() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(usr, 1) set name = "Print Data" if(usr.stat || !(istype(usr,/mob/living/carbon/human))) diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index fdf177025f0..fe80c61ab87 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -141,7 +141,7 @@ /obj/machinery/implantchair/verb/get_out() set name = "Eject occupant" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0) return @@ -152,7 +152,7 @@ /obj/machinery/implantchair/verb/move_inside() set name = "Move Inside" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != 0 || machine_stat & (NOPOWER|BROKEN)) return diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index ad4ae9d4a72..fee012d365e 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -19,7 +19,7 @@ update() /obj/item/implanter/verb/remove_implant(var/mob/user) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Remove Implant" set src in usr diff --git a/code/game/objects/items/weapons/implants/implantreagent_vr.dm b/code/game/objects/items/weapons/implants/implantreagent_vr.dm index e3f4ae3f482..e192a0fd164 100644 --- a/code/game/objects/items/weapons/implants/implantreagent_vr.dm +++ b/code/game/objects/items/weapons/implants/implantreagent_vr.dm @@ -62,7 +62,7 @@ /mob/living/carbon/human/proc/use_reagent_implant() set name = "Transfer From Reagent Implant" set desc = "Remove reagents from am internal reagent into a container." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) do_reagent_implant(usr) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 351c4e94be4..e2accf4da19 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -35,13 +35,13 @@ /obj/item/tank/jetpack/verb/toggle_rockets() set name = "Toggle Jetpack Stabilization" - set category = "Object" + set category = VERB_CATEGORY_OBJECT stabilization_on = !( stabilization_on ) to_chat(usr, "You toggle the stabilization [stabilization_on? "on":"off"].") /obj/item/tank/jetpack/verb/toggle() set name = "Toggle Jetpack" - set category = "Object" + set category = VERB_CATEGORY_OBJECT on = !on if(on) diff --git a/code/game/objects/structures/crates_lockers/__closet.dm b/code/game/objects/structures/crates_lockers/__closet.dm index 312de858b47..8a5aa5a5d50 100644 --- a/code/game/objects/structures/crates_lockers/__closet.dm +++ b/code/game/objects/structures/crates_lockers/__closet.dm @@ -420,7 +420,7 @@ /obj/structure/closet/verb/verb_togglelock() set src in oview(1) // One square distance - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Toggle Lock" if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) // Don't use it if you're not able to! Checks for stuns, ghost and restrain @@ -445,7 +445,7 @@ /obj/structure/closet/verb/verb_toggleopen() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Toggle Open" if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index b622c843d61..e7e320a3236 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -161,7 +161,7 @@ /obj/structure/closet/fireaxecabinet/verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri set name = "Open/Close" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (isrobot(usr) || src.locked || src.smashed) @@ -176,7 +176,7 @@ /obj/structure/closet/fireaxecabinet/verb/remove_fire_axe() set name = "Remove Fire Axe" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (isrobot(usr)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 741f930efdb..24ea0ce03cf 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -73,7 +73,7 @@ /obj/structure/closet/secure_closet/personal/verb/reset() set src in oview(1) // One square distance - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Reset Lock" if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) // Don't use it if you're not able to! Checks for stuns, ghost and restrain diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 258fc80a918..cb54ee6530f 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -189,7 +189,7 @@ /obj/structure/closet/crate/secure/verb_togglelock() set src in oview(1) // One square distance - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Toggle Lock" if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) // Don't use it if you're not able to! Checks for stuns, ghost and restrain diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index d41885f16cb..36d20189f75 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -24,7 +24,7 @@ /obj/structure/bed/chair/e_chair/verb/toggle() set name = "Toggle Electric Chair" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(on) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index bc90ef27228..5b21c9d390d 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -137,7 +137,7 @@ /obj/structure/fireaxecabinet/verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri set name = "Open/Close" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if (isrobot(usr) || locked || smashed) if(locked) @@ -151,7 +151,7 @@ /obj/structure/fireaxecabinet/verb/remove_fire_axe() set name = "Remove Fire Axe" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if (isrobot(usr)) return diff --git a/code/game/objects/structures/gravemarker.dm b/code/game/objects/structures/gravemarker.dm index 93c06de3cdc..9b434772aab 100644 --- a/code/game/objects/structures/gravemarker.dm +++ b/code/game/objects/structures/gravemarker.dm @@ -85,7 +85,7 @@ /obj/structure/gravemarker/verb/rotate_clockwise() set name = "Rotate Grave Marker Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(anchored) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 9a9665a2459..1622e5da57c 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -50,7 +50,7 @@ /obj/structure/inflatable/verb/hand_deflate() set name = "Deflate" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(isobserver(usr) || usr.restrained() || !usr.Adjacent(src)) diff --git a/code/game/objects/structures/medical_stand_vr.dm b/code/game/objects/structures/medical_stand_vr.dm index 2fb5f1f0f6e..0eed1c210f1 100644 --- a/code/game/objects/structures/medical_stand_vr.dm +++ b/code/game/objects/structures/medical_stand_vr.dm @@ -221,7 +221,7 @@ update_icon() /obj/structure/medical_stand/verb/toggle_mode() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Toggle IV Mode" set src in view(1) @@ -237,7 +237,7 @@ /obj/structure/medical_stand/verb/set_APTFT() set name = "Set IV transfer amount" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in range(1) var/N = input("Amount per transfer from this:","[src]") as null|anything in transfer_amounts if(N) diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 2321c53e56e..e988470c54c 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -124,7 +124,7 @@ /obj/structure/railing/verb/rotate_counterclockwise() set name = "Rotate Railing Counter-Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.incapacitated()) @@ -143,7 +143,7 @@ /obj/structure/railing/verb/rotate_clockwise() set name = "Rotate Railing Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.incapacitated()) @@ -162,7 +162,7 @@ /obj/structure/railing/verb/flip() // This will help push railing to remote places, such as open space turfs set name = "Flip Railing" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.incapacitated()) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index ba7df78018d..26cece5c48f 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -158,7 +158,7 @@ /obj/structure/bed/chair/verb/rotate_clockwise() set name = "Rotate Chair Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(!usr || !isturf(usr.loc)) diff --git a/code/game/objects/structures/tables/flipping.dm b/code/game/objects/structures/tables/flipping.dm index 1f5f41ead03..6e4f4ff8a76 100644 --- a/code/game/objects/structures/tables/flipping.dm +++ b/code/game/objects/structures/tables/flipping.dm @@ -81,7 +81,7 @@ /obj/structure/table/verb/do_flip() set name = "Flip table" set desc = "Flips a non-reinforced table" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (!can_touch(usr) || ismouse(usr)) @@ -97,7 +97,7 @@ /obj/structure/table/proc/do_put() set name = "Put table back" set desc = "Puts flipped table back" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (!can_touch(usr)) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 077ea0bde9d..c5c1968e6ae 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -252,7 +252,7 @@ //Rotates the windoor assembly clockwise /obj/structure/windoor_assembly/verb/rotate_clockwise() set name = "Rotate Windoor Assembly Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored) @@ -272,7 +272,7 @@ //Flips the windoor assembly, determines whather the door opens to the left or the right /obj/structure/windoor_assembly/verb/flip() set name = "Flip Windoor Assembly" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(src.facing == "l") diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 0fa304773dc..ad312448ed6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -453,7 +453,7 @@ /obj/structure/window/verb/rotate_counterclockwise() set name = "Rotate Counterclockwise" // Temporary fix until someone more intelligent figures out how to add proper rotation verbs to the panels - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (usr.incapacitated()) @@ -471,7 +471,7 @@ /obj/structure/window/verb/rotate_clockwise() set name = "Rotate Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (usr.incapacitated()) diff --git a/code/game/rendering/legacy/hud.dm b/code/game/rendering/legacy/hud.dm index f25e70190c7..38e5dfcf95f 100644 --- a/code/game/rendering/legacy/hud.dm +++ b/code/game/rendering/legacy/hud.dm @@ -251,11 +251,13 @@ GLOBAL_DATUM_INIT(global_hud, /datum/global_hud, new) /datum/hud/proc/instantiate() - if(!ismob(mymob)) return 0 - if(!mymob.client) return 0 - ui_style = ui_style2icon(mymob.client.prefs.UI_style) - ui_color = mymob.client.prefs.UI_style_color - ui_alpha = mymob.client.prefs.UI_style_alpha + if(!ismob(mymob)) + return 0 + if(!mymob.client) + return 0 + ui_style = ui_style2icon(mymob.get_preference_entry(/datum/game_preference_entry/dropdown/hud_style)) + ui_color = mymob.get_preference_entry(/datum/game_preference_entry/simple_color/hud_color) + ui_alpha = mymob.get_preference_entry(/datum/game_preference_entry/number/hud_alpha) if(ishuman(mymob)) human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences diff --git a/code/game/rendering/legacy/human.dm b/code/game/rendering/legacy/human.dm index 052964f4aaa..b1158856be7 100644 --- a/code/game/rendering/legacy/human.dm +++ b/code/game/rendering/legacy/human.dm @@ -382,7 +382,7 @@ /mob/living/carbon/human/verb/toggle_hotkey_verbs() - set category = "OOC" + set category = VERB_CATEGORY_OOC set name = "Toggle hotkey buttons" set desc = "This disables or enables the user interface buttons which can be used with hotkeys." diff --git a/code/game/rendering/parallax/parallax_holder.dm b/code/game/rendering/parallax/parallax_holder.dm index e018f065419..e27a152e78b 100644 --- a/code/game/rendering/parallax/parallax_holder.dm +++ b/code/game/rendering/parallax/parallax_holder.dm @@ -164,7 +164,7 @@ if(QDELETED(C)) return . = list() - if(C.is_preference_enabled(/datum/client_preference/parallax)) + if(C.get_preference_entry(/datum/game_preference_entry/toggle/parallax)) for(var/atom/movable/screen/parallax_layer/L in layers) // if(L.parallax_intensity > owner.prefs.parallax) // continue diff --git a/code/game/rendering/plane_masters/plane_holder.dm b/code/game/rendering/plane_masters/plane_holder.dm index eb34d3c92fd..fcdc77f1b4e 100644 --- a/code/game/rendering/plane_masters/plane_holder.dm +++ b/code/game/rendering/plane_masters/plane_holder.dm @@ -70,7 +70,7 @@ CRASH("invalid fetch") /datum/plane_holder/proc/sync_owner(client/C) - set_fake_ambient_occlusion(C.is_preference_enabled(/datum/client_preference/ambient_occlusion)) + set_fake_ambient_occlusion(C.get_preference_entry(/datum/game_preference_entry/toggle/ambient_occlusion)) /datum/plane_holder/proc/set_fake_ambient_occlusion(enabled) return diff --git a/code/game/response_team.dm b/code/game/response_team.dm index c4a3a55a393..0761a4b5ec2 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -40,7 +40,7 @@ var/silent_ert = 0 /client/verb/JoinResponseTeam() set name = "Join Response Team" - set category = "IC" + set category = VERB_CATEGORY_IC if(!MayRespawn(1)) to_chat(usr, "You cannot join the response team at this time.") diff --git a/code/game/sound.dm b/code/game/sound.dm index 5357cf4c6ea..f05434c775d 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -93,7 +93,7 @@ GLOBAL_VAR_INIT(sound_distance_offscreen, 7) if(ear_deaf > 0) return - if(preference && !client.is_preference_enabled(preference)) + if(preference && !client.get_preference_toggle(preference)) return if(!S) @@ -197,7 +197,7 @@ GLOBAL_VAR_INIT(sound_distance_offscreen, 7) /client/proc/playtitlemusic() if(!SSticker || !SSmedia_tracks.lobby_tracks.len || !media) return - if(is_preference_enabled(/datum/client_preference/play_lobby_music)) + if(get_preference_toggle(/datum/game_preference_toggle/music/lobby)) var/datum/media_track/T = pick(SSmedia_tracks.lobby_tracks) media.push_music(T.url, world.time, 0.85) to_chat(src,"Lobby music: [T.title] by [T.artist].") diff --git a/code/game/verbs/advanced_who.dm b/code/game/verbs/advanced_who.dm index a0359f7f56b..d60a7a51dba 100644 --- a/code/game/verbs/advanced_who.dm +++ b/code/game/verbs/advanced_who.dm @@ -3,7 +3,7 @@ /client/verb/who_advanced() set name = "Advanced Who" - set category = "OOC" + set category = VERB_CATEGORY_OOC var/msg = "Current Players:\n" @@ -68,7 +68,7 @@ entry += "[C.holder.fakekey]" else entry += "[C.key]" - if(C.is_preference_enabled(/datum/client_preference/show_in_advanced_who)) + if(C.get_preference_toggle(/datum/game_preference_toggle/presence/show_advanced_who)) if(isobserver(C.mob)) entry += " - Observing" else if(istype(C.mob, /mob/new_player)) diff --git a/code/game/verbs/character_directory.dm b/code/game/verbs/character_directory.dm index 8313016a25d..3bda5b602a2 100644 --- a/code/game/verbs/character_directory.dm +++ b/code/game/verbs/character_directory.dm @@ -2,7 +2,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) /client/verb/show_character_directory() set name = "Character Directory" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Shows a listing of all active characters, along with their associated OOC notes, flavor text, and more." // This is primarily to stop malicious users from trying to lag the server by spamming this verb diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm index be565f390ec..4e7c315bb53 100644 --- a/code/game/verbs/ignore.dm +++ b/code/game/verbs/ignore.dm @@ -1,6 +1,6 @@ /client/verb/ignore(key_to_ignore as text) set name = "Ignore" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Makes OOC and Deadchat messages from a specific player not appear to you." if(!key_to_ignore) @@ -20,7 +20,7 @@ /client/verb/unignore(key_to_unignore as text) set name = "Unignore" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Reverts your ignoring of a specific player." if(!key_to_unignore) diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index de22149cab4..722dc6b2d5a 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -152,17 +152,3 @@ adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) update_health() -/mob/living/silicon/pai/verb/suicide() - set category = "pAI Commands" - set desc = "Kill yourself and become a ghost (You will receive a confirmation prompt)" - set name = "pAI Suicide" - var/answer = input("REALLY kill yourself? This action can't be undone.", "Suicide", "No") in list ("Yes", "No") - if(answer == "Yes") - var/obj/item/paicard/card = loc - card.removePersonality() - var/turf/T = get_turf_or_move(card.loc) - for (var/mob/M in viewers(T)) - M.show_message("[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"", 3, "[src] bleeps electronically.", 2) - death(0) - else - to_chat(src, "Aborting suicide attempt.") diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 3a9f73e3bfc..c1491171b5c 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -3,7 +3,7 @@ /client/verb/who() set name = "Who" - set category = "OOC" + set category = VERB_CATEGORY_OOC var/msg = "Current Players:\n" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 977ebb2d1f4..9090799bf10 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -12,12 +12,13 @@ var/global/floorIsLava = 0 confidential = TRUE) /proc/msg_admin_attack(var/text) //Toggleable Attack Messages - var/rendered = "ATTACK: [text]" - for(var/client/C in GLOB.admins) - if((R_ADMIN|R_MOD) & C.holder.rights) - if(C.is_preference_enabled(/datum/client_preference/mod/show_attack_logs)) - var/msg = rendered - to_chat(C, msg) + return + // var/rendered = "ATTACK: [text]" + // for(var/client/C in GLOB.admins) + // if((R_ADMIN|R_MOD) & C.holder.rights) + // if(C.get_preference_toggle(/datum/client_preference/mod/show_attack_logs)) + // var/msg = rendered + // to_chat(C, msg) /proc/admin_notice(var/message, var/rights) for(var/mob/M in GLOB.mob_list) @@ -66,7 +67,6 @@ var/global/floorIsLava = 0 Mob type: [M.type]
Inactivity time: [M.client ? "[M.client.inactivity/600] minutes" : "Logged out"]

Kick | - Warn | Ban | Jobban | [is_role_banned_ckey(M.ckey, role = BAN_ROLE_OOC)? "OOC Ban" : "OOC Ban"] | @@ -1561,7 +1561,7 @@ datum/admins/var/obj/item/paper/admin/faxreply // var to hold fax replies in if(!isobserver(owner.mob)) return var/mob/observer/dead/dead = owner.mob - var/stealthghost = owner.is_preference_enabled(/datum/client_preference/holder/stealth_ghost_mode) + var/stealthghost = owner.get_preference_toggle(/datum/game_preference_toggle/admin/stealth_hides_ghost) if(!stealthghost || !fakekey) dead.invisibility = initial(dead.invisibility) dead.alpha = initial(dead.alpha) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 4d599cb6551..cb878a2e71b 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -30,7 +30,6 @@ var/list/admin_verbs_admin = list( /datum/admins/proc/announce, //priority announce something to all clients., /datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement, /datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange, - /client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc, /client/proc/admin_ghost, //allows us to ghost/reenter body at will, /client/proc/toggle_view_range, //changes how far we can see, /client/proc/cmd_admin_pm_context, //right-click adminPM interface, @@ -99,8 +98,6 @@ var/list/admin_verbs_admin = list( /client/proc/change_security_level, /client/proc/view_chemical_reaction_logs, /client/proc/makePAI, - /client/proc/toggle_debug_logs, - /client/proc/toggle_attack_logs, /datum/admins/proc/paralyze_mob, /client/proc/fixatmos, /datum/admins/proc/quick_nif, @@ -231,7 +228,6 @@ var/list/admin_verbs_debug = list( /client/proc/jumptomob, /client/proc/jumptocoord, /client/proc/dsay, - /client/proc/toggle_debug_logs, /client/proc/admin_ghost, //allows us to ghost/reenter body at will, /datum/admins/proc/view_runtimes, /client/proc/show_gm_status, @@ -268,7 +264,6 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/toggleenter, /datum/admins/proc/toggleguests, /datum/admins/proc/announce, - /client/proc/colorooc, /client/proc/admin_ghost, /client/proc/toggle_view_range, /client/proc/cmd_admin_subtle_message, @@ -352,7 +347,6 @@ var/list/admin_verbs_mod = list( /client/proc/check_antagonists, /client/proc/aooc, /client/proc/jobbans, - /client/proc/toggle_attack_logs, /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', /client/proc/cmd_admin_icsubtle_message, /datum/admins/proc/paralyze_mob, @@ -590,21 +584,6 @@ var/list/admin_verbs_event_manager = list( if (holder) holder.Secrets() feedback_add_details("admin_verb","S") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - -/client/proc/colorooc() - set category = "Fun" - set name = "OOC Text Color" - if(!holder) return - var/response = alert(src, "Please choose a distinct color that is easy to read and doesn't mix with all the other chat and radio frequency colors.", "Change own OOC color", "Pick new color", "Reset to default", "Cancel") - if(response == "Pick new color") - prefs.ooccolor = input(src, "Please select your OOC colour.", "OOC colour") as color - else if(response == "Reset to default") - prefs.ooccolor = initial(prefs.ooccolor) - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return /client/proc/findStealthKey(txt) if(txt) @@ -648,48 +627,6 @@ var/list/admin_verbs_event_manager = list( message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1) feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -#define MAX_WARNS 3 -#define AUTOBANTIME 10 - -/client/proc/warn(warned_ckey) - if(!check_rights(R_ADMIN)) return - - if(!warned_ckey || !istext(warned_ckey)) return - if(warned_ckey in admin_datums) - to_chat(usr, "Error: warn(): You can't warn admins.") - return - - var/datum/preferences/D - var/client/C = GLOB.directory[warned_ckey] - if(C) D = C.prefs - else D = GLOB.preferences_datums[warned_ckey] - - if(!D) - to_chat(src, "Error: warn(): No such ckey found.") - return - - if(++D.warns >= MAX_WARNS) //uh ohhhh...you'reee iiiiin trouuuubble O:) - ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [AUTOBANTIME] minute autoban.") - if(C) - message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.") - to_chat(C, "You have been autobanned due to a warning by [ckey].
This is a temporary ban, it will be removed in [AUTOBANTIME] minutes.
") - del(C) - else - message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.") - AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, AUTOBANTIME) - feedback_inc("ban_warn",1) - else - if(C) - to_chat(C, "You have been formally warned by an administrator.
Further warnings will result in an autoban.
") - message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.") - else - message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.") - - feedback_add_details("admin_verb","WARN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -#undef MAX_WARNS -#undef AUTOBANTIME - /client/proc/drop_bomb() // Some admin dickery that can probably be done better -- TLE set category = "Special Verbs" set name = "Drop Bomb" @@ -1137,9 +1074,3 @@ var/list/admin_verbs_event_manager = list( popup.set_content(dat.Join("")) popup.open() -/client/verb/stop_client_sounds() - set name = "Stop Sounds" - set category = "Preferences" - set desc = "Stop Current Sounds" - usr << sound(null) - usr.client?.tgui_panel?.stop_music() diff --git a/code/modules/admin/news.dm b/code/modules/admin/news.dm index 7c578430f94..474546fdf94 100644 --- a/code/modules/admin/news.dm +++ b/code/modules/admin/news.dm @@ -5,9 +5,11 @@ // Returns true if news was updated since last seen. /client/proc/check_for_new_server_news() + if(!player.block_on_available()) + return FALSE var/savefile/F = get_server_news() if(F) - if(md5(F["body"]) != prefs.lastnews) + if(md5(F["body"]) != player.player_misc["lastnews"]) return TRUE return FALSE diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 6feede2494c..b5b07d730e7 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -311,9 +311,6 @@ alert(usr, "This ban has already been lifted / does not exist.", "Error", "Ok") unbanpanel() - else if(href_list["warn"]) - usr.client.warn(href_list["warn"]) - else if(href_list["unbane"]) if(!check_rights(R_BAN)) return diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 5efad661ec6..3e07dc740a7 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -252,8 +252,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) //send this msg to all admins for(var/client/X in GLOB.admins) - if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) - SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) + // if(X.get_preference_toggle(/datum/client_preference/holder/play_adminhelp_ping)) + // SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) + SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) window_flash(X) to_chat(X, chat_msg) @@ -339,8 +340,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) return if(initiator) - if(initiator.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) - SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg')) + // if(initiator.get_preference_toggle(/datum/client_preference/holder/play_adminhelp_ping)) + // SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg')) + SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg')) to_chat(initiator, "- AdminHelp Rejected! -") to_chat(initiator, "Your admin help was rejected.") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 756134de354..7f0f2d1d55e 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -166,8 +166,9 @@ to_chat(src, "PM to-Admins: [msg]") //play the recieving admin the adminhelp sound (if they have them enabled) - if(recipient.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) - SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) + // if(recipient.get_preference_toggle(/datum/client_preference/holder/play_adminhelp_ping)) + // SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) + SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) else if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT diff --git a/code/modules/admin/verbs/antag-ooc.dm b/code/modules/admin/verbs/antag-ooc.dm index 2a4601924df..42ddff81155 100644 --- a/code/modules/admin/verbs/antag-ooc.dm +++ b/code/modules/admin/verbs/antag-ooc.dm @@ -1,5 +1,5 @@ /client/proc/aooc(msg as text) - set category = "OOC" + set category = VERB_CATEGORY_OOC set name = "AOOC" set desc = "Antagonist OOC" diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm index 700477ec4fb..6a775a8814d 100644 --- a/code/modules/admin/verbs/custom_event.dm +++ b/code/modules/admin/verbs/custom_event.dm @@ -28,7 +28,7 @@ // normal verb for players to view info /client/verb/cmd_view_custom_event() - set category = "OOC" + set category = VERB_CATEGORY_OOC set name = "Custom Event Info" if(!custom_event_msg || custom_event_msg == "") diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 258ee809825..170b05efba8 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -13,7 +13,7 @@ GLOBAL_LIST_INIT(stealthmin_nicknames, world.file2list("[global.config.directory to_chat(src, "You cannot send DSAY messages (muted).") return - if(!is_preference_enabled(/datum/client_preference/show_dsay)) + if(!get_preference_toggle(/datum/game_preference_toggle/chat/dsay)) to_chat(src, "You have deadchat muted.") return @@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(stealthmin_nicknames, world.file2list("[global.config.directory var/key if(holder.fakekey) - if(is_preference_enabled(/datum/client_preference/holder/obfuscate_stealth_dsay)) + if(get_preference_toggle(/datum/game_preference_toggle/admin/obfuscate_stealth_dsay)) key = pick(GLOB.stealthmin_nicknames) else key = holder.fakekey diff --git a/code/modules/admin/verbs/lightning_strike.dm b/code/modules/admin/verbs/lightning_strike.dm index 45b2e2eb2f8..eb436a3faba 100644 --- a/code/modules/admin/verbs/lightning_strike.dm +++ b/code/modules/admin/verbs/lightning_strike.dm @@ -67,7 +67,7 @@ var/sound = get_sfx("thunder") for(var/mob/M in GLOB.player_list) if((P && (M.z in P.expected_z_levels)) || M.z == T.z) - if(M.is_preference_enabled(/datum/client_preference/weather_sounds)) + if(M.get_preference_toggle(/datum/game_preference_toggle/ambience/weather)) M.playsound_local(get_turf(M), soundin = sound, vol = 70, vary = FALSE, is_global = TRUE) if(cosmetic) // Everything beyond here involves potentially damaging things. If we don't want to do that, stop now. diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index bf3c98a1f3c..657f117b3cc 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -33,7 +33,7 @@ message_admins("[key_name_admin(src)] played sound [S]") for(var/mob/M in GLOB.player_list) - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) //if(M.client.prefs.toggles & SOUND_MIDI) + if(M.get_preference_toggle(/datum/game_preference_toggle/music/admin)) //if(M.client.prefs.toggles & SOUND_MIDI) admin_sound.volume = vol * M.client.admin_music_volume SEND_SOUND(M, admin_sound) admin_sound.volume = vol @@ -126,7 +126,7 @@ for(var/m in GLOB.player_list) var/mob/M = m var/client/C = M.client - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) //if(C.prefs.toggles & SOUND_MIDI) + if(M.get_preference_toggle(/datum/game_preference_toggle/music/admin)) //if(C.prefs.toggles & SOUND_MIDI) if(!stop_web_sounds) C.tgui_panel?.play_music(web_sound_url, music_extra_data) else @@ -176,7 +176,7 @@ for(var/m in GLOB.player_list) var/mob/M = m var/client/C = M.client - if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) //if(C.prefs.toggles & SOUND_MIDI) + if(M.get_preference_toggle(/datum/game_preference_toggle/music/admin)) //if(C.prefs.toggles & SOUND_MIDI) C.tgui_panel?.play_music(web_sound_input, music_extra_data) //SSblackbox.record_feedback("tally", "admin_verb", 1, "Manual Play Internet Sound") diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index 233afb359f9..4fda1c1a763 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -1,6 +1,6 @@ /proc/possess(obj/O as obj in world) set name = "Possess Obj" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(!O.loc) return // erm erm erm maybe not? @@ -31,7 +31,7 @@ /proc/release(obj/O as obj in world) set name = "Release Obj" - set category = "Object" + set category = VERB_CATEGORY_OBJECT //usr.loc = get_turf(usr) if(usr.control_object && usr.name_archive) //if you have a name archived and if you are actually relassing an object diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index d54fb2e98f7..2cb95a1feb1 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -1,6 +1,6 @@ /// Used by players to ask badmins to do things for them, but ICly. /mob/verb/pray(msg as text) - set category = "IC" + set category = VERB_CATEGORY_IC set name = "Pray" msg = sanitize(msg) @@ -49,9 +49,8 @@ for(var/client/C in GLOB.admins) if((R_ADMIN|R_MOD) & C.holder.rights) - if(C.is_preference_enabled(/datum/client_preference/admin/show_chat_prayers)) - to_chat(C, msg) - SEND_SOUND(C, sound('sound/effects/ding.ogg')) + to_chat(C, msg) + SEND_SOUND(C, sound('sound/effects/ding.ogg')) to_chat(usr, SPAN_INFO("You pray to the gods: \"[msg_tmp]\""), confidential = TRUE) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 4ce675966b9..5f83a4fa06b 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -188,7 +188,7 @@ /obj/item/assembly_holder/timer_igniter/verb/configure() set name = "Set Timer" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if ( !(usr.stat || usr.restrained()) ) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index dea3be27a78..2f95cd1aadf 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -194,7 +194,7 @@ /obj/item/assembly/infra/verb/rotate_clockwise() set name = "Rotate Infrared Laser Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr setDir(turn(dir, 90)) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 65d59150ed0..891d109980b 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -127,7 +127,7 @@ /obj/item/assembly/mousetrap/verb/hide_under() set src in oview(1) set name = "Hide" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(usr.stat) return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index c27af1c62fb..6ed5d1844b5 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -155,7 +155,7 @@ set src in usr set name = "Threaten to push the button!" set desc = "BOOOOM!" - set category = "IC" + set category = VERB_CATEGORY_IC deadman = TRUE START_PROCESSING(SSobj, src) log_and_message_admins("is threatening to trigger a signaler deadman's switch") diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index b74f9b7643d..0ff8e57082f 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -138,7 +138,7 @@ /obj/machinery/atmospherics/component/binary/circulator/verb/rotate_clockwise() set name = "Rotate Circulator Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (usr.stat || usr.restrained() || anchored) @@ -150,7 +150,7 @@ /obj/machinery/atmospherics/component/binary/circulator/verb/rotate_counterclockwise() set name = "Rotate Circulator Counterclockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (usr.stat || usr.restrained() || anchored) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pipeturbine.dm b/code/modules/atmospherics/machinery/components/binary_devices/pipeturbine.dm index 25745efec59..be56c8c7ad1 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pipeturbine.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pipeturbine.dm @@ -122,7 +122,7 @@ /obj/machinery/atmospherics/pipeturbine/verb/rotate_clockwise() set name = "Rotate Turbine Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (usr.stat || usr.restrained() || anchored) @@ -133,7 +133,7 @@ /obj/machinery/atmospherics/pipeturbine/verb/rotate_counterclockwise() set name = "Rotate Turbine Counterclockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (usr.stat || usr.restrained() || anchored) @@ -276,7 +276,7 @@ /obj/machinery/power/turbinemotor/verb/rotate_clockwise() set name = "Rotate Motor Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if (usr.stat || usr.restrained() || anchored) @@ -286,7 +286,7 @@ /obj/machinery/power/turbinemotor/verb/rotate_counterclockwise() set name = "Rotate Motor Counterclockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if (usr.stat || usr.restrained() || anchored) diff --git a/code/modules/catalogue/cataloguer_vr.dm b/code/modules/catalogue/cataloguer_vr.dm index 6b3ae9d83ca..56a8ea60738 100644 --- a/code/modules/catalogue/cataloguer_vr.dm +++ b/code/modules/catalogue/cataloguer_vr.dm @@ -18,7 +18,7 @@ /obj/item/cataloguer/compact/verb/toggle() set name = "Toggle Cataloguer" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(busy) diff --git a/code/modules/client/client.dm b/code/modules/client/client.dm index 57b2b0908a0..3e753a8add9 100644 --- a/code/modules/client/client.dm +++ b/code/modules/client/client.dm @@ -96,6 +96,10 @@ /// menu group statuses var/list/menu_group_status = list() + //? Preferences + /// client preferences + var/datum/game_preferences/preferences + //? Statpanel /// statpanel tab ; can be null (e.g. we're looking at verb tabs) var/statpanel_tab diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 30684835ef8..15e8c0243c7 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -198,9 +198,21 @@ // resolve persistent data persistent = resolve_client_data(ckey, key) //* Resolve database data - player = new(key) + player = resolve_player_data(ckey, key) player.log_connect() - // todo: move preferences up here but above persistent + //* Resolve preferences + preferences = SSpreferences.resolve_game_preferences(key, ckey) + preferences.active = src + preferences.on_reconnect() + //? WARNING: SHITCODE ALERT ?// + // We allow a client/New sleep because preferences is currently required for + // everything else to work + // todo: maybe don't do this? + if(!UNLINT(preferences.block_on_initialized(5 SECONDS))) + security_kick("A fatal error occurred while attempting to load: preferences not initialized. Please notify a coder.") + stack_trace("we just kicked a client due to prefs not loading; something is horribly wrong!") + return + //? END ?// //* Setup user interface // todo: move top level menu here, for now it has to be under prefs. @@ -328,11 +340,12 @@ pre_init_viewport() mob.reload_rendering() - if(prefs.lastchangelog != GLOB.changelog_hash) //bolds the changelog button on the interface so we know there are updates. - to_chat(src, "You have unread updates in the changelog.") - winset(src, "infowindow.changelog", "background-color=#eaeaea;font-style=bold") - if(config_legacy.aggressive_changelog) - changelog_async() + // todo: this is dead because changelog is dead but we should fix it tbvqh + // if(prefs.lastchangelog != GLOB.changelog_hash) //bolds the changelog button on the interface so we know there are updates. + // to_chat(src, "You have unread updates in the changelog.") + // winset(src, "infowindow.changelog", "background-color=#eaeaea;font-style=bold") + // if(config_legacy.aggressive_changelog) + // changelog_async() // ensure asset cache is there INVOKE_ASYNC(src, PROC_REF(warn_if_no_asset_cache_browser)) @@ -383,9 +396,11 @@ // log log_access("Logout: [key_name(src)]") // unreference storage datums - prefs = null persistent = null player = null + if(preferences) + preferences.active = null + preferences = null //* unsorted GLOB.ahelp_tickets.ClientLogout(src) @@ -512,7 +527,7 @@ if(ab) //Citadel edit, things with stuff. return - if (prefs.hotkeys) + if (preferences.is_hotkeys_mode()) // If hotkey mode is enabled, then clicking the map will automatically // unfocus the text bar. This removes the red color from the text bar // so that the visual focus indicator matches reality. diff --git a/code/modules/client/data/client_data.dm b/code/modules/client/data/client_data.dm index 8e1387b858f..7660a0a5e12 100644 --- a/code/modules/client/data/client_data.dm +++ b/code/modules/client/data/client_data.dm @@ -1,3 +1,6 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + GLOBAL_LIST_EMPTY(client_data) /proc/resolve_client_data(ckey, key) @@ -65,7 +68,7 @@ GLOBAL_LIST_EMPTY(client_data) log_shadowban("[ckey] autobanned based on [why].") message_admins(SPAN_DANGER("Automatically shadowbanning [ckey] based on configuration (matched on [why]). Varedit client.persistent.ligma to change this.")) -/datum/client_data/proc/block_on_account_age_loaded(timeout = INFINITY) +/datum/client_data/proc/block_on_account_age_loaded(timeout = 10 SECONDS) var/timed_out = world.time + timeout UNTIL(!isnull(account_age) || world.time > timed_out) return account_age @@ -143,7 +146,8 @@ GLOBAL_LIST_EMPTY(client_data) playtime_loaded = TRUE playtime_mutex = FALSE -/datum/client_data/proc/block_on_playtime_loaded(timeout = INFINITY) +/datum/client_data/proc/block_on_playtime_loaded(timeout = 10 SECONDS) var/timed_out = world.time + timeout load_playtime() UNTIL(playtime_loaded || world.time > timed_out) + return playtime_loaded diff --git a/code/modules/client/data/player_data.dm b/code/modules/client/data/player_data.dm index 33ed969c1fa..08ef61a6f19 100644 --- a/code/modules/client/data/player_data.dm +++ b/code/modules/client/data/player_data.dm @@ -1,4 +1,16 @@ -// todo: this has to be globally cached for new admin panel +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +GLOBAL_LIST_EMPTY(player_data) + +/proc/resolve_player_data(ckey, key) + ckey = ckey(ckey) // just in case + if(!islist(GLOB.player_data)) + // we CANNOT RUNTIME + GLOB.player_data = list() + if(!istype(GLOB.player_data[ckey], /datum/player_data)) + GLOB.player_data[ckey] = new /datum/player_data(ckey, key) + return GLOB.player_data[ckey] /** * holds db-related data @@ -31,9 +43,12 @@ var/player_age /// join date var/player_first_seen + /// arbitrary JSON-serializable key-value data + /// you must handle errors yourself! we won't handle it for you. + var/list/player_misc -/datum/player_data/New(key) - src.ckey = ckey(key) +/datum/player_data/New(ckey, key) + src.ckey = ckey if(!src.ckey) return src.key = key @@ -94,7 +109,7 @@ lookup_pid = text2num(lookup_pid) qdel(lookup) lookup = SSdbcore.ExecuteQuery( - "SELECT id, flags, datediff(Now(), firstseen), firstseen FROM [format_table_name("player")] WHERE id = :id", + "SELECT id, flags, datediff(Now(), firstseen), firstseen, misc FROM [format_table_name("player")] WHERE id = :id", list( "id" = lookup_pid ) @@ -111,6 +126,7 @@ player_flags = lookup_flags player_first_seen = lookup.item[4] player_age = lookup_age + player_misc = safe_json_decode(lookup.item[5]) qdel(lookup) available = TRUE else @@ -125,21 +141,24 @@ // new person! player_age = 0 player_flags = NONE + player_misc = list() var/datum/db_query/insert if(migrate_firstseen) insert = SSdbcore.ExecuteQuery( - "INSERT INTO [format_table_name("player")] (flags, firstseen, lastseen) VALUES (:flags, :fs, Now())", + "INSERT INTO [format_table_name("player")] (flags, firstseen, lastseen, misc) VALUES (:flags, :fs, Now(), :misc)", list( "flags" = player_flags, - "fs" = migrate_firstseen + "fs" = migrate_firstseen, + "misc" = safe_json_encode(player_misc), ) ) player_first_seen = migrate_firstseen else insert = SSdbcore.ExecuteQuery( - "INSERT INTO [format_table_name("player")] (flags, firstseen, lastseen) VALUES (:flags, Now(), Now())", + "INSERT INTO [format_table_name("player")] (flags, firstseen, lastseen, misc) VALUES (:flags, Now(), Now(), :misc)", list( "flags" = player_flags, + "misc" = safe_json_encode(player_misc), ) ) player_first_seen = time_stamp() @@ -190,10 +209,11 @@ /datum/player_data/proc/_save() qdel(SSdbcore.ExecuteQuery( - "UPDATE [format_table_name("player")] SET flags = :flags WHERE id = :id", + "UPDATE [format_table_name("player")] SET flags = :flags, misc = :misc WHERE id = :id", list( "flags" = player_flags, - "id" = player_id + "id" = player_id, + "misc" = safe_json_encode(player_misc, "{}"), ) )) @@ -211,7 +231,7 @@ qdel(SSdbcore.ExecuteQuery( "UPDATE [format_table_name("player")] SET lastseen = Now() WHERE id = :id", list( - "id" = player_id + "id" = player_id, ) )) return TRUE @@ -229,7 +249,7 @@ * * WARNING: without database, or if this is for a guest key, we will never be available. */ -/datum/player_data/proc/block_on_available(timeout = INFINITY) +/datum/player_data/proc/block_on_available(timeout = 10 SECONDS) var/timed_out = world.time + timeout UNTIL(!isnull(available) || world.time > timed_out) return available diff --git a/code/modules/client/game_preferences/entries/game.dm b/code/modules/client/game_preferences/entries/game.dm new file mode 100644 index 00000000000..e409bbc6037 --- /dev/null +++ b/code/modules/client/game_preferences/entries/game.dm @@ -0,0 +1,73 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/datum/game_preference_entry/dropdown/hud_style + name = "HUD Style" + description = "Set the style of your inventory / game HUD" + key = "hud_style" + category = GAME_PREFERENCE_CATEGORY_GAME + subcategory = "HUD Overlay" + legacy_savefile_key = "UI_style" + +/datum/game_preference_entry/dropdown/hud_style/New() + options = list() + for(var/key in all_ui_styles) + options += key + ..() + +/datum/game_preference_entry/dropdown/hud_style/on_set(client/user, value, first_init) + . = ..() + user.set_ui_style(value) + +/datum/game_preference_entry/simple_color/hud_color + name = "HUD Color" + description = "Manually recolor your inventory / game HUD" + key = "hud_color" + category = GAME_PREFERENCE_CATEGORY_GAME + subcategory = "HUD Overlay" + default_value = "#ffffff" + legacy_savefile_key = "UI_style_color" + +/datum/game_preference_entry/simple_color/hud_color/on_set(client/user, value, first_init) + . = ..() + user.set_ui_color(value) + +/datum/game_preference_entry/number/hud_alpha + name = "HUD Alpha" + description = "Manually set the transparency of your inventory / game HUD" + key = "hud_alpha" + category = GAME_PREFERENCE_CATEGORY_GAME + subcategory = "HUD Overlay" + default_value = 255 + min_value = 0 + max_value = 255 + round_to_nearest = 1 + legacy_savefile_key = "UI_style_alpha" + +/datum/game_preference_entry/number/hud_alpha/on_set(client/user, value, first_init) + . = ..() + user.set_ui_alpha(value) + +/datum/game_preference_entry/dropdown/tooltip_style + name = "Tooltips Style" + description = "Set the HUD style of pop up tooltips." + key = "tooltip_style" + category = GAME_PREFERENCE_CATEGORY_GAME + subcategory = "Tooltips" + legacy_savefile_key = "tooltipstyle" + +/datum/game_preference_entry/dropdown/tooltip_style/New() + options = all_tooltip_styles.Copy() + ..() + +/datum/game_preference_entry/simple_color/admin_ooc_color + name = "OOC Color (Admin)" + description = "Choose your OOC color. Do not make it too eye-searing. Set to #000001 or reset to default to sync with server color." + key = "admin_ooc_color" + category = GAME_PREFERENCE_CATEGORY_GAME + subcategory = "OOC" + default_value = "#000001" + legacy_savefile_key = "ooccolor" + +/datum/game_preference_entry/simple_color/admin_ooc_color/is_visible(client/user) + return check_rights(C = user, show_msg = FALSE) && CONFIG_GET(flag/allow_admin_ooccolor) diff --git a/code/modules/client/game_preferences/entries/graphics.dm b/code/modules/client/game_preferences/entries/graphics.dm new file mode 100644 index 00000000000..356f51b3d7e --- /dev/null +++ b/code/modules/client/game_preferences/entries/graphics.dm @@ -0,0 +1,42 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/datum/game_preference_entry/toggle/parallax + name = "Parallax Enabled" + description = "Render space via parallax. This should be kept on." + key = "enable_parallax" + category = GAME_PREFERENCE_CATEGORY_GRAPHICS + subcategory = "Parallax" + default_value = TRUE + +/datum/game_preference_entry/toggle/parallax/on_set(client/user, value, first_init) + . = ..() + user.parallax_holder?.reset() + +/datum/game_preference_entry/toggle/ambient_occlusion + name = "Fake Ambient Occlusion" + description = "Fake, filter ambient occlusion. This should be kept off." + key = "fake_ambient_occlusion" + category = GAME_PREFERENCE_CATEGORY_GRAPHICS + subcategory = "Rendering" + default_value = FALSE + +/datum/game_preference_entry/toggle/ambient_occlusion/on_set(client/user, value, first_init) + . = ..() + user.using_perspective?.planes?.sync_owner(user) + +/datum/game_preference_entry/number/fps + name = "FPS" + description = "Client rendering FPS. It is recommended to set this to a multiple of the server's tickrate. 0 to sync with server." + key = "client_fps" + category = GAME_PREFERENCE_CATEGORY_GRAPHICS + subcategory = "Rendering" + default_value = 0 + min_value = 0 + max_value = 180 + round_to_nearest = 1 + legacy_savefile_key = "client_fps" + +/datum/game_preference_entry/number/fps/on_set(client/user, value, first_init) + . = ..() + user.fps = value diff --git a/code/modules/client/game_preferences/game_preference_entry.dm b/code/modules/client/game_preferences/game_preference_entry.dm new file mode 100644 index 00000000000..dcda4489a5d --- /dev/null +++ b/code/modules/client/game_preferences/game_preference_entry.dm @@ -0,0 +1,149 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/datum/game_preference_entry + abstract_type = /datum/game_preference_entry + var/name = "-- broken entry --" + var/description = "A preference entry." + /// Must be unique + var/key + var/category = "Misc" + var/subcategory = "Misc" + /// priority - higher means it appears first. only valid within the same category. + var/priority = 0 + /// default value + var/default_value + /// legacy import id - set if it's using new global prefs system + var/legacy_global_key + /// legacy import id - set if it's using old savefile direct write + var/legacy_savefile_key + +/datum/game_preference_entry/proc/default_value(client/user) + return default_value + +/datum/game_preference_entry/proc/is_visible(client/user, silent) + return TRUE + +/** + * called when a value is changed with a client active + * + * @params + * * user - active client + * * value - current (sanitized) value + * * first_init - are we being called as a client is first being associated to a preferences datum, or on first load? + */ +/datum/game_preference_entry/proc/on_set(client/user, value, first_init) + return + +/datum/game_preference_entry/proc/filter_value(value) + return value + +/datum/game_preference_entry/proc/migrate_legacy_data(data) + return data + +/datum/game_preference_entry/proc/tgui_preference_schema() + return list( + "key" = key, + "category" = category, + "subcategory" = subcategory, + "name" = name, + "desc" = description, + "priority" = priority, + "defaultValue" = default_value, + ) + +/datum/game_preference_entry/number + abstract_type = /datum/game_preference_entry/number + default_value = 0 + /// optional + var/min_value + /// optional + var/max_value + /// optional + var/round_to_nearest + +/datum/game_preference_entry/number/filter_value(value) + . = isnum(value)? clamp(value, min_value, max_value) : default_value + if(!isnull(.) && round_to_nearest) + . = round(., round_to_nearest) + +/datum/game_preference_entry/number/tgui_preference_schema() + return ..() | list( + "type" = "number", + "minValue" = min_value, + "maxValue" = max_value, + "round_to" = round_to_nearest, + ) + +/datum/game_preference_entry/string + abstract_type = /datum/game_preference_entry/string + default_value = "" + /// mandatory + var/min_length = 0 + /// mandatory + var/max_length = 64 + +/datum/game_preference_entry/string/filter_value(value) + . = "[value]" + return copytext_char(., 1, min(length_char(.) + 1, max_length + 1)) + +/datum/game_preference_entry/string/tgui_preference_schema() + return ..() | list( + "type" = "string", + "minLength" = min_length, + "maxLength" = max_length, + ) + +/datum/game_preference_entry/toggle + abstract_type = /datum/game_preference_entry/toggle + default_value = TRUE + /// mandatory + var/enabled_name = "On" + /// mandatory + var/disabled_name = "Off" + +/datum/game_preference_entry/toggle/filter_value(value) + return !!value + +/datum/game_preference_entry/toggle/tgui_preference_schema() + return ..() | list( + "type" = "toggle", + "enabledName" = enabled_name, + "disabledName" = disabled_name, + ) + +/datum/game_preference_entry/dropdown + abstract_type = /datum/game_preference_entry/dropdown + default_value = null + /// entries must be strings + var/list/options = list() + +/datum/game_preference_entry/dropdown/New() + if(isnull(default_value) && length(options)) + default_value = options[1] + +/datum/game_preference_entry/dropdown/filter_value(value) + return (value in options)? value : ((length(options) && options[1]) || null) + +/datum/game_preference_entry/dropdown/tgui_preference_schema() + return ..() | list( + "type" = "dropdown", + "options" = options, + ) + +/datum/game_preference_entry/simple_color + abstract_type = /datum/game_preference_entry/simple_color + default_value = "#ffffff" + +/datum/game_preference_entry/simple_color/filter_value(value) + return sanitize_hexcolor( + value, + desired_format = 6, + include_crunch = TRUE, + default = default_value, + ) + +/datum/game_preference_entry/simple_color/tgui_preference_schema() + return ..() | list( + "type" = "simpleColor", + ) diff --git a/code/modules/client/game_preferences/game_preference_middleware.dm b/code/modules/client/game_preferences/game_preference_middleware.dm new file mode 100644 index 00000000000..b7a210287cf --- /dev/null +++ b/code/modules/client/game_preferences/game_preference_middleware.dm @@ -0,0 +1,47 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/// key value id = middleware instance +GLOBAL_LIST_INIT(game_preference_middleware, init_game_preference_middleware()) + +/proc/init_game_preference_middleware() + var/list/keyed_middleware = list() + for(var/datum/game_preference_middleware/middleware as anything in subtypesof(/datum/game_preference_middleware)) + middleware = new middleware + keyed_middleware[middleware.key] = middleware + GLOB.game_preference_middleware = keyed_middleware + return keyed_middleware + +/datum/game_preference_middleware + /// category name + var/name + /// key + var/key + +/** + * return TRUE to stop handling + * + * we assume the 'usr' has been validated by the prefs datum! + */ +/datum/game_preference_middleware/proc/handle_topic(datum/game_preferences/prefs, action, list/params) + return FALSE + +/** + * when we want to reset whatever this handles + */ +/datum/game_preference_middleware/proc/handle_reset(datum/game_preferences/prefs) + prefs.mark_dirty() + return + +/** + * sanitize everything + */ +/datum/game_preference_middleware/proc/handle_sanitize(datum/game_preferences/prefs) + prefs.mark_dirty() + return + +/** + * on initial load + */ +/datum/game_preference_middleware/proc/on_initial_load(datum/game_preferences/prefs) + return diff --git a/code/modules/client/game_preferences/game_preference_toggle.dm b/code/modules/client/game_preferences/game_preference_toggle.dm new file mode 100644 index 00000000000..db431f3d985 --- /dev/null +++ b/code/modules/client/game_preferences/game_preference_toggle.dm @@ -0,0 +1,270 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/datum/game_preference_toggle + abstract_type = /datum/game_preference_toggle + var/name = "A Toggle" + var/description = "Someone fucked up" + var/enabled_name = "On" + var/disabled_name = "Off" + /// must be unique + var/key + var/category = "Misc" + /// priority - higher means it appears first. only valid within the same category. + var/priority = 0 + /// legacy import id + var/legacy_key + var/default_value = TRUE + +/datum/game_preference_toggle/proc/toggled(client/user, state) + return + +/datum/game_preference_toggle/proc/is_visible(client/user) + return TRUE + +/datum/game_preference_toggle/proc/tgui_preference_schema() + return list( + "key" = key, + "category" = category, + "priority" = priority, + "default" = default_value, + "name" = name, + "desc" = description, + "enabled" = enabled_name, + "disabled" = disabled_name, + ) + +/datum/game_preference_toggle/admin + abstract_type = /datum/game_preference_toggle/admin + category = "Admin" + +/datum/game_preference_toggle/admin/is_visible(client/user, silent) + return check_rights(C = user, show_msg = FALSE) + +/datum/game_preference_toggle/admin/global_looc + name = "Remote LOOC Sight" + description = "See all LOOC, regardless of location." + key = "admin_global_looc" + default_value = TRUE + legacy_key = "CHAT_RLOOC" + +/datum/game_preference_toggle/admin/obfuscate_stealth_dsay + name = "Obfuscate Stealthmin Dsay" + description = "Randomize ckey to a list of joke ckeys when dsay'ing while stealthed." + key = "admin_obfuscate_stealth_dsay" + default_value = TRUE + legacy_key = "OBFUSCATE_STEALTH_DSAY" + +/datum/game_preference_toggle/admin/stealth_hides_ghost + name = "Stealthmin Hides Ghost" + description = "Hide your ghost while stealthed." + key = "admin_hide_stealth_ghost" + default_value = TRUE + +/datum/game_preference_toggle/chat + abstract_type = /datum/game_preference_toggle/chat + category = "Chat" + +/datum/game_preference_toggle/chat/ooc + name = "OOC enabled" + description = "Toggles whether you see OOC (Out of Character) chat." + legacy_key = "CHAT_OOC" + key = "toggle_ooc" + +/datum/game_preference_toggle/chat/looc + name = "LOOC enabled" + description = "Toggles whether you see LOOC (Local Out of Character) chat." + legacy_key = "CHAT_LOOC" + key = "toggle_looc" + +/datum/game_preference_toggle/chat/dsay + name = "Deadchat enabled" + description = "Toggles whether you see dead chat." + legacy_key = "CHAT_DEAD" + key = "toggle_deadchat" + +/datum/game_preference_toggle/chat/legacy_chat_tags + name = "Chat Tags" + description = "Legacy chat visual system for tags to the left of messages; you should likely keep this on." + key = "legacy_chat_tags" + default_value = TRUE + legacy_key = "CHAT_SHOWICONS" + +/datum/game_preference_toggle/chat/language_indicators + name = "Language Indicators" + description = "Show language indicators in the chat when you hear a known language." + key = "language_indicators" + default_value = TRUE + legacy_key = "LANGUAGE_INDICATOR" + +/datum/game_preference_toggle/game + abstract_type = /datum/game_preference_toggle/game + category = "Game" + +/datum/game_preference_toggle/game/mob_tooltips + name = "Mob Tooltips" + key = "mob_tooltips" + legacy_key = "MOB_TOOLTIPS" + +/datum/game_preference_toggle/game/overhead_chat + name = "Overhead Chat" + key = "runechat" + legacy_key = "OVERHEAD_CHAT" + description = "Enable rendering messages sent by mobs over their icon on the map." + +/datum/game_preference_toggle/game/help_intent_firing + name = "Help Intent Gun Safety" + description = "If on, do not allow firing weapons in help intent." + key = "help_intent_gun_safety" + legacy_key = "HELP_INTENT_SAFETY" + default_value = FALSE + +/datum/game_preference_toggle/game/legacy_name_highlight + name = "Emphasize Name Mentions" + description = "Enlargen messages calling you by name." + key = "legacy_name_mention" + legacy_key = "CHAT_MENTION" + +/datum/game_preference_toggle/ambience + abstract_type = /datum/game_preference_toggle/ambience + category = "Sound - Ambience" + +/datum/game_preference_toggle/ambience/area_ambience + name = "Area Ambience" + key = "area_ambience" + default_value = TRUE + +/datum/game_preference_toggle/ambience/supermatter_hum + name = "Supermatter Hum" + key = "supermatter_ambience" + legacy_key = "SOUND_SUPERMATTER" + default_value = TRUE + +/datum/game_preference_toggle/ambience/weather + name = "Weather Sounds" + key = "weather_ambience" + legacy_key = "SOUND_WEATHER" + default_value = TRUE + +/datum/game_preference_toggle/ambience/atmospherics + name = "Atmos Machinery Sounds" + key = "atmos_machine_ambience" + default_value = TRUE + legacy_key = "SOUND_AIRPUMP" + +/datum/game_preference_toggle/sfx + abstract_type = /datum/game_preference_toggle/sfx + category = "Sound - Effects" + +/datum/game_preference_toggle/sfx/instruments + name = "Instruments" + description = "Play sounds from in-game instruments." + key = "instrument_music" + legacy_key = "SOUND_INSTRUMENT" + +/datum/game_preference_toggle/music + abstract_type = /datum/game_preference_toggle/music + category = "Sound - Music" + +/datum/game_preference_toggle/music/lobby + name = "Lobby Music" + description = "Play music in the lobby." + key = "lobby_music" + legacy_key = "SOUND_LOBBY" + +/datum/game_preference_toggle/music/lobby/toggled(client/user, state) + if(state) + user.playtitlemusic() + else + user.media?.stop_music() + +/datum/game_preference_toggle/music/admin + name = "Admin Music" + description = "Play admin MIDIs (or really just music nowadays)." + key = "admin_music" + legacy_key = "SOUND_MIDI" + +/datum/game_preference_toggle/music/jukebox + name = "Jukebox Music" + description = "Play in-game jukebox music." + key = "jukebox_music" + legacy_key = "SOUND_JUKEBOX" + +/datum/game_preference_toggle/music/jukebox/toggled(client/user, state) + // todo: jukebox / music rework + if(state) + user.mob?.update_music() + else + user.mob?.stop_all_music() + +// todo: this should probably not be in toggles + +/datum/game_preference_toggle/vore_sounds + abstract_type = /datum/game_preference_toggle/vore_sounds + category = "Sound - Vore" + +/datum/game_preference_toggle/vore_sounds/eating_noises + name = "Eating Noises" + key = "vore_eating_sounds" + default_value = FALSE + legacy_key = "EATING_NOISES" + +/datum/game_preference_toggle/vore_sounds/digestion_noises + name = "Digestion Noises" + key = "vore_digestion_sounds" + default_value = FALSE + legacy_key = "DIGEST_NOISES" + +/datum/game_preference_toggle/observer + abstract_type = /datum/game_preference_toggle/observer + category = "Observer" + +/datum/game_preference_toggle/observer/ghost_ears + name = "Hear All Speech" + description = "Hear all speech, regardless of distance" + key = "ghost_ears" + default_value = TRUE + legacy_key = "CHAT_GHOSTEARS" + +/datum/game_preference_toggle/observer/ghost_sight + name = "See All Emotes" + description = "See all emotes, regardless of distance" + key = "ghost_sight" + default_value = TRUE + legacy_key = "CHAT_GHOSTSIGHT" + +/datum/game_preference_toggle/observer/ghost_radio + name = "Hear All Radio" + description = "Hear all radio chatter, regardless of distance" + key = "ghost_radio" + default_value = TRUE + legacy_key = "CHAT_GHOSTRADIO" + +/datum/game_preference_toggle/observer/ghost_subtle + name = "See Subtle Emotes" + description = "See subtle emotes" + key = "ghost_subtle" + default_value = TRUE + legacy_key = "SUBTLE_SEE" + +/datum/game_preference_toggle/presence + abstract_type = /datum/game_preference_toggle/presence + category = "Presence" + +/datum/game_preference_toggle/presence/anonymous_ghost_chat + name = "Anonymous Ghost Chat" + description = "Hide your ckey when speaking in deadchat." + key = "hide_ckey_from_deadchat" + default_value = TRUE + +/datum/game_preference_toggle/presence/show_advanced_who + name = "Show Status in Advanced Who" + description = "Show your playing status in advanced who." + key = "advanced_who_status" + default_value = FALSE + +/datum/game_preference_toggle/presence/announce_ghost_joinleave + name = "Announce Observer Join/Leave" + description = "Announce to deadchat when you enter or exit deadchat." + key = "announce_ghost_joinleave" + default_value = FALSE diff --git a/code/modules/client/game_preferences/game_preferences.dm b/code/modules/client/game_preferences/game_preferences.dm new file mode 100644 index 00000000000..3c8da9b9403 --- /dev/null +++ b/code/modules/client/game_preferences/game_preferences.dm @@ -0,0 +1,609 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/** + * Game preferences + * + * Game prefs don't need an init order because unlike character setup, there's no dependencies, in theory. + */ +/datum/game_preferences + //* Loading *// + /// loaded? + var/initialized = FALSE + + //* Preferences *// + /// preferences by key - key = value + var/list/entries_by_key + /// arbitrary key access used by middleware + var/list/misc_by_key + // todo: move menu options in here and not from /datum/preferences + + //* Middleware - Keybindings *// + /// keybindings - key to list of keybinds + var/list/keybindings + + //* Middleware - Toggles *// + /// toggles by key - TRUE or FALSE + var/list/toggles_by_key + + //* System *// + /// were we originally sql loaded? + /// used to determine if sql is authoritative when sql comes back + /// + /// - if sql was originally loaded and sql comes back, we are still authoritative + /// - if sql wasn't originally loaded and sql comes back and a sql save exists, we are overwritten + /// - if a save doesn't exist, we are authoritative and are flushed to sql + var/authoritatively_loaded_by_sql = FALSE + /// something fucky wucky happened and the next time sql comes back, + /// we need to flush data and assert authoritativeness + var/sql_state_desynced = FALSE + /// our player's ckey + var/ckey + /// we are a guest + var/is_guest = FALSE + /// our active client + var/client/active + /// our player's id + /// + /// set upon successful sql save + /// we will try to load a sql preferences of a given playerid + /// when we load from sql + var/authoritative_player_id + /// our prefs version + var/version = GAME_PREFERENCES_VERSION_CURRENT + /// are we saved? if TRUE, we have modified vars + var/is_dirty = FALSE + +/datum/game_preferences/New(key, ckey) + src.ckey = ckey + src.is_guest = IsGuestKey(key) + +//* Init *// + +/datum/game_preferences/proc/initialize() + perform_initial_load() + initialized = TRUE + +/datum/game_preferences/proc/on_reconnect() + if(!initialized) + return + initialize_client() + +/datum/game_preferences/proc/block_on_initialized(timeout = 10 SECONDS) + var/wait_until = world.time + timeout + UNTIL(initialized || (world.time >= wait_until)) + if(!initialized) + . = FALSE + CRASH("block_on_initialize timeout") + return initialized + +/datum/game_preferences/proc/initialize_client() + if(isnull(active)) + return + for(var/key in SSpreferences.entries_by_key) + var/datum/game_preference_entry/entry = SSpreferences.entries_by_key[key] + var/value = entries_by_key[entry.key] + entry.on_set(active, value, TRUE) + for(var/key in GLOB.game_preference_middleware) + var/datum/game_preference_middleware/middleware = GLOB.game_preference_middleware[key] + middleware.on_initial_load(src) + +/datum/game_preferences/proc/oops_sql_came_back_perform_a_reload() + // if we were sql loaded, don't desync from sql + if(authoritatively_loaded_by_sql) + if(!sql_state_desynced) + return + if(active) + to_chat(active, SPAN_BOLDANNOUNCE("The server's SQL database has reconnected and your preferences were changed during the lapse. Your preferences has been automatically flushed to database.")) + save_to_sql() + return + // load from sql if we can; SQL is authoritative + if(load_from_sql()) + if(active) + to_chat(active, SPAN_BOLDANNOUNCE("The server's SQL database has reconnected and your preferences were found to be fully desynced from the copy in the database. Your preferences has been automatically reloaded from the database. Please ensure all settings are workable.")) + return + // otherwise, save our current changes to SQL + save_to_sql() + if(active) + to_chat(active, SPAN_BOLDANNOUNCE("The server's SQL database has reconnected and your preferences were not found in them. Your preferences have been automatically saved to database.")) + +/datum/game_preferences/proc/perform_legacy_migration() + if(is_guest) + return FALSE + if(!fexists("data/player_saves/[copytext(ckey, 1, 2)]/[ckey]/preferences.sav")) + return FALSE + var/savefile/legacy_savefile = new /savefile("data/player_saves/[copytext(ckey, 1, 2)]/[ckey]/preferences.sav") + var/list/legacy_options + legacy_savefile["global"] >> legacy_options + if(isnull(legacy_options)) + legacy_options = list() + + // we are fired after reset, but before save + // we assume lists are init'd + for(var/key in SSpreferences.entries_by_key) + var/datum/game_preference_entry/entry = SSpreferences.entries_by_key[key] + var/migrated_value + if(entry.legacy_global_key) + migrated_value = legacy_options[entry.legacy_global_key] + else if(entry.legacy_savefile_key) + legacy_savefile[entry.legacy_savefile_key] >> migrated_value + if(!isnull(migrated_value)) + migrated_value = entry.filter_value(migrated_value) + entries_by_key[key] = migrated_value + + var/list/old_toggles + legacy_savefile["preferences"] >> old_toggles + + for(var/key in SSpreferences.toggles_by_key) + var/datum/game_preference_toggle/toggle = SSpreferences.toggles_by_key[key] + if(!toggle.legacy_key) + continue + toggles_by_key[key] = (toggle.legacy_key in old_toggles) + + var/list/old_keybinds + legacy_savefile["key_bindings"] >> old_keybinds + keybindings = sanitize_islist(old_keybinds) + + var/old_hotkeys + legacy_savefile["hotkeys"] >> old_hotkeys + misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] = !!old_hotkeys + + return TRUE + +/datum/game_preferences/proc/perform_initial_load() + if(!is_guest) + // only if not guest + if(SSdbcore.IsConnected()) + // sql mode + // load + if(!load_from_sql()) + // if not, load from file + if(!load_from_file()) + // if not, reset to defaults + full_reset() + // perform legacy migration to see if there's data + if(perform_legacy_migration()) + // something was there, set our version to legacy + version = GAME_PREFERENCES_VERSION_LEGACY + // save results to sql, as sql is authoritative + save_to_sql() + // synchronize sql to file for backup for when sql is down + save_to_file() + else + // synchronize sql to file for backup for when sql is down + save_to_file() + else + // normal mode + // load + if(!load_from_file()) + // if not, reset to defaults + full_reset() + // perform legacy migration to see if there's data + if(perform_legacy_migration()) + // something was there, set our version to legacy + version = GAME_PREFERENCES_VERSION_LEGACY + // save to file + save_to_file() + + // do we need to migrate? + if(version < GAME_PREFERENCES_VERSION_CURRENT) + // yes + if(!perform_migration_sequence()) + // reset to defaults if failed + full_reset() + // perform save + if(SSdbcore.IsConnected()) + save_to_sql() + else + save_to_file() + else + // if guest, just reset lmao + full_reset() + + // todo: shouldn't we save after sanitize..? + sanitize_everything() + // loaded; push initial update triggers. + initialize_client() + // initialized! + initialized = TRUE + +/** + * @return FALSE if failed + */ +/datum/game_preferences/proc/perform_migration_sequence() + if(version <= GAME_PREFERENCES_VERSION_DROP) + return FALSE + perform_migrations(version) + version = GAME_PREFERENCES_VERSION_CURRENT + +/datum/game_preferences/proc/perform_migrations(from_version) + PRIVATE_PROC(TRUE) + +//* Reset *// + +/datum/game_preferences/proc/reset(category) + if(!category) + entries_by_key = list() + for(var/key in SSpreferences.entries_by_key) + var/datum/game_preference_entry/entry = SSpreferences.entries_by_key[key] + if(category && entry.category != category) + continue + var/value = entry.default_value(active) + entries_by_key[entry.key] = value + if(!isnull(active)) + entry.on_set(active, value, TRUE) + mark_dirty() + push_ui_data(data = list("values" = entries_by_key)) + +/datum/game_preferences/proc/full_reset() + // reset misc stuff first as everything potentially uses it + misc_by_key = list() + // reset normal categories + reset() + // reset middleware + for(var/id in GLOB.game_preference_middleware) + var/datum/game_preference_middleware/middleware = GLOB.game_preference_middleware[id] + middleware.handle_reset(src) + +//* Set / Get *// + +/datum/game_preferences/proc/set_toggle(datum/game_preference_toggle/id_path_instance, value) + var/datum/game_preference_toggle/toggle = SSpreferences.resolve_preference_toggle(id_path_instance) + if(isnull(toggle)) + CRASH("invalid fetch") + if(!initialized) + return FALSE + // we don't check is visible, as it's checked on 'get' + // if(!toggle.is_visible(active)) + // return FALSE + toggles_by_key[toggle.key] = value + if(active) + toggle.toggled(active, value) + mark_dirty() + return TRUE + +/datum/game_preferences/proc/toggle(datum/game_preference_toggle/id_path_instance) + var/datum/game_preference_toggle/toggle = SSpreferences.resolve_preference_toggle(id_path_instance) + if(isnull(toggle)) + CRASH("invalid fetch") + if(!initialized) + return FALSE + // we don't check is visible, as it's checked on 'get' + // if(!toggle.is_visible(active)) + // return FALSE + toggles_by_key[toggle.key] = !toggles_by_key[toggle.key] + if(active) + toggle.toggled(active, toggles_by_key[toggle.key]) + mark_dirty() + return TRUE + +/datum/game_preferences/proc/get_toggle(datum/game_preference_toggle/id_path_instance) + var/datum/game_preference_toggle/toggle = SSpreferences.resolve_preference_toggle(id_path_instance) + if(isnull(toggle)) + CRASH("invalid fetch") + if(!initialized) + return toggle.default_value + if(!toggle.is_visible(active, TRUE)) + return toggle.default_value + return toggles_by_key[toggle.key] + +/datum/game_preferences/proc/set_entry(datum/game_preference_entry/id_path_instance, value) + var/datum/game_preference_entry/entry = SSpreferences.resolve_preference_entry(id_path_instance) + if(isnull(entry)) + CRASH("invalid fetch") + if(!initialized) + return FALSE + if(!entry.is_visible(active, TRUE)) + return FALSE + value = entry.filter_value(value) + entries_by_key[entry.key] = value + if(active) + entry.on_set(active, value, FALSE) + mark_dirty() + push_ui_data(data = list("values" = entries_by_key)) + return TRUE + +/datum/game_preferences/proc/get_entry(datum/game_preference_entry/id_path_instance) + var/datum/game_preference_entry/entry = SSpreferences.resolve_preference_entry(id_path_instance) + if(isnull(entry)) + CRASH("invalid fetch") + if(!initialized) + return entry.default_value(active) + if(!entry.is_visible(active, TRUE)) + return entry.default_value(active) + return entries_by_key[entry.key] + +//* Save / Load *// + +/datum/game_preferences/proc/auto_save() + if(!is_dirty) + return + sanitize_everything() + save() + +/datum/game_preferences/proc/mark_dirty() + is_dirty = TRUE + push_ui_data(data = list("dirty" = TRUE)) + +/datum/game_preferences/proc/mark_saved() + is_dirty = FALSE + push_ui_data(data = list("dirty" = FALSE)) + +/datum/game_preferences/proc/save() + if(!initialized) + return FALSE + if(SSdbcore.Connect()) + return save_to_sql() + else + return save_to_file() + +/datum/game_preferences/proc/load() + if(!initialized) + return FALSE + if(SSdbcore.Connect()) + . = load_from_sql() + else + . = load_from_file() + sanitize_everything() + initialize_client() + +/** + * this proc does not sanitize! + * + * @return FALSE if we couldn't load + */ +/datum/game_preferences/proc/load_from_sql() + var/datum/player_data/player_data = resolve_player_data(ckey) + if(!player_data.block_on_available(10 SECONDS)) + message_admins(SPAN_BOLDANNOUNCE("failed to resolve player data during prefs op for [ckey]. ping maintainers.")) + CRASH("failed to grab player data while loading via sql. something bad has happened!") + authoritative_player_id = player_data.player_id + + var/mob/allow_admin_proccalls = usr + usr = null + + var/datum/db_query/query = SSdbcore.NewQuery( + "SELECT `toggles`, `entries`, `misc`, `keybinds`, `version` FROM [format_table_name("game_preferences")] \ + WHERE `player` = :player", + list( + "player" = authoritative_player_id, + ), + ) + + usr = allow_admin_proccalls + + query.warn_execute(FALSE) + if(!query.NextRow()) + qdel(query) + return FALSE + var/toggles_json = query.item[1] + var/entries_json = query.item[2] + var/misc_json = query.item[3] + var/keybinds_json = query.item[4] + var/loaded_version = query.item[5] + + toggles_by_key = sanitize_islist(safe_json_decode(toggles_json)) + entries_by_key = sanitize_islist(safe_json_decode(entries_json)) + misc_by_key = sanitize_islist(safe_json_decode(misc_json)) + keybindings = sanitize_islist(safe_json_decode(keybinds_json)) + version = loaded_version + + qdel(query) + + authoritatively_loaded_by_sql = TRUE + mark_saved() + update_static_data() + + return TRUE + +/datum/game_preferences/proc/save_to_sql() + var/datum/player_data/player_data = resolve_player_data(ckey) + if(!player_data.block_on_available(10 SECONDS)) + message_admins(SPAN_BOLDANNOUNCE("failed to resolve player data during prefs op for [ckey]. ping maintainers.")) + CRASH("failed to grab player data while loading via sql. something bad has happened!") + authoritative_player_id = player_data.player_id + + var/mob/allow_admin_proccalls = usr + usr = null + + var/datum/db_query/query = SSdbcore.NewQuery( + "INSERT INTO [format_table_name("game_preferences")] \ + (`player`, `toggles`, `entries`, `misc`, `keybinds`, `version`, `modified`) VALUES \ + (:player, :toggles, :entries, :misc, :keybinds, :version, Now()) ON DUPLICATE KEY UPDATE \ + `player` = VALUES(player), `toggles` = VALUES(toggles), `entries` = VALUES(entries), `misc` = VALUES(misc), \ + `keybinds` = VALUES(keybinds), `version` = VALUES(version), `modified` = Now()", + list( + "player" = authoritative_player_id, + "toggles" = safe_json_encode(toggles_by_key), + "entries" = safe_json_encode(entries_by_key), + "misc" = safe_json_encode(misc_by_key), + "keybinds" = safe_json_encode(keybindings), + "version" = version, + ) + ) + + usr = allow_admin_proccalls + + query.warn_execute(FALSE) + qdel(query) + + mark_saved() + authoritatively_loaded_by_sql = TRUE + sql_state_desynced = FALSE + + return TRUE + +/datum/game_preferences/proc/file_path() + return "data/players/[copytext(ckey, 1, 2)]/[ckey]/preferences.json" + +/** + * this proc does not sanitize! + * + * @return FALSE if we couldn't load + */ +/datum/game_preferences/proc/load_from_file() + var/savefile_path = file_path() + + if(!fexists(savefile_path)) + return FALSE + + var/list/deserialized = safe_json_decode(file2text(savefile_path)) + + entries_by_key = sanitize_islist(deserialized["entries"]) + toggles_by_key =sanitize_islist( deserialized["toggles"]) + keybindings = sanitize_islist(deserialized["keybindings"]) + misc_by_key = sanitize_islist(deserialized["misc"]) + + if(authoritatively_loaded_by_sql) + sql_state_desynced = TRUE + mark_saved() + update_static_data() + + return TRUE + +/datum/game_preferences/proc/save_to_file() + var/savefile_path = file_path() + + var/list/serializing = list( + "entries" = entries_by_key, + "toggles" = toggles_by_key, + "keybindings" = keybindings, + "misc" = misc_by_key, + ) + + if(fexists(savefile_path)) + fdel(savefile_path) + + text2file(safe_json_encode(serializing), savefile_path) + mark_saved() + + if(authoritatively_loaded_by_sql) + sql_state_desynced = TRUE + + return TRUE + +/datum/game_preferences/proc/sanitize_everything() + // reset middleware + for(var/id in GLOB.game_preference_middleware) + var/datum/game_preference_middleware/middleware = GLOB.game_preference_middleware[id] + middleware.handle_sanitize(src) + for(var/key in SSpreferences.entries_by_key) + var/datum/game_preference_entry/entry = SSpreferences.entries_by_key[key] + var/current_value = entries_by_key[key] + entries_by_key[key] = entry.filter_value(current_value) + mark_dirty() + +//* UI *// + +/datum/game_preferences/ui_static_data(mob/user, datum/tgui/ui) + . = ..() + var/list/middleware = list() + for(var/key in GLOB.game_preference_middleware) + var/datum/game_preference_middleware/middleware_instance = GLOB.game_preference_middleware[key] + middleware[key] = middleware_instance.name + .["middleware"] = middleware + var/list/entries = list() + for(var/key in SSpreferences.entries_by_key) + var/datum/game_preference_entry/entry = SSpreferences.entries_by_key[key] + if(!entry.is_visible(user?.client, TRUE)) + continue + entries[++entries.len] = entry.tgui_preference_schema() + .["entries"] = entries + .["values"] = entries_by_key + +// todo: when do we refactor tgui again i don't like ui_interact because i'm a snowflake who likes being different +// (real complaint: ui_interact is weird for being called from tgui as well as from external) +// (update procs should be internally called, imo, not the 'open ui' proc, it leads to) +// (confusion when people add code with side effects like shocking people on touch in it.) +/datum/game_preferences/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + if(!initialized) + to_chat(user, SPAN_BOLDANNOUNCE("Your preferences are still being loaded. Please wait.")) + return + ui = SStgui.try_update_ui(user, src, ui) + if(isnull(ui)) + ui = new(user, src, "GamePreferences") + for(var/key in GLOB.game_preference_middleware) + var/datum/game_preference_middleware/middleware = GLOB.game_preference_middleware[key] + ui.register_module(middleware, key) + ui.set_autoupdate(FALSE) + ui.open() + +/datum/game_preferences/ui_route(action, list/params, datum/tgui/ui, id) + . = ..() + if(.) + return + var/datum/game_preference_middleware/middleware = GLOB.game_preference_middleware[id] + if(middleware?.handle_topic(src, action, params)) + return TRUE + +/datum/game_preferences/ui_status(mob/user, datum/ui_state/state) + if(user.ckey == ckey) + return UI_INTERACTIVE + if(check_rights(C = user, rights_required = R_DEBUG)) + return UI_INTERACTIVE + return UI_CLOSE + +/datum/game_preferences/ui_act(action, list/params, datum/tgui/ui) + . = ..() + if(.) + return + switch(action) + if("set") + var/key = params["key"] + if(isnull(SSpreferences.entries_by_key[key])) + return TRUE + set_entry(key, params["value"]) + return TRUE + if("reset") + reset(params["category"]) + return TRUE + if("save") + auto_save() + return TRUE + if("discard") + load() + return TRUE + +//? Client Wrappers ?// + +/client/proc/get_preference_toggle(datum/game_preference_toggle/id_path_instance) + var/datum/game_preference_toggle/toggle = SSpreferences.resolve_preference_toggle(id_path_instance) + if(isnull(toggle)) + CRASH("invalid fetch") + if(!initialized || !preferences.initialized) + return toggle.default_value + if(!toggle.is_visible(src, TRUE)) + return toggle.default_value + return preferences.toggles_by_key[toggle.key] + +/client/proc/get_preference_entry(datum/game_preference_entry/id_path_instance) + var/datum/game_preference_entry/entry = SSpreferences.resolve_preference_entry(id_path_instance) + if(isnull(entry)) + CRASH("invalid fetch") + if(!initialized) + return entry.default_value(src) + if(!entry.is_visible(src, TRUE)) + return entry.default_value(src) + return preferences.entries_by_key[entry.key] + +//? Mob Wrappers ?// + +/mob/proc/get_preference_toggle(datum/game_preference_toggle/id_path_instance) + var/datum/game_preference_toggle/toggle = SSpreferences.resolve_preference_toggle(id_path_instance) + if(isnull(toggle)) + CRASH("invalid fetch") + if(!client?.initialized || !client.preferences.initialized) + return toggle.default_value + if(!toggle.is_visible(client, TRUE)) + return toggle.default_value + return client.preferences.toggles_by_key[toggle.key] + +/mob/proc/get_preference_entry(datum/game_preference_entry/id_path_instance) + var/datum/game_preference_entry/entry = SSpreferences.resolve_preference_entry(id_path_instance) + if(isnull(entry)) + CRASH("invalid fetch") + if(!client?.initialized || !client.preferences.initialized) + return entry.default_value(client) + if(!entry.is_visible(client, TRUE)) + return entry.default_value(client) + return client.preferences.entries_by_key[entry.key] diff --git a/code/modules/client/game_preferences/middleware/keybindings.dm b/code/modules/client/game_preferences/middleware/keybindings.dm new file mode 100644 index 00000000000..006a156a7a5 --- /dev/null +++ b/code/modules/client/game_preferences/middleware/keybindings.dm @@ -0,0 +1,140 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/datum/game_preference_middleware/keybindings + name = "Keybindings" + key = "keybindings" + +/datum/game_preference_middleware/keybindings/on_initial_load(datum/game_preferences/prefs) + prefs.active?.update_movement_keys(src) + prefs.active?.set_macros() + return ..() + +/datum/game_preference_middleware/keybindings/handle_reset(datum/game_preferences/prefs) + . = ..() + + prefs.keybindings = list() + // don't change their hotkey mode.. unless it was never there. + prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] = \ + isnull(prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE])? TRUE : !!prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] + var/hotkey_mode = prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] + var/list/defaults = deep_copy_list(hotkey_mode? GLOB.hotkey_keybinding_list_by_key : GLOB.classic_keybinding_list_by_key) + prefs.keybindings = defaults + + prefs.push_ui_modules(updates = list((src.key) = list( + "bindings" = prefs.keybindings, + "hotkeyMode" = prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE], + ))) + +/datum/game_preference_middleware/keybindings/handle_topic(datum/game_preferences/prefs, action, list/params) + . = ..() + if(.) + return + switch(action) + if("reset") + handle_reset(prefs) + return TRUE + if("hotkeys") + var/value = params["value"] + if(prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] == value) + return TRUE + prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] = !!value + prefs.mark_dirty() + prefs.push_ui_modules(updates = list((src.key) = list( + "hotkeyMode" = value, + ))) + prefs.active?.set_macros() + return TRUE + if("addBind") + var/keybind_id = params["keybind"] + // key can be blank if we're only using ctrl/alt/shift!! + var/key = params["key"] + var/alt_depressed = params["alt"] + var/shift_depressed = params["shift"] + var/ctrl_depressed = params["ctrl"] + var/is_numpad = params["numpad"] + var/replacing_key = params["replaceKey"] + var/adding_key = "[alt_depressed? "Alt":""][ctrl_depressed? "Ctrl":""][shift_depressed? "Shift":""][is_numpad? "Numpad":""][key]" + if(!adding_key) + return TRUE + if(adding_key == replacing_key) + return TRUE + if(!isnull(replacing_key)) + prefs.keybindings[replacing_key] -= keybind_id + if(isnull(prefs.keybindings[adding_key])) + prefs.keybindings[adding_key] = list() + if(!(keybind_id in prefs.keybindings[adding_key])) + prefs.keybindings[adding_key] += keybind_id + prefs.push_ui_modules(updates = list((src.key) = list( + "bindings" = prefs.keybindings, + ))) + prefs.active?.update_movement_keys() + return TRUE + if("removeBind") + var/keybind_id = params["keybind"] + var/key = params["key"] + if(!key) + return TRUE + prefs.keybindings[key] -= keybind_id + prefs.push_ui_modules(updates = list((src.key) = list( + "bindings" = prefs.keybindings, + ))) + prefs.active?.update_movement_keys() + return TRUE + +/datum/game_preference_middleware/keybindings/handle_sanitize(datum/game_preferences/prefs) + . = ..() + prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] = \ + isnull(prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE])? TRUE : !!prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] + var/list/keys_by_bind_id = list() + //! legacy: get rid of known trash values + prefs.keybindings -= "Unbound" + //! end + for(var/key in prefs.keybindings) + var/had_something = FALSE + if(islist(prefs.keybindings[key])) + var/list/keybind_ids = prefs.keybindings[key] + if(length(keybind_ids) > MAX_COMMANDS_PER_KEY) + keybind_ids.len = MAX_COMMANDS_PER_KEY + for(var/bind_id in prefs.keybindings[key]) + var/datum/keybinding/found = GLOB.keybindings_by_name[bind_id] + if(isnull(found)) + prefs.keybindings[key] -= bind_id + continue + if(isnull(keys_by_bind_id[bind_id])) + keys_by_bind_id[bind_id] = list() + if(length(keys_by_bind_id[bind_id]) > MAX_KEYS_PER_KEYBIND) + prefs.keybindings[key] -= bind_id + continue + keys_by_bind_id[bind_id] += key + had_something = TRUE + if(!had_something) + prefs.keybindings -= key + +/datum/game_preference_middleware/keybindings/ui_static_data(mob/user, datum/tgui/ui) + . = ..() + var/datum/game_preferences/prefs = ui.src_object + .["bindings"] = prefs.keybindings + var/list/constructed_keybinds = list() + for(var/key in GLOB.keybindings_by_name) + var/datum/keybinding/keybind = GLOB.keybindings_by_name[key] + if(!keybind.is_visible(user?.client)) + continue + constructed_keybinds[++constructed_keybinds.len] = keybind.tgui_keybinding_data() + .["keybinds"] = constructed_keybinds + .["hotkeyMode"] = prefs.misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] + .["maxBinds"] = MAX_KEYS_PER_KEYBIND + .["maxPerKey"] = MAX_COMMANDS_PER_KEY + +//? Preferences Helpers + +/datum/game_preferences/proc/is_hotkeys_mode() + if(!initialized) + return TRUE + return misc_by_key[GAME_PREFERENCE_MISC_KEY_HOTKEY_MODE] + +//? UI Design Assertions + +#if MAX_KEYS_PER_KEYBIND != 3 + #error TGUI for prefs is only designed for 3 bindings per keybind datum. Fix it if you want more. +#endif diff --git a/code/modules/client/game_preferences/middleware/toggles.dm b/code/modules/client/game_preferences/middleware/toggles.dm new file mode 100644 index 00000000000..d055f35fb7a --- /dev/null +++ b/code/modules/client/game_preferences/middleware/toggles.dm @@ -0,0 +1,59 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/datum/game_preference_middleware/toggles + name = "Toggles" + key = "toggles" + +/datum/game_preference_middleware/toggles/handle_reset(datum/game_preferences/prefs) + . = ..() + prefs.toggles_by_key = list() + for(var/key in SSpreferences.toggles_by_key) + var/datum/game_preference_toggle/toggle = SSpreferences.toggles_by_key[key] + prefs.toggles_by_key[toggle.key] = toggle.default_value + + prefs.push_ui_modules(updates = list((src.key) = list( + "states" = prefs.toggles_by_key, + ))) + +/datum/game_preference_middleware/toggles/handle_topic(datum/game_preferences/prefs, action, list/params) + . = ..() + if(.) + return + switch(action) + if("reset") + handle_reset(prefs) + return TRUE + if("toggle") + var/key = params["key"] + if(isnull(SSpreferences.toggles_by_key[key])) + return TRUE + prefs.set_toggle(key, !!params["val"]) + // todo: optimize this + prefs.push_ui_modules(updates = list((src.key) = list( + "states" = prefs.toggles_by_key, + ))) + prefs.mark_dirty() + return TRUE + +/datum/game_preference_middleware/toggles/ui_static_data(mob/user, datum/tgui/ui) + . = ..() + var/datum/game_preferences/prefs = ui.src_object + var/list/collected_toggles = list() + for(var/key in SSpreferences.toggles_by_key) + var/datum/game_preference_toggle/toggle = SSpreferences.toggles_by_key[key] + if(!toggle.is_visible(user?.client)) + continue + collected_toggles[toggle.key] = toggle.tgui_preference_schema() + .["toggles"] = collected_toggles + .["states"] = prefs.toggles_by_key + +/datum/game_preference_middleware/toggles/handle_sanitize(datum/game_preferences/prefs) + . = ..() + prefs.toggles_by_key = sanitize_islist(prefs.toggles_by_key) + for(var/key in prefs.toggles_by_key) + var/datum/game_preference_toggle/toggle = SSpreferences.toggles_by_key[key] + if(isnull(toggle)) + prefs.toggles_by_key -= key + continue + prefs.toggles_by_key[key] = !!prefs.toggles_by_key[key] diff --git a/code/modules/client/onboarding/age_verification.dm b/code/modules/client/onboarding/age_verification.dm index 22ed9ebc503..f78e2a28a15 100644 --- a/code/modules/client/onboarding/age_verification.dm +++ b/code/modules/client/onboarding/age_verification.dm @@ -41,7 +41,7 @@ GLOBAL_DATUM_INIT(age_verify_menu, /datum/age_verify_menu, new) /datum/age_verify_menu/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "AgeVerifyMenu") + ui = new(user, src, "UIAgeVerifyMenu") ui.open() /datum/age_verify_menu/ui_status(mob/user, datum/ui_state/state) @@ -53,6 +53,7 @@ GLOBAL_DATUM_INIT(age_verify_menu, /datum/age_verify_menu, new) return if(usr.client.is_age_verified()) + qdel(ui) return TRUE var/player_month = text2num(params["month"]) diff --git a/code/modules/client/statpanel.dm b/code/modules/client/statpanel.dm index ff39ae01c0d..d5062febecf 100644 --- a/code/modules/client/statpanel.dm +++ b/code/modules/client/statpanel.dm @@ -31,7 +31,7 @@ /client/proc/statpanel_boot_impl() PRIVATE_PROC(TRUE) // give client a second to load - sleep(2 SECONDS) + sleep(world.tick_lag) // loads statbrowser if it isn't there src << browse(file('html/statbrowser.html'), "window=statbrowser") // if it is there and we can't tell because byond is byond, send it a signal to reload @@ -364,6 +364,6 @@ /client/verb/fix_stat_panel() set name = "Fix Stat Panel" - set category = "OOC" + set category = VERB_CATEGORY_OOC statpanel_reset() diff --git a/code/modules/client/ui_style.dm b/code/modules/client/ui_style.dm index 77e7600b33c..c5d18f8c4a0 100644 --- a/code/modules/client/ui_style.dm +++ b/code/modules/client/ui_style.dm @@ -1,6 +1,8 @@ +// todo: lol we should datumize these probably? +// todo: refactor all of this -/var/all_ui_styles = list( +/var/global/list/all_ui_styles = list( UI_STYLE_MIDNIGHT = 'icons/mob/screen/midnight.dmi', UI_STYLE_ORANGE = 'icons/mob/screen/orange.dmi', UI_STYLE_OLD = 'icons/mob/screen/old.dmi', @@ -10,7 +12,7 @@ UI_STYLE_HOLOGRAM = 'icons/mob/screen/holo.dmi' ) -/var/all_ui_styles_robot = list( +/var/global/list/all_ui_styles_robot = list( UI_STYLE_MIDNIGHT = 'icons/mob/screen1_robot.dmi', UI_STYLE_ORANGE = 'icons/mob/screen1_robot.dmi', UI_STYLE_OLD = 'icons/mob/screen1_robot.dmi', @@ -34,27 +36,11 @@ var/global/list/all_tooltip_styles = list( return all_ui_styles[ui_style] return all_ui_styles[UI_STYLE_WHITE] - -/client/verb/change_ui() - set name = "Change UI" - set category = "Preferences" - set desc = "Configure your user interface" - - if(!ishuman(usr)) - if(!isrobot(usr)) - to_chat(usr, SPAN_WARNING("You must be a human or a robot to use this verb.")) - return - - var/UI_style_new = input(usr, "Select a style. White is recommended for customization") as null|anything in all_ui_styles - if(!UI_style_new) return - - var/UI_style_alpha_new = input(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255") as null|num - if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) +// todo: refactor +/client/proc/set_ui_style(style) + if(!usr?.hud_used.adding) return - - var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null - if(!UI_style_color_new) return - + var/UI_style_new = style //update UI var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons icons.Add(usr.zone_sel) @@ -70,13 +56,35 @@ var/global/list/all_tooltip_styles = list( for(var/atom/movable/screen/I in icons) if(I.name in list(INTENT_HELP, INTENT_HARM, INTENT_DISARM, INTENT_GRAB)) continue I.icon = ic - I.color = UI_style_color_new - I.alpha = UI_style_alpha_new +// todo: refactor +/client/proc/set_ui_alpha(alpha) + if(!usr?.hud_used.adding) + return + //update UI + var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons + icons.Add(usr.zone_sel) + icons.Add(usr.gun_setting_icon) + icons.Add(usr.item_use_icon) + icons.Add(usr.gun_move_icon) + icons.Add(usr.radio_use_icon) + + for(var/atom/movable/screen/I in icons) + if(I.name in list(INTENT_HELP, INTENT_HARM, INTENT_DISARM, INTENT_GRAB)) continue + I.alpha = alpha + +// todo: refactor +/client/proc/set_ui_color(color) + if(!usr?.hud_used.adding) + return + //update UI + var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons + icons.Add(usr.zone_sel) + icons.Add(usr.gun_setting_icon) + icons.Add(usr.item_use_icon) + icons.Add(usr.gun_move_icon) + icons.Add(usr.radio_use_icon) - if(alert("Like it? Save changes?",,"Yes", "No") == "Yes") - prefs.UI_style = UI_style_new - prefs.UI_style_alpha = UI_style_alpha_new - prefs.UI_style_color = UI_style_color_new - SScharacters.queue_preferences_save(prefs) - to_chat(usr, "UI was saved") + for(var/atom/movable/screen/I in icons) + if(I.name in list(INTENT_HELP, INTENT_HARM, INTENT_DISARM, INTENT_GRAB)) continue + I.color = color diff --git a/code/modules/client/verbs/minimap.dm b/code/modules/client/verbs/minimap.dm index 3d213dc2106..de207acee57 100644 --- a/code/modules/client/verbs/minimap.dm +++ b/code/modules/client/verbs/minimap.dm @@ -1,5 +1,5 @@ /client/verb/show_station_minimap() - set category = "OOC" + set category = VERB_CATEGORY_OOC set name = "Show Station Minimap" set desc = "Shows a minimap of the currently loaded station map." diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index ee6a11fd801..2dc29bc7fcf 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -1,6 +1,20 @@ +// todo: most of the things in here should probably be re-thought category wise; +// verticality for one is more graphics/visuals +// but isn't a preference because it's something you need to actively see at some times but not others.. + +/client/verb/toggle_verticality_visibility() + set name = "Toggle Verticality Plane" + set desc = "Toggle if you see ceiling overlays and similar." + set category = VERB_CATEGORY_OOC + + var/atom/movable/screen/plane_master/plane = global_planes.by_plane_type(/atom/movable/screen/plane_master/verticality) + plane.alpha = plane.alpha == 255? 0 : 255 + to_chat(src, SPAN_NOTICE("You now [plane.alpha == 255? "see" : "no longer see"] verticality overlays.")) + + /client/verb/motd() set name = "MOTD" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc ="Check the Message of the Day" var/motd = config.motd @@ -45,7 +59,7 @@ /client/verb/ooc(msg as text) set name = "OOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite - set category = "OOC" + set category = VERB_CATEGORY_OOC if(!reject_on_initialization_block()) return @@ -56,7 +70,7 @@ to_chat(src, "Guests may not use OOC.") return - if(!is_preference_enabled(/datum/client_preference/show_ooc)) + if(!get_preference_toggle(/datum/game_preference_toggle/chat/ooc)) to_chat(src, "You have OOC muted.") return @@ -103,7 +117,7 @@ return - if(!is_preference_enabled(/datum/client_preference/show_ooc)) + if(!get_preference_toggle(/datum/game_preference_toggle/chat/ooc)) to_chat(src, "You have OOC muted.") return @@ -126,11 +140,13 @@ if(holder.rights & R_ADMIN) ooc_style = "admin" + var/effective_color = holder && preferences.get_entry(/datum/game_preference_entry/simple_color/admin_ooc_color) + for(var/client/target in GLOB.clients) if(!target.initialized) continue - if(target.is_preference_enabled(/datum/client_preference/show_ooc)) + if(target.get_preference_toggle(/datum/game_preference_toggle/chat/ooc)) if(target.is_key_ignored(key)) // If we're ignored by this person, then do nothing. continue var/display_name = src.key @@ -140,8 +156,8 @@ display_name = "[holder.fakekey]/([src.key])" else display_name = holder.fakekey - if(holder && !holder.fakekey && (holder.rights & R_ADMIN) && CONFIG_GET(flag/allow_admin_ooccolor)) // keeping this for the badmins - to_chat(target, "" + "OOC: " + "[display_name]: [msg]") + if(effective_color) // keeping this for the badmins + to_chat(target, "" + "OOC: " + "[display_name]: [msg]") else to_chat(target, "OOC: [display_name]: [msg]") @@ -153,7 +169,7 @@ /client/verb/looc(msg as text) set name = "LOOC" set desc = "Local OOC, seen only by those in view." - set category = "OOC" + set category = VERB_CATEGORY_OOC if(!reject_on_initialization_block()) return @@ -175,7 +191,7 @@ if(!msg) return - if(!is_preference_enabled(/datum/client_preference/show_looc)) + if(!get_preference_toggle(/datum/game_preference_toggle/chat/looc)) to_chat(src, "You have LOOC muted.") return @@ -221,7 +237,7 @@ // Everyone in normal viewing range of the LOOC for(var/mob/viewer in m_viewers) - if(viewer.client && viewer.client.is_preference_enabled(/datum/client_preference/show_looc)) + if(viewer.client && viewer.client.get_preference_toggle(/datum/game_preference_toggle/chat/looc)) receivers |= viewer.client else if(istype(viewer,/mob/observer/eye)) // For AI eyes and the like var/mob/observer/eye/E = viewer @@ -230,7 +246,7 @@ // Admins with RLOOC displayed who weren't already in for(var/client/admin in GLOB.admins) - if(!(admin in receivers) && admin.is_preference_enabled(/datum/client_preference/holder/show_rlooc)) + if(!(admin in receivers) && admin.get_preference_toggle(/datum/game_preference_toggle/admin/global_looc)) r_receivers |= admin msg = emoji_parse(msg) diff --git a/code/modules/client/verbs/panic_bunker_player.dm b/code/modules/client/verbs/panic_bunker_player.dm deleted file mode 100644 index 7fba73bda80..00000000000 --- a/code/modules/client/verbs/panic_bunker_player.dm +++ /dev/null @@ -1,34 +0,0 @@ -/client/verb/bunker_auto_authorize() - set name = "Auto Authorize Panic Bunker" - set desc = "Authorizes your account in the panic bunker of any servers connected to this function." - set category = "OOC" - - world.send_cross_server_bunker_overrides(key, src) - -/world/proc/send_cross_server_bunker_overrides(key, client/C) - var/comms_key = CONFIG_GET(string/comms_key) - if(!comms_key) - return - var/list/message = list() - message["ckey"] = key - message["source"] = "[CONFIG_GET(string/cross_comms_name)]" - message["key"] = comms_key - message["auto_bunker_override"] = TRUE - var/list/servers = CONFIG_GET(keyed_list/cross_server_bunker_override) - if(!length(servers)) - to_chat(C, "AUTOBUNKER: No servers are configured to receive from this one.") - return - var/logtext = "[key] ([key_name(C)]) has initiated an autobunker authentication with linked servers." - message_admins(logtext) - log_admin(logtext) - for(var/name in servers) - var/returned = world.Export("[servers[name]]?[list2params(message)]") - switch(returned) - if("Bad Key") - to_chat(C, "AUTOBuNKER: [name] failed to authenticate with this server.") - if("Function Disabled") - to_chat(C, "AUTOBUNKER: [name] has autobunker receive disabled.") - if("Success") - to_chat(C, "AUTOBUNKER: Successfully authenticated with [name]. Panic bunker bypass granted to [key]..") - else - to_chat(C, "AUTOBUNKER: Unknown error ([name]).") diff --git a/code/modules/client/verbs/preferences.dm b/code/modules/client/verbs/preferences.dm deleted file mode 100644 index 2dbdcf1370e..00000000000 --- a/code/modules/client/verbs/preferences.dm +++ /dev/null @@ -1,11 +0,0 @@ -/client/verb/character_setup() - set name = "Character Setup" - set category = "Preferences" - - prefs?.ShowChoices(usr) - -/client/verb/preferences() - set name = "Game Options" - set category = "Preferences" - - prefs?.ShowChoices(usr) diff --git a/code/modules/client/verbs/ping.dm b/code/modules/client/verbs/system.dm similarity index 55% rename from code/modules/client/verbs/ping.dm rename to code/modules/client/verbs/system.dm index 02c5b5a7fd9..0a957234e2b 100644 --- a/code/modules/client/verbs/ping.dm +++ b/code/modules/client/verbs/system.dm @@ -1,3 +1,28 @@ +//? Setup Panels + +/client/verb/character_setup() + set name = "Character Setup" + set category = VERB_CATEGORY_SYSTEM + + prefs?.ShowChoices(usr) + +/client/verb/preferences() + set name = "Game Preferences" + set category = VERB_CATEGORY_SYSTEM + + preferences.ui_interact(mob) + +//? Sound Management + +/client/verb/stop_client_sounds() + set name = "Stop Sounds" + set category = VERB_CATEGORY_SYSTEM + set desc = "Stop Current Sounds" + usr << sound(null) + usr.client?.tgui_panel?.stop_music() + +//? Ping System + /client/verb/update_ping(time as num) set instant = TRUE set name = ".update_ping" @@ -18,5 +43,5 @@ /client/verb/ping() set name = "Ping" - set category = "OOC" + set category = VERB_CATEGORY_SYSTEM winset(src, null, "command=.display_ping+[world.time+world.tick_lag*TICK_USAGE_REAL/100]") diff --git a/code/modules/client/verbs/view.dm b/code/modules/client/verbs/view.dm index 9192ac7841a..6bbee5ac68c 100644 --- a/code/modules/client/verbs/view.dm +++ b/code/modules/client/verbs/view.dm @@ -1,7 +1 @@ -/client/verb/toggle_verticality_visibility() - set name = "Toggle Verticality Plane" - set desc = "Toggle if you see ceiling overlays and similar." - - var/atom/movable/screen/plane_master/plane = global_planes.by_plane_type(/atom/movable/screen/plane_master/verticality) - plane.alpha = plane.alpha == 255? 0 : 255 - to_chat(src, SPAN_NOTICE("You now [plane.alpha == 255? "see" : "no longer see"] verticality overlays.")) +// this section left intentionally blank for now diff --git a/code/modules/client/viewport.dm b/code/modules/client/viewport.dm index dad6f2b9bed..8254a7550ec 100644 --- a/code/modules/client/viewport.dm +++ b/code/modules/client/viewport.dm @@ -410,7 +410,7 @@ GLOBAL_VAR(lock_client_view_y) */ /client/verb/user_fit_viewport() set name = "Fit Viewport" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Fit the width of the map window to match the viewport" request_viewport_fit() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index dfa3be81f74..07075db4152 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -276,7 +276,7 @@ /obj/item/clothing/verb/pick_style_verb() set name = "Set Worn Style" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Wear this piece of clothing in a different style." set src in usr diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index 6fa3138d3af..cab51c65937 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -261,7 +261,7 @@ /obj/item/clothing/proc/removetie_verb() set name = "Remove Accessory" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return diff --git a/code/modules/clothing/ears/ears.dm b/code/modules/clothing/ears/ears.dm index d4fbd5008fa..f14b1094e48 100644 --- a/code/modules/clothing/ears/ears.dm +++ b/code/modules/clothing/ears/ears.dm @@ -20,7 +20,7 @@ /obj/item/clothing/ears/earmuffs/headphones/verb/togglemusic() set name = "Toggle Headphone Music" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return diff --git a/code/modules/clothing/ears/speakrock.dm b/code/modules/clothing/ears/speakrock.dm index 6a7df6f3653..b78dd8b1002 100644 --- a/code/modules/clothing/ears/speakrock.dm +++ b/code/modules/clothing/ears/speakrock.dm @@ -13,7 +13,7 @@ // This is a clone of /obj/item/clothing/ears/earmuffs/headphones/verb/togglemusic()'s functionality. /obj/item/radio/headset/speak_n_rock/verb/togglemusic() set name = "Toggle Headphone Music" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living) || usr.stat) return diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 23914c7e43a..44e29ba1ec6 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -242,7 +242,7 @@ BLIND // can't see anything /obj/item/clothing/glasses/eyepatchwhite/verb/switcheye() set name = "Switch Eyepatch" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return @@ -256,7 +256,7 @@ BLIND // can't see anything /obj/item/clothing/glasses/eyepatch/verb/switcheye() set name = "Switch Eyepatch" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return @@ -428,7 +428,7 @@ BLIND // can't see anything toggle() /obj/item/clothing/glasses/welding/verb/toggle() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Adjust welding goggles" set src in usr @@ -668,7 +668,7 @@ BLIND // can't see anything toggle() /obj/item/clothing/glasses/aerogelgoggles/verb/toggle() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Adjust Orange Goggles" set src in usr diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 901069a5bde..0c98a49321e 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -219,7 +219,7 @@ /obj/item/clothing/glasses/omnihud/eng/meson/verb/toggleprojector() set name = "Toggle projector" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return @@ -275,7 +275,7 @@ /obj/item/clothing/glasses/hud/security/eyepatch/verb/switcheye() set name = "Switch Eyepatch" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return @@ -306,7 +306,7 @@ /obj/item/clothing/glasses/hud/engi/eyepatch/verb/toggleprojector() set name = "Toggle projector" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 4e936cf290d..cc059518ecb 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -39,7 +39,7 @@ /obj/item/clothing/head/welding/verb/toggle() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Adjust welding mask" set src in usr diff --git a/code/modules/clothing/head/pilot_helmet.dm b/code/modules/clothing/head/pilot_helmet.dm index d28d319b5ce..771b392e4c9 100644 --- a/code/modules/clothing/head/pilot_helmet.dm +++ b/code/modules/clothing/head/pilot_helmet.dm @@ -153,7 +153,7 @@ /obj/item/clothing/head/pilot/verb/hud_colors() set name = "Alter HUD color" set desc = "Change the color of the piloting HUD." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr var/newcolor = input(usr,"Pick a color!","HUD Color") as null|color diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 9635659d100..02319ec81fe 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -36,7 +36,7 @@ adjust_mask(user) /obj/item/clothing/mask/breath/verb/toggle() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Adjust mask" set src in usr diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 0186aca14ed..672a584a764 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -74,7 +74,7 @@ update_worn_icon() /obj/item/clothing/mask/gas/half/verb/toggle() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Adjust mask" set src in usr adjust_mask(usr) @@ -368,7 +368,7 @@ /obj/item/clothing/mask/gas/orchid/verb/toggle_design() set name = "Change Design" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr change_mask(usr) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 38e7357fac5..a2eb72240e5 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -56,7 +56,7 @@ update_worn_icon() /obj/item/clothing/mask/surgical/verb/toggle() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Adjust mask" set src in usr diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm index 5e2bc2dbc42..1bfa58b4662 100644 --- a/code/modules/clothing/masks/voice.dm +++ b/code/modules/clothing/masks/voice.dm @@ -11,14 +11,14 @@ origin_tech = list(TECH_ILLEGAL = 4) /obj/item/clothing/mask/gas/voice/verb/Toggle_Voice_Changer() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr changer.active = !changer.active to_chat(usr, "You [changer.active ? "enable" : "disable"] the voice-changing module in \the [src].") /obj/item/clothing/mask/gas/voice/verb/Set_Voice(name as text) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr var/voice = sanitize(name, MAX_NAME_LEN) @@ -27,7 +27,7 @@ to_chat(usr, "You are now mimicking [changer.voice].") /obj/item/clothing/mask/gas/voice/verb/Reset_Voice() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr changer.voice = null diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 0b04c5fbd1d..db94bf4b60f 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -49,7 +49,7 @@ /obj/item/clothing/shoes/proc/draw_knife() set name = "Draw Boot Knife" set desc = "Pull out your boot knife." - set category = "IC" + set category = VERB_CATEGORY_IC set src in usr if(usr.stat || usr.restrained() || usr.incapacitated()) @@ -117,7 +117,7 @@ /obj/item/clothing/shoes/verb/toggle_layer() set name = "Switch Shoe Layer" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(shoes_under_pants == -1) to_chat(usr, SPAN_NOTICE("\The [src] cannot be worn under your pants")) diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index a845a6f8cf7..cca1ecd8c20 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -35,7 +35,7 @@ /obj/item/clothing/head/helmet/space/verb/toggle_camera() set name = "Toggle Helmet Camera" set desc = "Turn your helmet's camera on or off." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(usr.stat || usr.restrained() || usr.incapacitated()) return diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index a6bdc812a57..71635647065 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -174,7 +174,7 @@ /obj/item/clothing/suit/space/void/verb/toggle_helmet() set name = "Toggle Helmet" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(src.loc,/mob/living)) return @@ -209,7 +209,7 @@ /obj/item/clothing/suit/space/void/verb/toggle_magboots() set name = "Toggle Magboots" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(src.loc,/mob/living)) @@ -247,7 +247,7 @@ /obj/item/clothing/suit/space/void/verb/eject_tank() set name = "Eject Voidsuit Tank/Cooler" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(src.loc,/mob/living)) diff --git a/code/modules/clothing/spacesuits/void/zaddat.dm b/code/modules/clothing/spacesuits/void/zaddat.dm index 9199ef9f09a..1ced3580446 100644 --- a/code/modules/clothing/spacesuits/void/zaddat.dm +++ b/code/modules/clothing/spacesuits/void/zaddat.dm @@ -26,7 +26,7 @@ /obj/item/clothing/suit/space/void/zaddat/verb/custom_suit() set name = "Customize Shroud" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Pick an appearence for your Shroud." var/mob/M = usr diff --git a/code/modules/clothing/suits/eventclothing.dm b/code/modules/clothing/suits/eventclothing.dm index d14c6c51b44..e669e8e239b 100644 --- a/code/modules/clothing/suits/eventclothing.dm +++ b/code/modules/clothing/suits/eventclothing.dm @@ -14,7 +14,7 @@ /obj/item/clothing/under/event_reward/foxmiko/verb/partkimono() //Verb for parting kimono - kinky. User reporting, flips state, and updates icon set name = "Adjust Kimono" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) //Standard checks for clothing verbs return @@ -35,7 +35,7 @@ /obj/item/clothing/under/event_reward/foxmiko/verb/liftskirt() //Verb for parting skirt - lewd. User reporting, flips state, and updates icon set name = "Adjust Skirt" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) //Standard checks for clothing verbs return @@ -97,7 +97,7 @@ /obj/item/clothing/under/event_reward/foxmiko/verb/hidetie() //Verb for concealing assessory icons on mob spirt - this is a hack of the original code to remove accessories set name = "Hide Accessory" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return //Standard checks for clothing verbs if(usr.stat) return diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 49b603e447b..4e882141414 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -1111,7 +1111,7 @@ /obj/item/clothing/suit/storage/flannel/verb/roll_sleeves() set name = "Roll Sleeves" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return @@ -1130,7 +1130,7 @@ /obj/item/clothing/suit/storage/flannel/verb/tuck() set name = "Toggle Shirt Tucking" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)||usr.stat) return @@ -1145,7 +1145,7 @@ /obj/item/clothing/suit/storage/flannel/verb/button() set name = "Toggle Shirt Buttons" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)||usr.stat) return @@ -1303,7 +1303,7 @@ /* /obj/item/clothing/suit/storage/toggle/operations_coat/verb/toggle() set name = "Toggle coat buttons" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!usr.canmove || usr.stat || usr.restrained()) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index c507cc3616f..6ae29a4da3b 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -123,7 +123,7 @@ /obj/item/clothing/suit/storage/hooded/toggle/verb/toggle() set name = "Toggle Coat Buttons" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) return 0 @@ -149,7 +149,7 @@ /obj/item/clothing/suit/storage/vest/verb/toggle() set name ="Adjust Badge" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) return 0 diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index f5fef8dad1f..092bf13f18d 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -269,7 +269,7 @@ /obj/item/clothing/under/verb/toggle() set name = "Toggle Suit Sensors" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr set_sensors(usr) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 3ba683773a0..88bd2fcfd6a 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -567,7 +567,7 @@ /obj/item/clothing/accessory/collar/bell/verb/jinglebell() set name = "Jingle Bell" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return diff --git a/code/modules/clothing/under/accessories/bracelets/_bracelets.dm b/code/modules/clothing/under/accessories/bracelets/_bracelets.dm index b0d5fec0031..c4f0db9277f 100644 --- a/code/modules/clothing/under/accessories/bracelets/_bracelets.dm +++ b/code/modules/clothing/under/accessories/bracelets/_bracelets.dm @@ -14,7 +14,7 @@ /obj/item/clothing/accessory/bracelet/friendship/verb/dedicate_bracelet() set name = "Dedicate Bracelet" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Dedicate your friendship bracelet to a special someone." var/mob/M = usr if(!M.mind) diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 5e5b9173ad0..278dcd11f92 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -100,7 +100,7 @@ //For the holster hotkey /obj/item/clothing/accessory/holster/verb/holster_verb() set name = "Holster" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 095be386826..de6d3f189dc 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -136,7 +136,7 @@ /* /obj/item/clothing/under/det/verb/rollup() set name = "Roll Suit Sleeves" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr var/unrolled = item_state_slots[SLOT_ID_UNIFORM] == initial(snowflake_worn_state) item_state_slots[SLOT_ID_UNIFORM] = unrolled ? "[snowflake_worn_state]_r" : initial(snowflake_worn_state) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index b6e570d096c..cd53d14b75d 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -1880,7 +1880,7 @@ var/original_size /obj/item/clothing/under/bluespace/verb/toggle_fibers() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Adjust fibers" set desc = "Adjust your suit fibers. This makes it so your stomach(s) will show or not." set src in usr @@ -1897,7 +1897,7 @@ /obj/item/clothing/under/bluespace/verb/resize() set name = "Adjust Size" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr bluespace_size(usr) @@ -2000,7 +2000,7 @@ /* /obj/item/clothing/under/antediluvian/verb/switchsprite() set name = "Reconfigure Suit" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(usr, /mob/living)) return diff --git a/code/modules/detectivework/tools/scanner.dm b/code/modules/detectivework/tools/scanner.dm index 87d6a6f59dd..28f9281fa78 100644 --- a/code/modules/detectivework/tools/scanner.dm +++ b/code/modules/detectivework/tools/scanner.dm @@ -138,7 +138,7 @@ /obj/item/detective_scanner/verb/examine_data() set name = "Examine Forensic Data" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) display_data(usr) @@ -188,7 +188,7 @@ /obj/item/detective_scanner/verb/wipe() set name = "Wipe Forensic Data" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if (alert("Are you sure you want to wipe all data from [src]?",,"Yes","No") == "Yes") diff --git a/code/modules/economy/machines/cash_register.dm b/code/modules/economy/machines/cash_register.dm index e96effd7f4d..7ce7f3e4bab 100644 --- a/code/modules/economy/machines/cash_register.dm +++ b/code/modules/economy/machines/cash_register.dm @@ -450,7 +450,7 @@ /obj/machinery/cash_register/verb/open_cash_box() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Open Cash Box" set desc = "Open/closes the register's cash box." set src in view(1) diff --git a/code/modules/flufftext/look_up.dm b/code/modules/flufftext/look_up.dm index 9818fb9178f..28c7537a4f4 100644 --- a/code/modules/flufftext/look_up.dm +++ b/code/modules/flufftext/look_up.dm @@ -2,7 +2,7 @@ /mob/living/verb/look_up() set name = "Look Up" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Look above you, and hope there's no ceiling spiders." to_chat(usr, "You look upwards...") diff --git a/code/modules/food/drinks/bottle.dm b/code/modules/food/drinks/bottle.dm index cacc715625e..3c64ffaf6d1 100644 --- a/code/modules/food/drinks/bottle.dm +++ b/code/modules/food/drinks/bottle.dm @@ -80,7 +80,7 @@ /obj/item/reagent_containers/food/drinks/bottle/verb/smash_bottle() set name = "Smash Bottle" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/list/things_to_smash_on = list() for(var/atom/A in range (1, usr)) diff --git a/code/modules/food/machinery/appliance/_appliance.dm b/code/modules/food/machinery/appliance/_appliance.dm index 33790c87431..8bf657ddfac 100644 --- a/code/modules/food/machinery/appliance/_appliance.dm +++ b/code/modules/food/machinery/appliance/_appliance.dm @@ -167,7 +167,7 @@ /obj/machinery/appliance/proc/choose_output() set src in view() set name = "Choose output" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(!can_use_check(usr)) return diff --git a/code/modules/food/machinery/appliance/_mixer.dm b/code/modules/food/machinery/appliance/_mixer.dm index 2ac3ae28b44..c5ae636ae8b 100644 --- a/code/modules/food/machinery/appliance/_mixer.dm +++ b/code/modules/food/machinery/appliance/_mixer.dm @@ -38,7 +38,7 @@ fundamental differences /obj/machinery/appliance/mixer/choose_output() set src in oview(1) set name = "Choose output" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(!can_use_check()) return @@ -98,7 +98,7 @@ fundamental differences /obj/machinery/appliance/mixer/toggle_power() set src in view() set name = "Toggle Power" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/datum/cooking_item/CI = cooking_objs[1] if (!CI.container.check_contents()) diff --git a/code/modules/food/machinery/appliance/container.dm b/code/modules/food/machinery/appliance/container.dm index c91f77b1206..e1817c51d61 100644 --- a/code/modules/food/machinery/appliance/container.dm +++ b/code/modules/food/machinery/appliance/container.dm @@ -47,7 +47,7 @@ /obj/item/reagent_containers/cooking_container/verb/empty() set src in view(1) set name = "Empty Container" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Removes items from the container, excluding reagents." do_empty(usr) diff --git a/code/modules/food/machinery/appliance/oven.dm b/code/modules/food/machinery/appliance/oven.dm index 3e95c8de1c6..a3c6c42084c 100644 --- a/code/modules/food/machinery/appliance/oven.dm +++ b/code/modules/food/machinery/appliance/oven.dm @@ -78,7 +78,7 @@ /obj/machinery/appliance/cooker/oven/choose_output() set src in view() set name = "Choose output" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(!can_use_check(usr)) return @@ -104,7 +104,7 @@ /obj/machinery/appliance/cooker/oven/verb/toggle_door() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Open/close oven door" try_toggle_door(usr) diff --git a/code/modules/food/machinery/gibber.dm b/code/modules/food/machinery/gibber.dm index c48a4a1cfc6..128eed53e59 100644 --- a/code/modules/food/machinery/gibber.dm +++ b/code/modules/food/machinery/gibber.dm @@ -147,7 +147,7 @@ update_icon() /obj/machinery/gibber/verb/eject() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Empty Gibber" set src in oview(1) diff --git a/code/modules/food/machinery/microwave.dm b/code/modules/food/machinery/microwave.dm index 3b032bc0548..fbd660f080f 100644 --- a/code/modules/food/machinery/microwave.dm +++ b/code/modules/food/machinery/microwave.dm @@ -433,7 +433,7 @@ /obj/machinery/microwave/verb/Eject() set src in oview(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject content" usr.visible_message( "[usr] tries to open [src] and remove its contents." , diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 910cf957b37..7b76176cb2a 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -76,7 +76,7 @@ /obj/item/deck/verb/draw_card() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Draw" set desc = "Draw a card from a deck." set src in view(1) @@ -118,7 +118,7 @@ /obj/item/deck/verb/deal_card() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Deal" set desc = "Deal a card from a deck." set src in view(1) @@ -142,7 +142,7 @@ /obj/item/deck/verb/deal_card_multi() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Deal Multiple Cards" set desc = "Deal multiple cards from a deck." set src in view(1) @@ -220,7 +220,7 @@ /obj/item/deck/verb/verb_shuffle() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Shuffle" set desc = "Shuffle the cards in the deck." set src in view(1) @@ -316,7 +316,7 @@ /obj/item/hand/verb/discard() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Discard" set desc = "Place (a) card(s) from your hand in front of you." @@ -366,7 +366,7 @@ /obj/item/hand/verb/Removecard() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Remove card" set desc = "Remove a card from the hand." set src in view(1) diff --git a/code/modules/games/dice.dm b/code/modules/games/dice.dm index a62a6699c87..55bf090bfdd 100644 --- a/code/modules/games/dice.dm +++ b/code/modules/games/dice.dm @@ -168,7 +168,7 @@ to_chat(viewer, "The [D.name] shows a [D.result].") /obj/item/storage/dicecup/verb/peekAtDice() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Peek at Dice" set desc = "Peek at the dice under your cup." @@ -176,7 +176,7 @@ /obj/item/storage/dicecup/verb/revealDiceHand() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Reveal Dice" set desc = "Reveal the dice hidden under your cup." diff --git a/code/modules/guidebook/guidebook.dm b/code/modules/guidebook/guidebook.dm index 6aa92d6e6f1..26bcc08509f 100644 --- a/code/modules/guidebook/guidebook.dm +++ b/code/modules/guidebook/guidebook.dm @@ -65,6 +65,6 @@ GLOBAL_DATUM_INIT(guidebook, /datum/guidebook, new) /client/verb/access_guidebook() set name = "Access Guidebook" - set category = "OOC" + set category = VERB_CATEGORY_OOC GLOB.guidebook.ui_interact(src) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 75aa5e52051..074840debc1 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -380,7 +380,7 @@ /obj/machinery/portable_atmospherics/hydroponics/verb/remove_label() set name = "Remove Label" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(usr.incapacitated()) @@ -396,7 +396,7 @@ /obj/machinery/portable_atmospherics/hydroponics/verb/setlight() set name = "Set Light" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(usr.incapacitated()) @@ -641,7 +641,7 @@ /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb() set name = "Toggle Tray Lid" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(usr.incapacitated()) return diff --git a/code/modules/instruments/songs/play_legacy.dm b/code/modules/instruments/songs/play_legacy.dm index 17cd68bf107..5e5b25e5749 100644 --- a/code/modules/instruments/songs/play_legacy.dm +++ b/code/modules/instruments/songs/play_legacy.dm @@ -78,5 +78,5 @@ var/sound/music_played = sound(soundfile) for(var/i in hearing_mobs) var/mob/M = i - M.playsound_local(source, null, volume * using_instrument.volume_multiplier, falloff = 5, S = music_played, preference = /datum/client_preference/instrument_toggle) + M.playsound_local(source, null, volume * using_instrument.volume_multiplier, falloff = 5, S = music_played, preference = /datum/game_preference_toggle/sfx/instruments) // Could do environment and echo later but not for now diff --git a/code/modules/instruments/songs/play_synthesized.dm b/code/modules/instruments/songs/play_synthesized.dm index b51b0b7d01d..5ea477782f0 100644 --- a/code/modules/instruments/songs/play_synthesized.dm +++ b/code/modules/instruments/songs/play_synthesized.dm @@ -80,7 +80,7 @@ last_channel_played = channel_text for(var/i in hearing_mobs) var/mob/M = i - M.playsound_local(get_turf(parent), null, volume, FALSE, K.frequency, INSTRUMENT_DISTANCE_NO_FALLOFF, FALSE, channel, null, copy, /datum/client_preference/instrument_toggle, distance_multiplier = INSTRUMENT_DISTANCE_FALLOFF_BUFF) + M.playsound_local(get_turf(parent), null, volume, FALSE, K.frequency, INSTRUMENT_DISTANCE_NO_FALLOFF, FALSE, channel, null, copy, /datum/game_preference_toggle/sfx/instruments, distance_multiplier = INSTRUMENT_DISTANCE_FALLOFF_BUFF) // Could do environment and echo later but not for now /datum/song/proc/terminate_all_sounds(clear_channels = TRUE) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index d07fab6cb60..ce6f8a5c68f 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -306,7 +306,7 @@ */ /obj/item/electronic_assembly/verb/rename() set name = "Rename Circuit" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Rename your circuit, useful to stay organized." set src in usr diff --git a/code/modules/integrated_electronics/core/assemblies/device.dm b/code/modules/integrated_electronics/core/assemblies/device.dm index 656754f09cb..205160dd060 100644 --- a/code/modules/integrated_electronics/core/assemblies/device.dm +++ b/code/modules/integrated_electronics/core/assemblies/device.dm @@ -60,7 +60,7 @@ /obj/item/assembly/electronic_assembly/verb/toggle() set src in usr - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Open/Close Device Assembly" set desc = "Open or close device assembly!" diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index b26c514d50f..5326044896e 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -115,7 +115,7 @@ a creative player the means to solve many problems. Circuits are held inside an /obj/item/integrated_circuit/verb/rename_component() set name = "Rename Circuit" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Rename your circuit, useful to stay organized." set src in usr diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index f0aa414c57b..71775b65f6a 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -17,6 +17,9 @@ set instant = TRUE set hidden = TRUE + if(!preferences.initialized) + return + client_keysend_amount += 1 var/cache = client_keysend_amount @@ -72,7 +75,7 @@ else full_key = "[AltMod][CtrlMod][ShiftMod][_key]" var/keycount = 0 - for(var/kb_name in prefs.key_bindings[full_key]) + for(var/kb_name in preferences.keybindings[full_key]) keycount++ var/datum/keybinding/kb = GLOB.keybindings_by_name[kb_name] if(kb.can_use(src) && kb.down(src) && keycount >= MAX_COMMANDS_PER_KEY) @@ -134,7 +137,7 @@ // We don't do full key for release, because for mod keys you // can hold different keys and releasing any should be handled by the key binding specifically - for (var/kb_name in prefs.key_bindings[_key]) + for (var/kb_name in preferences.keybindings[_key]) var/datum/keybinding/kb = GLOB.keybindings_by_name[kb_name] if(kb.can_use(src) && kb.up(src)) break @@ -149,13 +152,13 @@ return mob.key_focus?.keyLoop(src) -/client/proc/update_movement_keys(datum/preferences/direct_prefs) - var/datum/preferences/D = prefs || direct_prefs - if(!D?.key_bindings) +/client/proc/update_movement_keys(datum/game_preferences/direct_prefs) + var/datum/game_preferences/D = preferences || direct_prefs + if(!D?.keybindings) return movement_keys = list() - for(var/key in D.key_bindings) - for(var/kb_name in D.key_bindings[key]) + for(var/key in D.keybindings) + for(var/kb_name in D.keybindings[key]) switch(kb_name) if("North") movement_keys[key] = NORTH diff --git a/code/modules/keybindings/keybind/_keybind.dm b/code/modules/keybindings/keybind/_keybind.dm index 1d68e2d0373..7e0744471d8 100644 --- a/code/modules/keybindings/keybind/_keybind.dm +++ b/code/modules/keybindings/keybind/_keybind.dm @@ -3,13 +3,15 @@ var/list/classic_keys var/name var/full_name - var/description = "" + var/description = "No description provided." var/category = CATEGORY_MISC var/weight = WEIGHT_LOWEST + // todo: what is this for / why do we have it / should we do this? + // keybinds using primarily signals is kind of a :/ + // because said components can't really inject keybind data into prefs.. var/keybind_signal /datum/keybinding/New() - // Default keys to the master "hotkey_keys" if(LAZYLEN(hotkey_keys) && !LAZYLEN(classic_keys)) classic_keys = hotkey_keys.Copy() @@ -22,3 +24,17 @@ /datum/keybinding/proc/can_use(client/user) return TRUE + +/datum/keybinding/proc/is_visible(client/user) + return TRUE + +/** + * Data for a GamePreferenceKeybind + */ +/datum/keybinding/proc/tgui_keybinding_data() + return list( + "id" = name, + "name" = full_name, + "desc" = description, + "category" = category, + ) diff --git a/code/modules/keybindings/keybind/admin.dm b/code/modules/keybindings/keybind/admin.dm index 99dcd18ca77..135923aecad 100644 --- a/code/modules/keybindings/keybind/admin.dm +++ b/code/modules/keybindings/keybind/admin.dm @@ -5,6 +5,9 @@ /datum/keybinding/admin/can_use(client/user) return user.holder ? TRUE : FALSE +/datum/keybinding/admin/is_visible(client/user) + return !!user.holder + /datum/keybinding/admin/admin_say hotkey_keys = list("F5") name = "admin_say" @@ -16,7 +19,7 @@ return TRUE /datum/keybinding/admin/admin_ghost - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "admin_ghost" full_name = "Aghost" description = "Go ghost" @@ -36,7 +39,7 @@ return TRUE /datum/keybinding/admin/toggle_buildmode_self - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "toggle_buildmode_self" full_name = "Toggle Buildmode Self" description = "Toggles buildmode" @@ -46,7 +49,7 @@ return TRUE /datum/keybinding/admin/stealthmode - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "stealth_mode" full_name = "Stealth mode" description = "Enters stealth mode" @@ -76,7 +79,7 @@ return TRUE /datum/keybinding/admin/deadsay - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "dsay" full_name = "deadsay" description = "Allows you to send a message to dead chat" @@ -86,7 +89,7 @@ return TRUE /datum/keybinding/admin/deadmin - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "deadmin" full_name = "Deadmin" description = "Shed your admin powers" @@ -96,7 +99,7 @@ return TRUE /datum/keybinding/admin/readmin - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "readmin" full_name = "Readmin" description = "Regain your admin powers" diff --git a/code/modules/keybindings/keybind/carbon.dm b/code/modules/keybindings/keybind/carbon.dm index ee2ee48e8cd..8a9a9e9c61d 100644 --- a/code/modules/keybindings/keybind/carbon.dm +++ b/code/modules/keybindings/keybind/carbon.dm @@ -33,7 +33,7 @@ hotkey_keys = list("1") name = "select_help_intent" full_name = "Select help intent" - description = "" + description = "No description provided." category = CATEGORY_CARBON /datum/keybinding/carbon/select_help_intent/down(client/user) @@ -44,7 +44,7 @@ hotkey_keys = list("2") name = "select_disarm_intent" full_name = "Select disarm intent" - description = "" + description = "No description provided." category = CATEGORY_CARBON /datum/keybinding/carbon/select_disarm_intent/down(client/user) @@ -55,7 +55,7 @@ hotkey_keys = list("3") name = "select_grab_intent" full_name = "Select grab intent" - description = "" + description = "No description provided." category = CATEGORY_CARBON /datum/keybinding/carbon/select_grab_intent/down(client/user) @@ -66,7 +66,7 @@ hotkey_keys = list("4") name = "select_harm_intent" full_name = "Select harm intent" - description = "" + description = "No description provided." category = CATEGORY_CARBON /datum/keybinding/carbon/select_harm_intent/down(client/user) diff --git a/code/modules/keybindings/keybind/client.dm b/code/modules/keybindings/keybind/client.dm index 2bce8f45039..84d844e9a47 100644 --- a/code/modules/keybindings/keybind/client.dm +++ b/code/modules/keybindings/keybind/client.dm @@ -3,7 +3,7 @@ weight = WEIGHT_HIGHEST /datum/keybinding/client/admin_help - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "admin_help" full_name = "Admin Help" description = "Ask an admin for help." @@ -13,7 +13,7 @@ return TRUE /datum/keybinding/client/screenshot - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "screenshot" full_name = "Screenshot" description = "Take a screenshot." diff --git a/code/modules/keybindings/keybind/emote.dm b/code/modules/keybindings/keybind/emote.dm index a3d1926243b..7c06ba61e12 100644 --- a/code/modules/keybindings/keybind/emote.dm +++ b/code/modules/keybindings/keybind/emote.dm @@ -5,7 +5,7 @@ var/emote_key /datum/keybinding/emote/proc/link_to_emote(datum/emote/faketype) - hotkey_keys = list("Unbound") + hotkey_keys = list() emote_key = initial(faketype.key) name = initial(faketype.key) full_name = capitalize(initial(faketype.key)) diff --git a/code/modules/keybindings/keybind/mob.dm b/code/modules/keybindings/keybind/mob.dm index 961eb396cce..8472f2d4ef7 100644 --- a/code/modules/keybindings/keybind/mob.dm +++ b/code/modules/keybindings/keybind/mob.dm @@ -6,7 +6,7 @@ hotkey_keys = list("CtrlW", "CtrlNorth") name = "face_north" full_name = "Face North" - description = "" + description = "No description provided." /datum/keybinding/mob/face_north/down(client/user) var/mob/M = user.mob @@ -17,7 +17,7 @@ hotkey_keys = list("CtrlD", "CtrlEast") name = "face_east" full_name = "Face East" - description = "" + description = "No description provided." /datum/keybinding/mob/face_east/down(client/user) var/mob/M = user.mob @@ -28,7 +28,7 @@ hotkey_keys = list("CtrlS", "CtrlSouth") name = "face_south" full_name = "Face South" - description = "" + description = "No description provided." /datum/keybinding/mob/face_south/down(client/user) var/mob/M = user.mob @@ -39,7 +39,7 @@ hotkey_keys = list("CtrlA", "CtrlWest") name = "face_west" full_name = "Face West" - description = "" + description = "No description provided." /datum/keybinding/mob/face_west/down(client/user) var/mob/M = user.mob @@ -50,7 +50,7 @@ hotkey_keys = list("J", "Delete") name = "stop_pulling" full_name = "Stop pulling" - description = "" + description = "No description provided." /datum/keybinding/mob/stop_pulling/down(client/user) var/mob/M = user.mob @@ -64,7 +64,7 @@ hotkey_keys = list("Northwest", "F") // HOME name = "cycle_intent_right" full_name = "cycle intent right" - description = "" + description = "No description provided." /datum/keybinding/mob/cycle_intent_right/down(client/user) var/mob/M = user.mob @@ -75,7 +75,7 @@ hotkey_keys = list("Insert", "G") name = "cycle_intent_left" full_name = "cycle intent left" - description = "" + description = "No description provided." /datum/keybinding/mob/cycle_intent_left/down(client/user) var/mob/M = user.mob @@ -86,7 +86,7 @@ hotkey_keys = list("X", "Northeast") // PAGEUP name = "swap_hands" full_name = "Swap hands" - description = "" + description = "No description provided." /datum/keybinding/mob/swap_hands/down(client/user) var/mob/M = user.mob @@ -202,7 +202,7 @@ hotkey_keys = list("Q") name = "drop_item" full_name = "Drop Item" - description = "" + description = "No description provided." /datum/keybinding/mob/drop_item/down(client/user) if(isrobot(user.mob)) //cyborgs can't drop items @@ -218,8 +218,8 @@ /datum/keybinding/mob/toggle_gun_mode hotkey_keys = list("J") name = "toggle_gun_mode" - full_name = "Toggle gun mode between aiming/hostage-taking and immediate fire." - description = "" + full_name = "Aim / Fire Toggle" + description = "Toggle your gun between taking aim at someone/taking hostages, and immediately firing on click." /datum/keybinding/mob/toggle_gun_mode/down(client/user) user.mob.toggle_gun_mode() @@ -242,7 +242,7 @@ return TRUE /datum/keybinding/mob/toggle_move_intent_alternative - hotkey_keys = list("Unbound") + hotkey_keys = list() name = "toggle_move_intent_alt" full_name = "press to cycle move intent" description = "Pressing this cycle to the opposite move intent, does not cycle back" @@ -256,7 +256,7 @@ hotkey_keys = list("Numpad8") name = "target_head_cycle" full_name = "Target: Cycle head" - description = "" + description = "No description provided." /datum/keybinding/mob/target_head_cycle/down(client/user) user.body_toggle_head() @@ -266,7 +266,7 @@ hotkey_keys = list("Numpad4") name = "target_r_arm" full_name = "Target: right arm" - description = "" + description = "No description provided." /datum/keybinding/mob/target_r_arm/down(client/user) user.body_r_arm() @@ -276,7 +276,7 @@ hotkey_keys = list("Numpad5") name = "target_body_chest" full_name = "Target: Body" - description = "" + description = "No description provided." /datum/keybinding/mob/target_body_chest/down(client/user) user.body_chest() @@ -286,7 +286,7 @@ hotkey_keys = list("Numpad6") name = "target_left_arm" full_name = "Target: left arm" - description = "" + description = "No description provided." /datum/keybinding/mob/target_left_arm/down(client/user) user.body_l_arm() @@ -296,7 +296,7 @@ hotkey_keys = list("Numpad1") name = "target_right_leg" full_name = "Target: Right leg" - description = "" + description = "No description provided." /datum/keybinding/mob/target_right_leg/down(client/user) user.body_r_leg() @@ -306,7 +306,7 @@ hotkey_keys = list("Numpad2") name = "target_body_groin" full_name = "Target: Groin" - description = "" + description = "No description provided." /datum/keybinding/mob/target_body_groin/down(client/user) user.body_groin() @@ -316,7 +316,7 @@ hotkey_keys = list("Numpad3") name = "target_left_leg" full_name = "Target: left leg" - description = "" + description = "No description provided." /datum/keybinding/mob/target_left_leg/down(client/user) user.body_l_leg() diff --git a/code/modules/keybindings/keybind/movement.dm b/code/modules/keybindings/keybind/movement.dm index 7d2358d1162..ebcfa276a22 100644 --- a/code/modules/keybindings/keybind/movement.dm +++ b/code/modules/keybindings/keybind/movement.dm @@ -94,7 +94,7 @@ hotkey_keys = list("CtrlShiftW", "CtrlShiftNorth") name = "pixel_shift_north" full_name = "Pixel Shift North" - description = "" + description = "No description provided." category = CATEGORY_MOVEMENT /datum/keybinding/mob/shift_north/down(client/user) @@ -106,7 +106,7 @@ hotkey_keys = list("CtrlShiftD", "CtrlShiftEast") name = "pixel_shift_east" full_name = "Pixel Shift East" - description = "" + description = "No description provided." category = CATEGORY_MOVEMENT /datum/keybinding/mob/shift_east/down(client/user) @@ -118,7 +118,7 @@ hotkey_keys = list("CtrlShiftS", "CtrlShiftSouth") name = "pixel_shift_south" full_name = "Pixel Shift South" - description = "" + description = "No description provided." category = CATEGORY_MOVEMENT /datum/keybinding/mob/shift_south/down(client/user) @@ -130,7 +130,7 @@ hotkey_keys = list("CtrlShiftA", "CtrlShiftWest") name = "pixel_shift_west" full_name = "Pixel Shift West" - description = "" + description = "No description provided." category = CATEGORY_MOVEMENT /datum/keybinding/mob/shift_west/down(client/user) diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 1b39171aef1..8e3ee109ef1 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -35,7 +35,7 @@ /client/verb/fix_macros() set name = "Fix Keybindings" set desc = "Re-assert all your macros/keybindings." - set category = "OOC" + set category = VERB_CATEGORY_OOC if(!SSinput.initialized) to_chat(src, "Input hasn't been initialized yet. Wait a while.") return @@ -62,7 +62,7 @@ var/command = macroset[key] winset(src, "[name]-[REF(key)]", "parent=[name];name=[key];command=[command]") -/client/proc/set_macros(datum/preferences/prefs_override = prefs) +/client/proc/set_macros(datum/game_preferences/prefs_override = preferences) set waitfor = FALSE keys_held.Cut() @@ -81,10 +81,10 @@ window.set_mouse_macro() set_hotkeys_preference() - set_hotkeys_button(prefs_override.hotkeys) + set_hotkeys_button(prefs_override.is_hotkeys_mode()) -/client/proc/set_hotkeys_preference(datum/preferences/prefs_override = prefs) - if(prefs_override.hotkeys) +/client/proc/set_hotkeys_preference(datum/game_preferences/prefs_override = preferences) + if(prefs_override.is_hotkeys_mode()) winset(src, null, "map.focus=true input.background-color=[COLOR_INPUT_DISABLED] mainwindow.macro=[SKIN_MACROSET_HOTKEYS]") else winset(src, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=[SKIN_MACROSET_CLASSIC_INPUT]") diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 268033e32f0..c491b968da3 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -276,15 +276,15 @@ return 0 /mob/proc/get_language_prefix() - return client?.prefs?.get_primary_language_prefix() || config_legacy.language_prefixes[1] + return config_legacy.language_prefixes[1] /mob/proc/is_language_prefix(prefix) - return client?.prefs?.is_language_prefix(prefix) || (prefix in config_legacy.language_prefixes) + return (prefix in config_legacy.language_prefixes) //TBD /mob/verb/check_languages() set name = "Check Known Languages" - set category = "IC" + set category = VERB_CATEGORY_IC set src = usr var/dat = "Known Languages

" diff --git a/code/modules/language/languages/silicons.dm b/code/modules/language/languages/silicons.dm index 95f1b679679..9a921a0f87f 100644 --- a/code/modules/language/languages/silicons.dm +++ b/code/modules/language/languages/silicons.dm @@ -26,7 +26,7 @@ for (var/mob/M in dead_mob_list) if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping var/message_to_send = "[message_start] ([ghost_follow_link(speaker, M)]) [message_body]" - if(M.check_mentioned(message) && M.is_preference_enabled(/datum/client_preference/check_mention)) + if(M.check_mentioned(message) && M.get_preference_toggle(/datum/game_preference_toggle/game/legacy_name_highlight)) message_to_send = "[message_to_send]" M.show_message(message_to_send, 2) @@ -39,7 +39,7 @@ continue var/message_to_send = "[message_start] [message_body]" - if(S.check_mentioned(message) && S.is_preference_enabled(/datum/client_preference/check_mention)) + if(S.check_mentioned(message) && S.get_preference_toggle(/datum/game_preference_toggle/game/legacy_name_highlight)) message_to_send = "[message_to_send]" S.show_message(message_to_send, 2) diff --git a/code/modules/maps/overmap/planets/admin_croatoan.dm b/code/modules/maps/overmap/planets/admin_croatoan.dm new file mode 100644 index 00000000000..8096fac3079 --- /dev/null +++ b/code/modules/maps/overmap/planets/admin_croatoan.dm @@ -0,0 +1,245 @@ +/obj/overmap/entity/visitable/sector/admin/croatoan + name = "Frozen Planet" + desc = "A cold unassuming world shrouded in cold and snow that seems to never let up." + scanner_desc = @{"[b][i]Registration[/i][/b]: NSB Croatoan +[b][i]Class[/i][/b]: OMEGA SITE +[b][i]Transponder[/i][/b]: Transmitting (RED ALERT), Nanotrasen IFF +[b][i]Notice[/i][/b]: HIGH SECURITY FACILITY, unauthorized landing groups will be arrested."} + icon_state = "globe" + color = "#3434AA" + known = FALSE + in_space = 0 + +/datum/map_template/sector/overmap/admin/croatoan + name = "OM Planet - NSB Croatoan (New Z)" + desc = "NSB Croatoan, a Nanotrasen Research Facility." + prefix = "maps/sectors/admin_planets_192/" + suffix = "croatoan.dmm" + +/area/admin_planet/croatoan + name = "NSB Croatoan" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 + +/area/admin_planet/croatoan/civ_checkpoint + name = "NSB Croatoan - Civilian Checkpoint" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/landing_pad + name = "NSB Croatoan - Landing Pads" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/mountain + name = "NSB Croatoan - Mountain Depths" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/civ_bar_public + name = "NSB Croatoan - Bar" + icon_state = "away" +/area/admin_planet/croatoan/civilian/dorms + name = "NSB Croatoan - Dormitories" + icon_state = "away" +/area/admin_planet/croatoan/civ_hydro + name = "NSB Croatoan - Hydroponics" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/civ_kitchen + name = "NSB Croatoan - Kitchen" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_checkpoint_lower + name = "NSB Croatoan - Lower Medical Checkpoint" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_checkpoint_upper + name = "NSB Croatoan - Upper Medical Checkpoint" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/mountain_plains + name = "NSB Croatoan - Mountain Plains" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_reception + name = "NSB Croatoan - Medical Ward Reception" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_lobby + name = "NSB Croatoan - Medical Ward Lobby" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_treatment + name = "NSB Croatoan - Medical Ward Treatment Center" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_chemistry + name = "NSB Croatoan - Medical Ward Chemistry" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_storage + name = "NSB Croatoan - Medical Ward Treatment Storage" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_morgue + name = "NSB Croatoan - Medical Ward Morgue" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/med_cmo_office + name = "NSB Croatoan - Medical Ward CMO Office" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_lower_checkpoint + name = "NSB Croatoan - Science Wing Lower Checkpoint" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_upper_checkpoint + name = "NSB Croatoan - Science Wing Upper Checkpoint" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_entry_hallway + name = "NSB Croatoan - Science Wing Entry Hallway" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_canister_storage + name = "NSB Croatoan - Science Wing Canister Storage" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_primary_hallway + name = "NSB Croatoan - Science Wing Primary Hallway" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_rnd_lab + name = "NSB Croatoan - Science Wing RnD Laboratory" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_robotics_lab + name = "NSB Croatoan - Science Wing Robotics Bay" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_cargo_shuttle_pad + name = "NSB Croatoan - Science Wing Cargo Landing Pad" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_anomaly_lab + name = "NSB Croatoan - Science Wing Anomaly Lab" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_xenoflora_lab + name = "NSB Croatoan - Science Wing Xenocflora lab" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sci_circuitry_lab + name = "NSB Croatoan - Science Wing Circuitry Lab" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_entrance_hallway + name = "NSB Croatoan - Security Wing Entrance Hallway" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_operations_center + name = "NSB Croatoan - Security Wing Operations Center" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_holding_cells + name = "NSB Croatoan - Security Wing Holding Cells" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_main_hallway + name = "NSB Croatoan - Security Wing Main Hallway" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_equipment_storage + name = "NSB Croatoan - Security Wing Equipment Storage" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_forensics_lab + name = "NSB Croatoan - Security Wing Forensics Laboratory" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_armory + name = "NSB Croatoan - Security Wing Armory" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/sec_hos_office + name = "NSB Croatoan - Security Wing HoS Office" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint + name = "NSB Croatoan - High Security Science Division Lower Checkpoint" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_entrance + name = "NSB Croatoan - High Security Science Division Entrance" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_checkpoint + name = "NSB Croatoan - High Security Science Division Entrance Checkpoint" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_control_center + name = "NSB Croatoan - High Security Science Division Control Center" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_primary_hallway + name = "NSB Croatoan - High Security Science Division Primary Hallway" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_containment_cells + name = "NSB Croatoan - High Security Science Division Containment Cells" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_virology_lab + name = "NSB Croatoan - High Security Science Division Virology Laboratory" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/high_sec_science_observation + name = "NSB Croatoan - High Security Science Division Observation" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 +/area/admin_planet/croatoan/extreme_security_containment_facilities + name = "NSB Croatoan - Extreme Security Containment Facility" + icon_state = "away" + requires_power = 1 + dynamic_lighting = 1 diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm index 189e6a85a7b..edc2ed313d1 100644 --- a/code/modules/media/mediamanager.dm +++ b/code/modules/media/mediamanager.dm @@ -54,7 +54,7 @@ /client/verb/change_volume() set name = "Set Volume" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Set jukebox volume" set_new_volume(usr) @@ -140,7 +140,7 @@ /datum/media_manager/proc/send_update() if(!(owner.prefs)) return - if(!owner.is_preference_enabled(/datum/client_preference/play_jukebox) && url != "") + if(!owner.get_preference_toggle(/datum/game_preference_toggle/music/jukebox) && url != "") return // Don't send anything other than a cancel to people with SOUND_STREAMING pref disabled MP_DEBUG("Sending update to mediapanel ([url], [(world.time - start_time) / 10], [volume * source_volume])...") owner << output(list2params(list(url, (world.time - start_time) / 10, volume * source_volume)), "[WINDOW_ID]:SetMusic") diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 4c5d3cf9bae..5fa194bf471 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -302,7 +302,7 @@ /obj/machinery/mining/drill/verb/unload_drill() set name = "Unload Drill" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) unload(usr) @@ -420,7 +420,7 @@ /obj/machinery/mining/brace/verb/rotate_clockwise() set name = "Rotate Brace Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) rotating_clockwise(usr) diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index 72074701def..b4dfa725512 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -84,7 +84,7 @@ /obj/structure/ore_box/verb/empty_box() set name = "Empty Ore Box" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(!istype(usr, /mob/living/carbon/human) && !istype(usr, /mob/living/silicon/robot)) //Only living, intelligent creatures with gripping aparatti can empty ore boxes. diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm index ce25032ee05..9da78241152 100644 --- a/code/modules/mob/animations.dm +++ b/code/modules/mob/animations.dm @@ -249,7 +249,7 @@ note dizziness decrements automatically in the mob's Life() proc. // for(var/m in viewers(A)) // var/mob/M = m // var/client/C = M.client - // if(C && C.is_preference_enabled(/datum/client_preference/attack_icons)) + // if(C && C.get_preference_toggle(/datum/client_preference/attack_icons)) // viewing += M.client // //Animals attacking each other in the distance, probably. Forgeddaboutit. diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 0cde1b1bcda..4c0626c6c9f 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -67,7 +67,7 @@ to_chat(src, "You cannot send deadchat emotes (muted).") return - if(!is_preference_enabled(/datum/client_preference/show_dsay)) + if(!get_preference_toggle(/datum/game_preference_toggle/chat/dsay)) to_chat(src, "You have deadchat muted.") return diff --git a/code/modules/mob/floating_message.dm b/code/modules/mob/floating_message.dm index 19c86871091..7ae05e529e0 100644 --- a/code/modules/mob/floating_message.dm +++ b/code/modules/mob/floating_message.dm @@ -37,7 +37,7 @@ var/list/floating_chat_colors = list() var/image/gibberish = speaking ? generate_floating_text(src, speaking.scramble(message), style, fontsize, duration, show_to) : understood for(var/client/C in show_to) - if(!C.mob.is_deaf() && C.is_preference_enabled(/datum/client_preference/overhead_chat)) + if(!C.mob.is_deaf() && C.get_preference_toggle(/datum/game_preference_toggle/game/overhead_chat)) if(C.mob.say_understands(null, speaking)) C.images += understood else diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 9779d52ec32..a9049881f76 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -4,7 +4,7 @@ if(!client && !teleop) return - if(speaker && !speaker.client && istype(src,/mob/observer/dead) && is_preference_enabled(/datum/client_preference/ghost_ears) && !(speaker in view(src))) + if(speaker && !speaker.client && istype(src,/mob/observer/dead) && get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears) && !(speaker in view(src))) //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') //Or someone snoring. So we make it where they won't hear it. return @@ -52,7 +52,7 @@ if(speaker_name != speaker.real_name && speaker.real_name) speaker_name = "[speaker.real_name] ([speaker_name])" track = "([ghost_follow_link(speaker, src)]) " - if(is_preference_enabled(/datum/client_preference/ghost_ears) && (speaker in view(src))) + if(get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears) && (speaker in view(src))) message = "[message]" if(is_deaf()) @@ -65,12 +65,12 @@ var/message_to_send = null if(language) //Hivemind languages already say their names. Also, no indicator if you don't know the language. - if(client && !(language.language_flags & LANGUAGE_HIVEMIND) && say_understands(speaker, language) && language.shorthand && client.is_preference_enabled(/datum/client_preference/language_indicator)) + if(client && !(language.language_flags & LANGUAGE_HIVEMIND) && say_understands(speaker, language) && language.shorthand && client.get_preference_toggle(/datum/game_preference_toggle/chat/language_indicators)) verb += " ([language.shorthand])" message_to_send = "[speaker_name][alt_name] [track][language.format_message(message, verb)]" else message_to_send = "[speaker_name][alt_name] [track][verb], \"[message]\"" - if(check_mentioned(message) && is_preference_enabled(/datum/client_preference/check_mention)) + if(check_mentioned(message) && get_preference_toggle(/datum/game_preference_toggle/game/legacy_name_highlight)) message_to_send = "[message_to_send]" @@ -252,7 +252,7 @@ var/formatted if(language) - if(client && !(language.language_flags & LANGUAGE_HIVEMIND) && say_understands(speaker, language) && language.shorthand && client.is_preference_enabled(/datum/client_preference/language_indicator)) + if(client && !(language.language_flags & LANGUAGE_HIVEMIND) && say_understands(speaker, language) && language.shorthand && client.get_preference_toggle(/datum/game_preference_toggle/chat/language_indicators)) verb += " ([language.shorthand])" formatted = "[language.format_message_radio(message, verb)][part_c]" else @@ -270,20 +270,20 @@ /mob/proc/on_hear_radio(part_a, speaker_name, track, part_b, formatted) var/final_message = "[part_a][speaker_name][part_b][formatted]" - if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention)) + if(check_mentioned(formatted) && get_preference_toggle(/datum/game_preference_toggle/game/legacy_name_highlight)) final_message = "[final_message]" to_chat(src, final_message) /mob/observer/dead/on_hear_radio(part_a, speaker_name, track, part_b, formatted) var/final_message = "[part_a][track][part_b][formatted]" - if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention)) + if(check_mentioned(formatted) && get_preference_toggle(/datum/game_preference_toggle/game/legacy_name_highlight)) final_message = "[final_message]" to_chat(src, final_message) /mob/living/silicon/on_hear_radio(part_a, speaker_name, track, part_b, formatted) var/time = say_timestamp() var/final_message = "[part_a][speaker_name][part_b][formatted]" - if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention)) + if(check_mentioned(formatted) && get_preference_toggle(/datum/game_preference_toggle/game/legacy_name_highlight)) final_message = "[time][final_message]" else final_message = "[time][final_message]" @@ -292,7 +292,7 @@ /mob/living/silicon/ai/on_hear_radio(part_a, speaker_name, track, part_b, formatted) var/time = say_timestamp() var/final_message = "[part_a][track][part_b][formatted]" - if(check_mentioned(formatted) && is_preference_enabled(/datum/client_preference/check_mention)) + if(check_mentioned(formatted) && get_preference_toggle(/datum/game_preference_toggle/game/legacy_name_highlight)) final_message = "[time][final_message]" else final_message = "[time][final_message]" diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index c018ebd7715..35ee630816a 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -85,7 +85,7 @@ /mob/living/carbon/human/verb/toggle_autohiss() set name = "Toggle Autohiss" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Toggle your autohiss configuration between disabled, basic, and full." switch(autohiss_mode) @@ -102,7 +102,7 @@ /mob/living/carbon/human/verb/toggle_autohiss_type() set name = "Toggle Autohiss Type" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Set the type of autohissing you will do." var/new_autohiss_type = input(usr, "Select your new autohiss type.", "Autohiss Type") in list("None", SPECIES_UNATHI, "Tajaran") diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index ef2d3f2a6f9..40dc650e890 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -39,7 +39,7 @@ /obj/item/mmi/verb/toggle_radio() set name = "Toggle Brain Radio" set desc = "Enables or disables the integrated brain radio, which is only usable outside of a body." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr set popup_menu = 1 if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index 94136bfb347..876ccfeae8e 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -68,7 +68,7 @@ for(var/mob/M in dead_mob_list) if (!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers, and new_players - if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_sight) && !(M in viewers(src,null))) + if(M.stat == DEAD && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_sight) && !(M in viewers(src,null))) M.show_message(message) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index eb87ea70b47..7726bbf3fe5 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -235,7 +235,7 @@ /mob/living/carbon/verb/mob_sleep() set name = "Sleep" - set category = "IC" + set category = VERB_CATEGORY_IC if(is_sleeping()) diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm index ce50e991848..e08567103dc 100644 --- a/code/modules/mob/living/carbon/give.dm +++ b/code/modules/mob/living/carbon/give.dm @@ -1,5 +1,5 @@ /mob/living/carbon/human/verb/give(var/mob/living/carbon/target in valid_give_mobs()) - set category = "IC" + set category = VERB_CATEGORY_IC set name = "Give" // TODO : Change to incapacitated() on merge. diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 7841f8e3669..dc6a4f7a171 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -1055,7 +1055,7 @@ /mob/living/carbon/human/verb/pose() set name = "Set Pose" set desc = "Sets a description which will be shown when someone examines you." - set category = "IC" + set category = VERB_CATEGORY_IC var/datum/gender/T = GLOB.gender_datums[get_visible_gender()] @@ -1066,7 +1066,7 @@ /mob/living/carbon/human/verb/set_flavor() set name = "Set Flavour Text" set desc = "Sets an extended description of your character's features." - set category = "IC" + set category = VERB_CATEGORY_IC var/HTML = "" HTML += "
" @@ -1307,7 +1307,7 @@ /mob/living/carbon/human/verb/toggle_gender_identity_vr() set name = "Set Gender Identity" set desc = "Sets the pronouns when examined and performing an emote." - set category = "IC" + set category = VERB_CATEGORY_IC var/new_gender_identity = input("Please select a gender Identity.") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL, HERM) if(!new_gender_identity) return 0 @@ -1316,7 +1316,7 @@ /mob/living/carbon/human/verb/switch_tail_layer() set name = "Switch tail layer" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Switch tail layer on top." tail_alt = !tail_alt update_tail_showing() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b3d354b9381..59c9e65f598 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1049,7 +1049,7 @@ organ.status |= ORGAN_BLEEDING /mob/living/carbon/human/verb/check_pulse() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Check pulse" set desc = "Approximately count somebody's pulse. Requires you to stand still at least 6 seconds." set src in view(1) @@ -1205,7 +1205,7 @@ return set_species(/datum/species/human, force = force) /mob/living/carbon/human/proc/bloody_doodle() - set category = "IC" + set category = VERB_CATEGORY_IC set name = "Write in blood" set desc = "Use blood on your hands to write a short message on the floor or a wall, murder mystery style." @@ -1399,7 +1399,7 @@ return 1 /mob/living/carbon/human/proc/relocate() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Relocate Joint" set desc = "Pop a joint back into place. Extremely painful." set src in view(1) @@ -1460,7 +1460,7 @@ /mob/living/carbon/human/verb/toggle_underwear() set name = "Toggle Underwear" set desc = "Shows/hides selected parts of your underwear." - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(stat) return var/datum/category_group/underwear/UWC = input(usr, "Choose underwear:", "Show/hide underwear") as null|anything in GLOB.global_underwear.categories @@ -1477,7 +1477,7 @@ /mob/living/carbon/human/verb/pull_punches() set name = "Pull Punches" set desc = "Try not to hurt them." - set category = "IC" + set category = VERB_CATEGORY_IC if(stat) return pulling_punches = !pulling_punches diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 44c0112a272..56cf6cf52b3 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -417,7 +417,7 @@ /mob/living/carbon/human/verb/check_attacks() set name = "Check Attacks" - set category = "IC" + set category = VERB_CATEGORY_IC set src = usr var/dat = "Known Attacks

" diff --git a/code/modules/mob/living/carbon/human/human_modular_limbs.dm b/code/modules/mob/living/carbon/human/human_modular_limbs.dm index 6c2691a049c..d430cd66883 100644 --- a/code/modules/mob/living/carbon/human/human_modular_limbs.dm +++ b/code/modules/mob/living/carbon/human/human_modular_limbs.dm @@ -139,7 +139,7 @@ // Add or remove robotic limbs; check refresh_modular_limb_verbs() above. /mob/living/carbon/human/proc/attach_limb_verb() set name = "Attach Limb" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Attach a replacement limb." var/obj/item/organ/external/E = get_active_held_item() @@ -168,7 +168,7 @@ /mob/living/carbon/human/proc/detach_limb_verb() set name = "Remove Limb" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Detach one of your limbs." var/list/detachable_limbs = get_modular_limbs(return_first_found = FALSE, validate_proc = /obj/item/organ/external/proc/can_remove_modular_limb) diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 4257e89145c..3eeafaaa6b1 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -4,7 +4,7 @@ /mob/living/carbon/human/proc/tie_hair() set name = "Tie Hair" set desc = "Style your hair." - set category = "IC" + set category = VERB_CATEGORY_IC if(incapacitated()) to_chat(src, SPAN_WARNING("You can't mess with your hair right now!")) @@ -176,7 +176,7 @@ /mob/living/carbon/human/proc/self_diagnostics() set name = "Self-Diagnostics" set desc = "Run an internal self-diagnostic to check for damage." - set category = "IC" + set category = VERB_CATEGORY_IC if(stat == DEAD) return @@ -217,7 +217,7 @@ /mob/living/carbon/human/proc/setmonitor_state() set name = "Set monitor display" set desc = "Set your monitor display" - set category = "IC" + set category = VERB_CATEGORY_IC if(stat == DEAD) return @@ -314,7 +314,7 @@ /mob/living/carbon/human/verb/toggle_eyes_layer() set name = "Switch Eyes/Monitor Layer" set desc = "Toggle rendering of eyes/monitor above markings." - set category = "IC" + set category = VERB_CATEGORY_IC if(stat) to_chat(src, SPAN_WARNING("You must be awake and standing to perform this action!")) @@ -392,7 +392,7 @@ /mob/living/carbon/human/proc/hide_tail() set name = "Toggle Hide Tail" set desc = "Hide or reveal your tail." - set category = "IC" + set category = VERB_CATEGORY_IC if(tail_style && !tail_style.can_be_hidden) return @@ -403,7 +403,7 @@ /mob/living/carbon/human/proc/hide_wings() set name = "Toggle Hide Wings" set desc = "Hide or reveal your wings." - set category = "IC" + set category = VERB_CATEGORY_IC if(wing_style && !wing_style.can_be_hidden) return @@ -414,7 +414,7 @@ /mob/living/carbon/human/proc/hide_horns() set name = "Toggle Hide Horns" set desc = "Hide or reveal your horns." - set category = "IC" + set category = VERB_CATEGORY_IC if(horn_style && !horn_style.can_be_hidden) return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index c32a7104fb5..8b77562499d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1091,7 +1091,7 @@ if(noisy == TRUE && nutrition < 250 && prob(10)) var/sound/growlsound = sound(get_sfx("hunger_sounds")) var/growlmultiplier = 100 - (nutrition / 250 * 100) - playsound(src, growlsound, vol = growlmultiplier, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) + playsound(src, growlsound, vol = growlmultiplier, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) // TODO: stomach and bloodstream organ. if(!isSynthetic()) @@ -1855,7 +1855,7 @@ if(!H || (H.robotic >= ORGAN_ROBOT)) return - if(pulse >= PULSE_2FAST || shock_stage >= 10 || (istype(get_turf(src), /turf/space) && is_preference_enabled(/datum/client_preference/play_ambiance))) + if(pulse >= PULSE_2FAST || shock_stage >= 10 || (istype(get_turf(src), /turf/space) && get_preference_toggle(/datum/game_preference_toggle/ambience/area_ambience))) //PULSE_THREADY - maximum value for pulse, currently it 5. //High pulse value corresponds to a fast rate of heartbeat. //Divided by 2, otherwise it is too slow. diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm index e74cbd42a47..93bc61722b2 100644 --- a/code/modules/mob/living/default_language.dm +++ b/code/modules/mob/living/default_language.dm @@ -3,7 +3,7 @@ /mob/living/verb/set_default_language(language as anything in languages) set name = "Set Default Language" - set category = "IC" + set category = VERB_CATEGORY_IC if (only_species_language && language != SScharacters.resolve_language_name(species_language)) to_chat(src, "You can only speak your species language, [src.species_language].") @@ -28,7 +28,7 @@ /mob/living/verb/check_default_language() set name = "Check Default Language" - set category = "IC" + set category = VERB_CATEGORY_IC if(default_language) to_chat(src, "You are currently speaking [default_language] by default.") diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm index 9402e61f59f..c976de7746d 100644 --- a/code/modules/mob/living/inventory.dm +++ b/code/modules/mob/living/inventory.dm @@ -221,7 +221,7 @@ /mob/living/mode() set name = "Activate Held Object" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src = usr if(world.time <= next_click) // This isn't really a 'click' but it'll work for our purposes. diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5c9b43483fa..51241bb0c7e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -46,7 +46,7 @@ //mob verbs are faster than object verbs. See mob/verb/examine. /mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1)) set name = "Pull" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(AM.Adjacent(src)) start_pulling(AM) @@ -426,7 +426,7 @@ default behaviour is: /mob/living/proc/Examine_OOC() set name = "Examine Meta-Info (OOC)" - set category = "OOC" + set category = VERB_CATEGORY_OOC set src in view() // Making it so SSD people have prefs with fallback to original style. diff --git a/code/modules/mob/living/living_vr.dm b/code/modules/mob/living/living_vr.dm index 8e94f9f7c70..3466f9e54fc 100644 --- a/code/modules/mob/living/living_vr.dm +++ b/code/modules/mob/living/living_vr.dm @@ -1,5 +1,5 @@ /mob/living/verb/customsay() - set category = "IC" + set category = VERB_CATEGORY_IC set name = "Customise Speech Verbs" set desc = "Customise the text which appears when you type- e.g. 'says', 'asks', 'exclaims'." diff --git a/code/modules/mob/living/mobility.dm b/code/modules/mob/living/mobility.dm index a43e085e4b9..806aff17988 100644 --- a/code/modules/mob/living/mobility.dm +++ b/code/modules/mob/living/mobility.dm @@ -174,7 +174,7 @@ /mob/living/verb/lay_down() set name = "Rest" - set category = "IC" + set category = VERB_CATEGORY_IC to_chat(src, "You are now [resting_intentionally ? "attempting to stay upright." : "resting intentionally."]") toggle_intentionally_resting() diff --git a/code/modules/mob/living/resist.dm b/code/modules/mob/living/resist.dm index 4b73a7c3641..6b01f7b4836 100644 --- a/code/modules/mob/living/resist.dm +++ b/code/modules/mob/living/resist.dm @@ -1,6 +1,6 @@ /mob/living/verb/resist() set name = "Resist" - set category = "IC" + set category = VERB_CATEGORY_IC if(!incapacitated(INCAPACITATION_KNOCKOUT) && canClick()) setClickCooldown(20) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 3a0496bfc65..97a6ebf8f52 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -229,10 +229,6 @@ var/list/channel_to_radio_key = new //Autohiss handles auto-rolling tajaran R's and unathi S's/Z's message = handle_autohiss(message, speaking) - //autocorrect common typos - if(client?.is_preference_enabled(/datum/client_preference/autocorrect)) - message = autocorrect(message) - //Whisper vars var/w_scramble_range = 3 //The range at which you get ***as*th**wi**** var/w_adverb //An adverb prepended to the verb in whispers diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index eef605f5853..fa5eb18cd5c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -735,7 +735,7 @@ var/list/ai_verbs_default = list( // Pass lying down or getting up to our pet human, if we're in a hardsuit. /mob/living/silicon/ai/lay_down() set name = "Rest" - set category = "IC" + set category = VERB_CATEGORY_IC resting = 0 var/obj/item/hardsuit/hardsuit = src.get_hardsuit() diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index 318717d1eab..eb0ec74e2d8 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -2,7 +2,7 @@ GLOBAL_LIST_EMPTY(empty_playable_ai_cores) /mob/living/silicon/ai/verb/store_core() set name = "Store Core" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Enter intelligence storage. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." if(SSticker && SSticker.mode && SSticker.mode.name == "AI malfunction") diff --git a/code/modules/mob/living/silicon/pai/actions.dm b/code/modules/mob/living/silicon/pai/actions.dm index dee8c3e1fdb..e4c68bd00c8 100644 --- a/code/modules/mob/living/silicon/pai/actions.dm +++ b/code/modules/mob/living/silicon/pai/actions.dm @@ -87,3 +87,21 @@ var/mob/living/silicon/pai/user = owner button_visibility = (user.loc == user.card) + +/// Hologram Placement +/datum/action/pai/place_hologram + name = "Place Hologram" + desc = "Place a hologram of a scanned object on the floor." + button_icon_state = "pai_place_hologram" + +/datum/action/pai/place_hologram/on_trigger(mob/living/silicon/pai/user) + user.prompt_hologram_placement() + +/// Delete All Holograms +/datum/action/pai/delete_holograms + name = "Delete All Holograms" + desc = "Delete all placed holograms." + button_icon_state = "pai_delete_holograms" + +/datum/action/pai/delete_holograms/on_trigger(mob/living/silicon/pai/user) + user.delete_all_holograms() diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index 86fdf29ad54..df6796a3917 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -1,4 +1,5 @@ /mob/living/silicon/pai/death(gibbed) + delete_all_holograms() if(card) card.removePersonality() src.loc = get_turf(card) diff --git a/code/modules/mob/living/silicon/pai/hologram_effect.dm b/code/modules/mob/living/silicon/pai/hologram_effect.dm new file mode 100644 index 00000000000..8c84bf80b10 --- /dev/null +++ b/code/modules/mob/living/silicon/pai/hologram_effect.dm @@ -0,0 +1,22 @@ +/obj/effect/pai_hologram + name = "blank hologram" + desc = "You shouldn't be seeing this!" + + hit_sound_brute = 'sound/weapons/egloves.ogg' + hit_sound_burn = 'sound/weapons/egloves.ogg' + + var/mob/living/silicon/pai/owner + +/obj/effect/pai_hologram/attackby(obj/item/W, mob/user) + hologram_destroy(user) + +/obj/effect/pai_hologram/attack_hand(mob/user, list/params) + hologram_destroy(user) + +/obj/effect/pai_hologram/proc/hologram_destroy(mob/user) + user.visible_message(SPAN_WARNING("[user] dissipates the holographic [src.name]")) + QDEL_NULL(src) + +/obj/effect/pai_hologram/Destroy() + owner.handle_hologram_destroy(src) + . = ..() diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 1ec81b7a729..6c0d29201ba 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -1,3 +1,5 @@ +#define MAX_HOLOGRAMS 5 + /datum/category_item/catalogue/fauna/silicon/pai name = "Silicons - pAI" desc = "There remains some dispute over whether the 'p' stands \ @@ -123,7 +125,11 @@ /datum/action/pai/change_chassis, /datum/action/pai/clothing_transform, /datum/action/pai/revert_to_card, - /datum/action/pai/hologram_display) + /datum/action/pai/hologram_display, + /datum/action/pai/place_hologram, + /datum/action/pai/delete_holograms) + + var/list/active_holograms = list() /mob/living/silicon/pai/Initialize(mapload) . = ..() @@ -325,7 +331,7 @@ return /obj/item/clothing/suit /mob/living/silicon/pai/AltClickOn(var/atom/A) - if((isobj(A) || ismob(A)) && in_range_of(src, A) && !istype(A, /obj/item/paicard)) + if((isobj(A) || ismob(A)) && in_range_of(src, A) && !istype(A, /obj/item/paicard) && !istype(A, /obj/effect/pai_hologram)) if(world.time > last_scanned_time + 600) last_scanned_time = world.time scan_object(A) @@ -464,3 +470,34 @@ if(A.update_on_chassis_change) A.update_button() update_action_buttons() + +/mob/living/silicon/pai/proc/handle_hologram_destroy(var/obj/effect/pai_hologram/hologram) + active_holograms -= hologram + +/mob/living/silicon/pai/proc/place_hologram(var/scanned_object_name) + var/image/I = scanned_objects[scanned_object_name] + var/obj/effect/pai_hologram/hologram = new(get_turf(src)) + hologram.icon = I + hologram.name = scanned_object_name + hologram.desc = "It's a holographic [scanned_object_name]." + hologram.owner = src + active_holograms += hologram + +/mob/living/silicon/pai/proc/delete_all_holograms() + for(var/obj/effect/pai_hologram/hologram in active_holograms) + QDEL_NULL(hologram) + +/mob/living/silicon/pai/proc/prompt_hologram_placement() + if(length(active_holograms) >= MAX_HOLOGRAMS) + to_chat(src, SPAN_NOTICE("You cannot have more than [MAX_HOLOGRAMS] holograms active!")) + return + + var/scanned_item_to_show = tgui_input_list(usr, "Select Scanned Object", "Scanned Objects", scanned_objects) + if(scanned_item_to_show) + place_hologram(scanned_item_to_show) + +/mob/living/silicon/pai/UnarmedAttack(var/atom/A, var/proximity_flag) + if(istype(A, /obj/effect/pai_hologram)) + A.attack_hand(src) + +#undef MAX_HOLOGRAMS diff --git a/code/modules/mob/living/silicon/pai/verbs.dm b/code/modules/mob/living/silicon/pai/verbs.dm index f8b04001571..484b7a37c8d 100644 --- a/code/modules/mob/living/silicon/pai/verbs.dm +++ b/code/modules/mob/living/silicon/pai/verbs.dm @@ -30,7 +30,7 @@ /mob/living/silicon/pai/lay_down() set name = "Rest" - set category = "IC" + set category = VERB_CATEGORY_IC // Pass lying down or getting up to our pet human, if we're in a hardsuit. if(src.loc == shell) @@ -63,7 +63,7 @@ /mob/living/silicon/pai/verb/wipe_software() set name = "Wipe Software" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Wipe your software. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." // Make sure people don't kill themselves accidentally @@ -105,3 +105,17 @@ set desc = "Allows you to pick a scanned object to display from your holoprojector." card_hologram_display() + +/mob/living/silicon/pai/verb/hologram_place() + set name = "Place Hologram" + set category = "pAI Commands" + set desc = "Allows you to deploy a holographic version of something you have scanned." + + prompt_hologram_placement() + +/mob/living/silicon/pai/verb/delete_holograms() + set name = "Delete All Holograms" + set category = "pAI Commands" + set desc = "Allows you to delete all holograms you have placed." + + delete_all_holograms() 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 22848219859..29753b3839f 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 @@ -78,7 +78,7 @@ if(do_after(user, 30, target) && length(contents) < max_item_count) AM.forceMove(src) user.visible_message("[hound.name]'s [src.name] groans lightly as [target.name] slips inside.", "Your [src.name] groans lightly as [target] slips inside.") - playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) + playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/game_preference_toggle/vore_sounds/eating_noises) if(analyzer && istype(target,/obj/item)) var/obj/item/tech_item = target for(var/T in tech_item.origin_tech) @@ -96,7 +96,7 @@ trashmouse.forceMove(src) trashmouse.update_perspective(src) user.visible_message("[hound.name]'s [src.name] groans lightly as [trashmouse] slips inside.", "Your [src.name] groans lightly as [trashmouse] slips inside.") - playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) + playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/game_preference_toggle/vore_sounds/eating_noises) if(delivery) if(islist(deliverylists[delivery_tag])) deliverylists[delivery_tag] |= trashmouse @@ -118,7 +118,7 @@ START_PROCESSING(SSobj, src) user.visible_message("[hound.name]'s [src.name] groans lightly as [trashman] slips inside.", "Your [src.name] groans lightly as [trashman] slips inside.") message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])") - playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) + playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/game_preference_toggle/vore_sounds/eating_noises) if(delivery) if(islist(deliverylists[delivery_tag])) deliverylists[delivery_tag] |= trashman @@ -149,7 +149,7 @@ START_PROCESSING(SSobj, src) user.visible_message("[hound.name]'s [src.name] lights up as [H.name] slips inside.", "Your [src] lights up as [H] slips inside. Life support functions engaged.") message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])") - playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) + playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/game_preference_toggle/vore_sounds/eating_noises) /obj/item/dogborg/sleeper/proc/go_out(var/target) hound = src.loc @@ -491,11 +491,11 @@ 'sound/vore/death8.ogg', 'sound/vore/death9.ogg', 'sound/vore/death10.ogg') - playsound(hound, finisher, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) + playsound(hound, finisher, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) to_chat(hound, "Your [src.name] is now clean. Ending self-cleaning cycle.") cleaning = 0 update_patient() - playsound(hound, 'sound/machines/ding.ogg', vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) + playsound(hound, 'sound/machines/ding.ogg', vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) return if(prob(20)) @@ -512,7 +512,7 @@ 'sound/vore/digest10.ogg', 'sound/vore/digest11.ogg', 'sound/vore/digest12.ogg') - playsound(hound, churnsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) + playsound(hound, churnsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) //If the timing is right, and there are items to be touched if(SSair.current_cycle%3==1 && length(touchable_items)) @@ -548,7 +548,7 @@ 'sound/vore/death8.ogg', 'sound/vore/death9.ogg', 'sound/vore/death10.ogg') - playsound(hound, deathsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) + playsound(hound, deathsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) if(is_vore_predator(T)) for(var/belly in T.vore_organs) var/obj/belly/B = belly diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index 697c5a27cd2..b88330c5685 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -32,7 +32,7 @@ for (var/mob/M in GLOB.player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + else if(M.stat == DEAD && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears)) if(M.client) to_chat(M, "[src] transmits, \"[message]\"") return 1 return ..(message, 0) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a3dd2ce7349..f5ea6663dc9 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1220,7 +1220,7 @@ /mob/living/silicon/robot/mode() set name = "Activate Held Object" - set category = "IC" + set category = VERB_CATEGORY_IC set src = usr if(world.time <= next_click) // Hard check, before anything else, to avoid crashing @@ -1427,7 +1427,7 @@ /mob/living/silicon/robot/verb/robot_nom(var/mob/living/T in living_mobs(1)) set name = "Robot Nom" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Allows you to eat someone." if (stat != CONSCIOUS) @@ -1436,7 +1436,7 @@ /mob/living/silicon/robot/proc/rest_style() set name = "Switch Rest Style" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Select your resting pose." sitting = FALSE bellyup = FALSE @@ -1451,7 +1451,7 @@ /mob/living/silicon/robot/proc/ex_reserve_refill() set name = "Refill Extinguisher" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/datum/matter_synth/water = water_res for(var/obj/item/extinguisher/E in module.modules) if(E.reagents.total_volume < E.max_water) diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 456654c7f8c..6e40f348ffe 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -405,7 +405,7 @@ /obj/item/borg/combat/shield/verb/set_shield_level() set name = "Set shield level" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in range(0) var/N = input("How much damage should the shield absorb?") in list("10","20","30","40","50","60") diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 691cb0625ea..7932630f201 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -241,7 +241,7 @@ /mob/living/silicon/check_languages() set name = "Check Known Languages" - set category = "IC" + set category = VERB_CATEGORY_IC set src = usr var/dat = "Known Languages

" @@ -287,7 +287,7 @@ /mob/living/silicon/verb/pose() set name = "Set Pose" set desc = "Sets a description which will be shown when someone examines you." - set category = "IC" + set category = VERB_CATEGORY_IC pose = sanitize(input(usr, "This is [src]. It is...", "Pose", null) as text) @@ -296,7 +296,7 @@ /mob/living/silicon/verb/set_flavor() set name = "Set Flavour Text" set desc = "Sets an extended description of your character's features." - set category = "IC" + set category = VERB_CATEGORY_IC flavor_text = sanitize(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index b9da81ead8f..73b8dab4223 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -252,7 +252,7 @@ /mob/living/simple_mob/verb/access_mob_radio_legacy() set name = "Access Mob Radio" - set category = "IC" + set category = VERB_CATEGORY_IC if(isnull(mob_radio)) to_chat(usr, SPAN_WARNING("You don't have a radio.")) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm index f3287131270..0944f22c199 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm @@ -265,5 +265,5 @@ for(var/mob/M in GLOB.player_list) if(istype(M, /mob/new_player)) continue - else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + else if(M.stat == DEAD && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears)) to_chat(M, "[src.true_name] whispers to [host], \"[message]\"") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm index 231850e73b2..e65d580f316 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm @@ -28,7 +28,7 @@ for (var/mob/M in GLOB.player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + else if(M.stat == DEAD && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears)) to_chat(M, "The captive mind of [src] whispers, \"[message]\"") /mob/living/captive_brain/emote(var/message) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm index 59b2b65d9a6..d975c338025 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm @@ -81,7 +81,7 @@ /mob/living/simple_mob/animal/passive/cat/verb/become_friends() set name = "Become Friends" - set category = "IC" + set category = VERB_CATEGORY_IC set src in view(1) var/mob/living/L = usr diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm index e1f93cd8db9..9f2c2ed2409 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm @@ -120,7 +120,7 @@ /mob/living/simple_mob/animal/passive/fox/renault/verb/become_friends() set name = "Become Friends" - set category = "IC" + set category = VERB_CATEGORY_IC set src in view(1) var/mob/living/L = usr @@ -179,7 +179,7 @@ /mob/living/simple_mob/animal/passive/fox/fluff/verb/friend() set name = "Become Friends" - set category = "IC" + set category = VERB_CATEGORY_IC set src in view(1) if(friend && usr == friend) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 74191dc0a1a..3af0ca9ee2b 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -44,11 +44,6 @@ qdel(hud_used) //remove the hud objects hud_used = new /datum/hud(src) - if(client.prefs && client.prefs.client_fps) - client.fps = client.prefs.client_fps - else - client.fps = 0 // Results in using the server FPS - next_move = 1 disconnect_time = null // Clear the disconnect time diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5215b27ab15..cc40541682f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -309,7 +309,7 @@ */ /mob/verb/examinate(atom/A as mob|obj|turf in view()) //It used to be oview(12), but I can't really say why set name = "Examine" - set category = "IC" + set category = VERB_CATEGORY_IC if(isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src))) // shift-click catcher may issue examinate() calls for out-of-sight turfs @@ -324,8 +324,8 @@ for(var/mob/M in viewers(4, src)) if(M == src || M.is_blind()) continue - if(M.client && M.client.is_preference_enabled(/datum/client_preference/examine_look)) - to_chat(M, SPAN_TINYNOTICE("\The [src] looks at \the [A].")) + // if(M.client && M.client.get_preference_toggle(/datum/client_preference/examine_look)) + to_chat(M, SPAN_TINYNOTICE("\The [src] looks at \the [A].")) do_examinate(A) @@ -356,7 +356,7 @@ */ /mob/verb/pointed(atom/A as mob|obj|turf in view()) set name = "Point To" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(!src || !isturf(src.loc) || !(A in view(14, src))) return 0 @@ -383,7 +383,7 @@ set name = "Set relative layer" set desc = "Set your relative layer to other mobs on the same layer as yourself" set src = usr - set category = "IC" + set category = VERB_CATEGORY_IC var/new_layer = input(src, "What do you want to shift your layer to? (-100 to 100)", "Set Relative Layer", clamp(relative_layer, -100, 100)) new_layer = clamp(new_layer, -100, 100) @@ -393,7 +393,7 @@ set name = "Move Behind" set desc = "Move behind of a mob with the same base layer as yourself" set src = usr - set category = "IC" + set category = VERB_CATEGORY_IC if(!client.throttle_verb()) return @@ -409,7 +409,7 @@ set name = "Move Infront" set desc = "Move infront of a mob with the same base layer as yourself" set src = usr - set category = "IC" + set category = VERB_CATEGORY_IC if(!client.throttle_verb()) return @@ -441,7 +441,7 @@ */ /mob/verb/mode() set name = "Activate Held Object" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src = usr return @@ -453,7 +453,7 @@ */ /mob/verb/memory() set name = "Notes" - set category = "IC" + set category = VERB_CATEGORY_IC if(mind) mind.show_memory(src) else @@ -464,7 +464,7 @@ */ /mob/verb/add_memory(msg as message) set name = "Add Note" - set category = "IC" + set category = VERB_CATEGORY_IC msg = sanitize(msg) @@ -562,7 +562,7 @@ */ /mob/verb/abandon_mob() set name = "Respawn" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Return to the lobby." // don't lose out on that sweet observer playtime @@ -612,13 +612,13 @@ */ /mob/verb/return_to_menu() set name = "Return to Menu" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Return to the lobby." return abandon_mob() /mob/verb/observe() set name = "Observe" - set category = "OOC" + set category = VERB_CATEGORY_OOC if(stat != DEAD || istype(src, /mob/new_player)) to_chat(usr, "You must be observing to use this!") @@ -815,7 +815,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) return (embedded.len > 0) /mob/proc/yank_out_object() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Yank out object" set desc = "Remove an embedded item at the cost of bleeding and pain." set src in view(1) @@ -924,7 +924,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) /mob/verb/face_direction() set name = "Face Direction" - set category = "IC" + set category = VERB_CATEGORY_IC set src = usr set_face_dir() @@ -1057,7 +1057,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) return TRUE /mob/MouseEntered(location, control, params) - if(usr != src && usr.is_preference_enabled(/datum/client_preference/mob_tooltips) && src.will_show_tooltip()) + if(usr != src && usr.get_preference_toggle(/datum/game_preference_toggle/game/mob_tooltips) && src.will_show_tooltip()) openToolTip(user = usr, tip_src = src, params = params, title = get_nametag_name(usr), content = get_nametag_desc(usr)) ..() @@ -1090,7 +1090,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) /mob/verb/local_diceroll(n as num) set name = "diceroll" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Roll a random number between 1 and a chosen number." set src = usr diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index fd9b6f16800..487be9a11ea 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -302,7 +302,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) return // Can't talk in deadchat if you can't see it. for(var/mob/M in GLOB.player_list) - if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && M.client.holder.rights)) && M.is_preference_enabled(/datum/client_preference/show_dsay)) + if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && M.client.holder.rights)) && M.get_preference_toggle(/datum/game_preference_toggle/chat/dsay)) var/follow var/lname if(M.forbid_seeing_deadchat && !M.client.holder) @@ -318,7 +318,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) var/mob/observer/dead/DM if(istype(subject, /mob/observer/dead)) DM = subject - var/anonsay = DM?.is_preference_enabled(/datum/client_preference/anonymous_ghost_chat) + var/anonsay = DM?.get_preference_toggle(/datum/game_preference_toggle/presence/anonymous_ghost_chat) if(M.client.holder) // What admins see lname = "[keyname][(anonsay) ? "*" : (DM ? "" : "^")] ([name])" else @@ -333,7 +333,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) /proc/say_dead_object(var/message, var/obj/subject = null) for(var/mob/M in GLOB.player_list) - if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && M.client.holder.rights)) && M.is_preference_enabled(/datum/client_preference/show_dsay)) + if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && M.client.holder.rights)) && M.get_preference_toggle(/datum/game_preference_toggle/chat/dsay)) var/follow var/lname = "Game Master" if(M.forbid_seeing_deadchat && !M.client.holder) @@ -363,7 +363,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) C = M.original.client if(C) - if(!isnull(C.holder?.fakekey) || !C.is_preference_enabled(/datum/client_preference/announce_ghost_joinleave)) + if(!isnull(C.holder?.fakekey) || !C.get_preference_toggle(/datum/game_preference_toggle/presence/announce_ghost_joinleave)) return var/name if(C.mob) @@ -402,8 +402,8 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) if(source) var/atom/movable/screen/alert/notify_action/A = O.throw_alert("[REF(source)]_notify_action", /atom/movable/screen/alert/notify_action) if(A) - if(O.client.prefs && O.client.prefs.UI_style) - A.icon = ui_style2icon(O.client.prefs.UI_style) + if(O.get_preference_entry(/datum/game_preference_entry/dropdown/hud_style)) + A.icon = ui_style2icon(O.get_preference_entry(/datum/game_preference_entry/dropdown/hud_style)) if (header) A.name = header A.desc = message diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index 9eb197bb401..0aa83c75b44 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -18,7 +18,6 @@ new_player_panel() spawn(40) if(client) - handle_privacy_poll() client.playtitlemusic() return ..() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 122742c1941..1627c58d1cb 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -35,6 +35,7 @@ var/output = "
" output +="
" output += "

Character Setup

" + output += "

Game Preferences

" if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME) if(ready) @@ -75,7 +76,7 @@ output += "
" - panel = new(src, "Welcome","Welcome", 210, 280, src) + panel = new(src, "Welcome","Welcome", 210, 325, src) panel.set_window_options("can_close=0") panel.set_content(output) panel.open() @@ -122,6 +123,14 @@ client.prefs.ShowChoices(src) return 1 + if(href_list["game_preferences"]) + if(!client.reject_age_unverified()) + return + if(!client.reject_on_initialization_block()) + return + client.preferences.ui_interact(src) + return 1 + if(href_list["ready"]) if(!client.reject_age_unverified()) return @@ -349,8 +358,6 @@ return var/savefile/F = get_server_news() if(F) - client.prefs.lastnews = md5(F["body"]) - SScharacters.queue_preferences_save(client.prefs) var/dat = "
" dat += "

[F["title"]]

" @@ -363,6 +370,10 @@ popup.set_content(dat) popup.open() + if(client.player.block_on_available()) + client.player.player_misc["lastnews"] = md5(F["body"]) + client.player.save() + /mob/new_player/proc/time_till_respawn() if(!ckey) return -1 // What? diff --git a/code/modules/mob/new_player/poll.dm b/code/modules/mob/new_player/poll.dm index f90ebdba3e3..42626b9851f 100644 --- a/code/modules/mob/new_player/poll.dm +++ b/code/modules/mob/new_player/poll.dm @@ -1,52 +1,3 @@ - -/mob/new_player/proc/handle_privacy_poll() - if(!SSdbcore.Connect()) - return - - var/voted = 0 - - var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT * FROM [format_table_name("privacy")] WHERE ckey = :ckey", - list( - "ckey" = ckey - ) - ) - - while(query.NextRow()) - voted = 1 - break - - if(!voted) - privacy_poll() - -/mob/new_player/proc/privacy_poll() - var/output = "
Player poll" - output +="
" - output += "We would like to expand our stats gathering." - output += "
This however involves gathering data about player behavior, play styles, unique player numbers, play times, etc. Data like that cannot be gathered fully anonymously, which is why we're asking you how you'd feel if player-specific data was gathered. Prior to any of this actually happening, a privacy policy will be discussed, but before that can begin, we'd preliminarily like to know how you feel about the concept." - output +="
" - output += "How do you feel about the game gathering player-specific statistics? This includes statistics about individual players as well as in-game polling/opinion requests." - - output += "

Signed stats gathering" - output += "
Pick this option if you think usernames should be logged with stats. This allows us to have personalized stats as well as polls." - - output += "

Anonymous stats gathering" - output += "
Pick this option if you think only hashed (indecipherable) usernames should be logged with stats. This doesn't allow us to have personalized stats, as we can't tell who is who (hashed values aren't readable), we can however have ingame polls." - - output += "

No stats gathering" - output += "
Pick this option if you don't want player-specific stats gathered. This does not allow us to have player-specific stats or polls." - - output += "

Ask again later" - output += "
This poll will be brought up again next round." - - output += "

Don't ask again" - output += "
Only pick this if you are fine with whatever option wins." - - output += "

" - - src << browse(output,"window=privacypoll;size=600x500") - return - /datum/polloption var/optionid var/optiontext diff --git a/code/modules/mob/new_player/skill.dm b/code/modules/mob/new_player/skill.dm index 91addb4739b..1efbfc1152f 100644 --- a/code/modules/mob/new_player/skill.dm +++ b/code/modules/mob/new_player/skill.dm @@ -189,7 +189,7 @@ var/global/list/SKILL_PRE = list("Engineer" = SKILL_ENGINEER, "Roboticist" = SKI return /mob/living/carbon/human/verb/show_skills() - set category = "IC" + set category = VERB_CATEGORY_IC set name = "Show Own Skills" show_skill_window(src, src) diff --git a/code/modules/mob/observer/dead/dead.dm b/code/modules/mob/observer/dead/dead.dm index c2fa4371a2e..f92102db5cd 100644 --- a/code/modules/mob/observer/dead/dead.dm +++ b/code/modules/mob/observer/dead/dead.dm @@ -225,7 +225,7 @@ GLOBAL_LIST_EMPTY(observer_list) This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. */ /mob/living/verb/ghost() - set category = "OOC" + set category = VERB_CATEGORY_OOC set name = "Ghost" set desc = "Relinquish your life and enter the land of the dead." @@ -658,18 +658,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp // Give the ghost a cult icon which should be visible only to itself toggle_icon("cult") -/mob/observer/dead/verb/toggle_anonsay() - set category = "Ghost" - set name = "Toggle Anonymous Chat" - set desc = "Toggles showing your key in dead chat." - - client.toggle_preference(/datum/client_preference/anonymous_ghost_chat) - SScharacters.queue_preferences_save(client.prefs) - if(is_preference_enabled(/datum/client_preference/anonymous_ghost_chat)) - to_chat(src, "Your key won't be shown when you speak in dead chat.") - else - to_chat(src, "Your key will be publicly visible again.") - /mob/observer/dead/canface() return 1 @@ -717,7 +705,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/observer/dead/proc/ghost_whisper() set name = "Spectral Whisper" - set category = "IC" + set category = VERB_CATEGORY_IC if(is_manifest) //Only able to whisper if it's hit with a tome. var/list/options = list() diff --git a/code/modules/mob/observer/dead/free_vr.dm b/code/modules/mob/observer/dead/free_vr.dm index 0db6c2adfde..3462b69d2bf 100644 --- a/code/modules/mob/observer/dead/free_vr.dm +++ b/code/modules/mob/observer/dead/free_vr.dm @@ -8,7 +8,7 @@ var/global/list/prevent_respawns = list() /mob/observer/dead/verb/cleanup() set name = "Quit This Round" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Free your job slot, remove yourself from the manifest, and prevent respawning as this character for this round." var/confirm = alert("This will free up your job slot, remove you from the manifest, and allow you to respawn as this character. You can rejoin as another \ diff --git a/code/modules/mob/perspective.dm b/code/modules/mob/perspective.dm index 3495afeeaef..37c0d2a8afe 100644 --- a/code/modules/mob/perspective.dm +++ b/code/modules/mob/perspective.dm @@ -70,7 +70,7 @@ */ /mob/verb/cancel_camera() set name = "Cancel Camera View" - set category = "OOC" + set category = VERB_CATEGORY_OOC reset_perspective(no_optimizations = TRUE, apply = TRUE, forceful = TRUE) diff --git a/code/modules/mob/pulling.dm b/code/modules/mob/pulling.dm index 6d9d047f0fc..fa5844bbe1e 100644 --- a/code/modules/mob/pulling.dm +++ b/code/modules/mob/pulling.dm @@ -128,7 +128,7 @@ /mob/verb/stop_pulling_verb() set name = "Stop Pulling" - set category = "IC" + set category = VERB_CATEGORY_IC stop_pulling() /mob/stop_pulling() diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index c0f49fe8d77..85bc9b61c77 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -14,20 +14,20 @@ /mob/verb/whisper(message as text) set name = "Whisper" - set category = "IC" + set category = VERB_CATEGORY_IC usr.say(message,whispering=1) /mob/verb/say_verb(message as text) set name = "Say" - set category = "IC" + set category = VERB_CATEGORY_IC set_typing_indicator(FALSE) usr.say(message) /mob/verb/me_verb(message as message) set name = "Me" - set category = "IC" + set category = VERB_CATEGORY_IC if(muffled) return me_verb_subtle(message) @@ -48,7 +48,7 @@ to_chat(src, "Deadchat is globally muted.") return - if(!is_preference_enabled(/datum/client_preference/show_dsay)) + if(!get_preference_toggle(/datum/game_preference_toggle/chat/dsay)) to_chat(src, "You have deadchat muted.") return diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 90a21112b71..090f1843fe6 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -4,7 +4,7 @@ /mob/verb/me_verb_subtle(message as message) //This would normally go in say.dm set name = "Subtle" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Emote to nearby people (and your pred/prey)" message = sanitize_or_reflect(message,src) // Reflect too-long messages (within reason) @@ -48,7 +48,7 @@ for(var/vismob in vis_mobs) var/mob/M = vismob if(istype(vismob, /mob/observer)) - if(M.client && !M.client.is_preference_enabled(/datum/client_preference/subtle_see)) + if(M.client && !M.client.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_subtle)) continue spawn(0) M.show_message(message, SAYCODE_TYPE_ALWAYS) @@ -70,7 +70,7 @@ /mob/verb/subtler_anti_ghost(message as message) //This would normally go in say.dm set name = "Subtler Anti Ghost" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Emote to nearby people (and your pred/prey), but ghosts can't see it." message = sanitize_or_reflect(message,src) // Reflect too-long messages (within reason) diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index 642e4ef0a4d..1ec21b7e23c 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -8,9 +8,6 @@ typing_indicator.appearance_flags |= RESET_COLOR | PIXEL_SCALE /mob/proc/set_typing_indicator(state) - if(!is_preference_enabled(/datum/client_preference/show_typing_indicator)) - state = FALSE - if(!state) if(!typing) return diff --git a/code/modules/modular_computers/computers/modular_computer/interaction.dm b/code/modules/modular_computers/computers/modular_computer/interaction.dm index f2ddbc5e9e0..28fc9219d1e 100644 --- a/code/modules/modular_computers/computers/modular_computer/interaction.dm +++ b/code/modules/modular_computers/computers/modular_computer/interaction.dm @@ -9,7 +9,7 @@ // Forcibly shut down the device. To be used when something bugs out and the UI is nonfunctional. /obj/item/modular_computer/verb/emergency_shutdown() set name = "Forced Shutdown" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(usr.incapacitated() || !istype(usr, /mob/living)) @@ -33,7 +33,7 @@ // Eject ID card from computer, if it has ID slot with card inside. /obj/item/modular_computer/verb/eject_id() set name = "Eject ID" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(usr.incapacitated() || !istype(usr, /mob/living)) @@ -49,7 +49,7 @@ // Eject ID card from computer, if it has ID slot with card inside. /obj/item/modular_computer/verb/eject_usb() set name = "Eject Portable Storage" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) if(usr.incapacitated() || !istype(usr, /mob/living)) diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index fe8fc8bf993..6fd20f3e818 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -1,13 +1,13 @@ /mob/verb/up() set name = "Move Upwards" - set category = "IC" + set category = VERB_CATEGORY_IC if(zMove(UP)) to_chat(src, SPAN_NOTICE("You move upwards.")) /mob/verb/down() set name = "Move Downwards" - set category = "IC" + set category = VERB_CATEGORY_IC if(zMove(DOWN)) to_chat(src, SPAN_NOTICE("You move down.")) diff --git a/code/modules/multiz/structures/hoist.dm b/code/modules/multiz/structures/hoist.dm index 993a42465a9..f2459acaf4b 100644 --- a/code/modules/multiz/structures/hoist.dm +++ b/code/modules/multiz/structures/hoist.dm @@ -222,7 +222,7 @@ /obj/structure/hoist/verb/collapse_hoist() set name = "Collapse Hoist" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in range(1) if (!ishuman(usr)) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index b8f29e5bd79..fae85bb5c90 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -694,7 +694,7 @@ GLOBAL_LIST_INIT(nif_id_lookup, init_nif_id_lookup()) /mob/living/carbon/human/proc/set_nif_examine() set name = "NIF Appearance" set desc = "If your NIF alters your appearance in some way, describe it here." - set category = "OOC" + set category = VERB_CATEGORY_OOC if(!nif) remove_verb(src, /mob/living/carbon/human/proc/set_nif_examine) diff --git a/code/modules/nifsoft/nif_tgui.dm b/code/modules/nifsoft/nif_tgui.dm index ad09f0c6535..7fbb9231c3f 100644 --- a/code/modules/nifsoft/nif_tgui.dm +++ b/code/modules/nifsoft/nif_tgui.dm @@ -86,7 +86,7 @@ */ /mob/living/carbon/human/proc/nif_menu() set name = "NIF Menu" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Open the NIF user interface." var/obj/item/nif/N = nif diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 95230b55324..e418080f280 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -498,7 +498,7 @@ /mob/living/carbon/brain/caught_soul/resist() set name = "Resist" - set category = "IC" + set category = VERB_CATEGORY_IC to_chat(src,SPAN_WARNING("There's no way out! You're stuck in VR.")) @@ -603,7 +603,7 @@ /mob/living/carbon/human/proc/nsay(message as text) set name = "NSay" set desc = "Speak into your NIF's Soulcatcher." - set category = "IC" + set category = VERB_CATEGORY_IC src.nsay_act(message) @@ -633,7 +633,7 @@ /mob/living/carbon/human/proc/nme(message as message|null) set name = "NMe" set desc = "Emote into your NIF's Soulcatcher." - set category = "IC" + set category = VERB_CATEGORY_IC src.nme_act(message) diff --git a/code/modules/organs/internal/subtypes/eyes.dm b/code/modules/organs/internal/subtypes/eyes.dm index 25c71d50b2a..f6fc2d69a4e 100644 --- a/code/modules/organs/internal/subtypes/eyes.dm +++ b/code/modules/organs/internal/subtypes/eyes.dm @@ -35,7 +35,7 @@ /obj/item/organ/internal/eyes/proc/change_eye_color() set name = "Change Eye Color" set desc = "Changes your robotic eye color instantly." - set category = "IC" + set category = VERB_CATEGORY_IC set src in usr var/current_color = rgb(eye_colour[1],eye_colour[2],eye_colour[3]) diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 4ed61dec5f3..b4546383133 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -27,7 +27,7 @@ /obj/item/paper/carbon/verb/removecopy() set name = "Remove carbon-copy" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if (copied == 0) diff --git a/code/modules/paperwork/paper/paper.dm b/code/modules/paperwork/paper/paper.dm index a2e7b6c01de..dc438275981 100644 --- a/code/modules/paperwork/paper/paper.dm +++ b/code/modules/paperwork/paper/paper.dm @@ -113,7 +113,7 @@ /obj/item/paper/verb/rename() set name = "Rename paper" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if((MUTATION_CLUMSY in usr.mutations) && prob(50)) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 97c67398702..20a22984aa4 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -185,7 +185,7 @@ /obj/item/paper_bundle/verb/rename() set name = "Rename bundle" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr var/n_name = sanitizeSafe(input(usr, "What would you like to label the bundle?", "Bundle Labelling", null) as text, MAX_NAME_LEN) @@ -197,7 +197,7 @@ /obj/item/paper_bundle/verb/remove_all() set name = "Loose bundle" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr to_chat(usr, "You loosen the bundle.") diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 53261b7c303..bc34e1e48e3 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -80,7 +80,7 @@ /obj/machinery/papershredder/verb/empty_contents() set name = "Empty bin" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in range(1) if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 804d2eea1a5..6c44c94cc9d 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -286,7 +286,7 @@ /obj/item/pen/chameleon/verb/set_colour() set name = "Change Pen Colour" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red", "Invisible", "Black") var/selected_type = input("Pick new colour.", "Pen Colour", null, null) as null|anything in possible_colours diff --git a/code/modules/photography/camera.dm b/code/modules/photography/camera.dm index 84e03e4ae22..a3a68f0c5ac 100644 --- a/code/modules/photography/camera.dm +++ b/code/modules/photography/camera.dm @@ -21,7 +21,7 @@ /obj/item/camera/verb/change_size() set name = "Set Photo Focus" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/nsize = input("Photo Size","Pick a size of resulting photo.") as null|anything in list(1,3,5,7) if(nsize) size = nsize diff --git a/code/modules/photography/photo.dm b/code/modules/photography/photo.dm index fd7f1ead2e3..a596969f947 100644 --- a/code/modules/photography/photo.dm +++ b/code/modules/photography/photo.dm @@ -123,7 +123,7 @@ // todo: refactor /obj/item/photo/verb/rename() set name = "Rename photo" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr var/n_name = sanitizeSafe(input(usr, "What would you like to label the photo?", "Photo Labelling", null) as text, MAX_NAME_LEN) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 4bf55418c23..21701f8a7d1 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -643,7 +643,7 @@ GLOBAL_LIST_INIT(possible_cable_coil_colours, list( /obj/item/stack/cable_coil/verb/make_restraint() set name = "Make Cable Restraints" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/mob/M = usr if(CHECK_MOBILITY(M, MOBILITY_CAN_USE)) @@ -660,7 +660,7 @@ GLOBAL_LIST_INIT(possible_cable_coil_colours, list( /obj/item/stack/cable_coil/cyborg/verb/set_colour() set name = "Change Colour" - set category = "Object" + set category = VERB_CATEGORY_OBJECT var/selected_type = input("Pick new colour.", "Cable Colour", null, null) as null|anything in GLOB.possible_cable_coil_colours set_cable_color(selected_type, usr) diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index 00d137e7fa6..99856dd63b4 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -131,7 +131,7 @@ var/list/fuel_injectors = list() StopInjecting() /obj/machinery/fusion_fuel_injector/verb/rotate_clockwise() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Rotate Generator Clockwise" set src in view(1) @@ -141,7 +141,7 @@ var/list/fuel_injectors = list() src.setDir(turn(src.dir, 270)) /obj/machinery/fusion_fuel_injector/verb/rotate_counterclockwise() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Rotate Generator Counterclockwise" set src in view(1) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 55f00fb7aa4..5315b5560e4 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -294,7 +294,7 @@ GLOBAL_LIST_EMPTY(all_turbines) /obj/machinery/power/generator/verb/rotate_clockwise() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Rotate Generator Clockwise" set src in view(1) @@ -304,7 +304,7 @@ GLOBAL_LIST_EMPTY(all_turbines) src.setDir(turn(src.dir, 270)) /obj/machinery/power/generator/verb/rotate_counterclockwise() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Rotate Generator Counterclockwise" set src in view(1) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 2d2291df609..c1821021e77 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -30,7 +30,7 @@ /obj/machinery/power/emitter/verb/rotate_clockwise() set name = "Rotate Emitter Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored || usr:stat) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 940f3dca0e7..b7b72f89930 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -91,7 +91,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/structure/particle_accelerator/verb/rotate_clockwise() set name = "Rotate Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored || usr:stat) @@ -102,7 +102,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/structure/particle_accelerator/verb/rotate_counterclockwise() set name = "Rotate Counter Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored || usr:stat) @@ -266,7 +266,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/machinery/particle_accelerator/verb/rotate_clockwise() set name = "Rotate Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored || usr:stat) @@ -277,7 +277,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/machinery/particle_accelerator/verb/rotate_counterclockwise() set name = "Rotate Counter-Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored || usr:stat) diff --git a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm index b9436c253a5..a98c670f46a 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm @@ -224,7 +224,7 @@ /obj/machinery/particle_smasher/verb/eject_contents() set src in view(1) - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject Particle Focus Contents" if(usr.incapacitated()) diff --git a/code/modules/preferences/_preferences.dm b/code/modules/preferences/_preferences.dm index c6f13140fbc..4df40de85b3 100644 --- a/code/modules/preferences/_preferences.dm +++ b/code/modules/preferences/_preferences.dm @@ -45,7 +45,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) // todo: kick this out of prefs //! ## Non-Preference Stuff - var/warns = 0 var/muted = 0 var/last_ip var/last_id @@ -70,22 +69,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/skin //! ## Game Preferences - var/tgui_fancy = TRUE - var/tgui_lock = TRUE - /// Saved changlog filesize to detect if there was a change. - var/lastchangelog = "" - /// Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color. - var/ooccolor = "#010000" /// Special role selection. var/be_special = 0 /// Event role prefs flag. var/be_event_role = NONE - var/UI_style = UI_STYLE_DEFAULT - var/UI_style_color = "#ffffff" - var/UI_style_alpha = 255 - /// Style for popup tooltips. - var/tooltipstyle = "Midnight" - var/client_fps = 40 //! ## Character Preferences /// Our character's name @@ -227,9 +214,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/category_collection/player_setup_collection/player_setup var/datum/browser/panel - /// Hash of last seen lobby news content. - var/lastnews - //! ## Character Directory Stuff /// Should we show in Character Directory. var/show_in_directory = 1 @@ -243,12 +227,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// Set character's suit sensor level. var/sensorpref = 5 - /// Should we automatically fit the viewport? - var/auto_fit_viewport = TRUE - - /// Should we be in the widescreen mode set by the config? - var/widescreenpref = TRUE // Exists now... - /datum/preferences/New(client/C) if(istype(C)) client = C @@ -274,12 +252,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) load_skin() sanitize_everything() player_setup.sanitize_setup() - client?.update_movement_keys() initialized = TRUE return - key_bindings = deep_copy_list(GLOB.hotkey_keybinding_list_by_key) // give them default keybinds and update their movement keys - client?.update_movement_keys(src) LAZYINITLIST(character) LAZYINITLIST(options) LAZYINITLIST(skin) @@ -451,35 +426,3 @@ GLOBAL_LIST_EMPTY(preferences_datums) panel = new(user, "Character Slots", "Character Slots", 300, 390, src) panel.set_content(dat) panel.open() - -//Vore noises. -/client/verb/toggle_eating_noises() - set name = "Eating Noises" - set category = "Vore" - set desc = "Toggles Vore Eating noises." - - var/pref_path = /datum/client_preference/eating_noises - - toggle_preference(pref_path) - - to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear eating related vore noises.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TEatNoise") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/toggle_digestion_noises() - set name = "Digestion Noises" - set category = "Vore" - set desc = "Toggles Vore Digestion noises." - - var/pref_path = /datum/client_preference/digestion_noises - - toggle_preference(pref_path) - - to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear digestion related vore noises.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TDigestNoise") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/preferences/migration.dm b/code/modules/preferences/migration.dm index a40fabc77c0..e5842251e17 100644 --- a/code/modules/preferences/migration.dm +++ b/code/modules/preferences/migration.dm @@ -7,38 +7,7 @@ * - prefs - prefs if any; if null, we're probably doing a clientless migration. */ /datum/controller/subsystem/characters/proc/perform_global_migrations(savefile/S, current_version, list/errors, list/options, datum/preferences/prefs) - if(current_version < 13) - if(prefs) - addtimer(CALLBACK(prefs, TYPE_PROC_REF(/datum/preferences, force_reset_keybindings)), 5 SECONDS) - else - var/list/new_bindings = deep_copy_list(GLOB.hotkey_keybinding_list_by_key) // give them default keybinds - WRITE_FILE(S["key_bindings"], new_bindings) - if(current_version < 15) - var/list/language_prefixes - S["language_prefixes"] >> language_prefixes - if(!islist(language_prefixes)) - language_prefixes = list() - options[GLOBAL_DATA_LANGUAGE_PREFIX] = language_prefixes.Copy() - if(current_version < 16) - if(prefs.client) - var/list/pref_datum_entries - S["preferences"] >> pref_datum_entries - var/was_age_verified = ("AGE_VERIFIED" in pref_datum_entries) - if(was_age_verified) - var/datum/player_data/data = prefs?.client?.player - // alright well, this is evil, but whatever - // yes, this is a blocking proc - // this can do horrible things but hey, fuck the old age gate system and whoever allowed it to stand. - if(!isnull(data) && (SSdbcore.Connect() && data.block_on_available())) - if(data.player_flags & PLAYER_FLAG_AGE_VERIFIED) - else - data.player_flags |= PLAYER_FLAG_AGE_VERIFIED - var/datum/tgui/open_verify = SStgui.get_open_ui(prefs.client.mob, GLOB.age_verify_menu) - if(!isnull(open_verify)) - qdel(open_verify) - INVOKE_ASYNC(data, TYPE_PROC_REF(/datum/player_data, save)) - else - log_and_message_admins("Failed to automatically authorize age gating for player with savefile [prefs.path]") + return /** * @params diff --git a/code/modules/preferences/preference_setup/global/01_ui.dm b/code/modules/preferences/preference_setup/global/01_ui.dm deleted file mode 100644 index 800f67389b6..00000000000 --- a/code/modules/preferences/preference_setup/global/01_ui.dm +++ /dev/null @@ -1,96 +0,0 @@ -/datum/category_item/player_setup_item/player_global/ui - name = "UI" - sort_order = 1 - -/datum/category_item/player_setup_item/player_global/ui/load_preferences(var/savefile/S) - S["UI_style"] >> pref.UI_style - S["UI_style_color"] >> pref.UI_style_color - S["UI_style_alpha"] >> pref.UI_style_alpha - S["ooccolor"] >> pref.ooccolor - S["tooltipstyle"] >> pref.tooltipstyle - S["client_fps"] >> pref.client_fps - -/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S) - S["UI_style"] << pref.UI_style - S["UI_style_color"] << pref.UI_style_color - S["UI_style_alpha"] << pref.UI_style_alpha - S["ooccolor"] << pref.ooccolor - S["tooltipstyle"] << pref.tooltipstyle - S["client_fps"] << pref.client_fps - -/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)) - pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, 6, 1, default = initial(pref.UI_style_color)) - pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha)) - pref.ooccolor = sanitize_hexcolor(pref.ooccolor, 6, 1, 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)) - -/datum/category_item/player_setup_item/player_global/ui/content(datum/preferences/prefs, mob/user, data) - . = "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
" - . += "Tooltip Style: [pref.tooltipstyle]
" - . += "Client FPS: [pref.client_fps]
" - if(can_select_ooc_color(user)) - . += "OOC Color:" - if(pref.ooccolor == initial(pref.ooccolor)) - . += "Using Default
" - else - . += "[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"]) - var/UI_style_new = tgui_input_list(user, "Choose UI style.", "Character Preference", all_ui_styles, pref.UI_style) - if(!UI_style_new || !CanUseTopic(user)) return PREFERENCES_NOACTION - pref.UI_style = UI_style_new - return PREFERENCES_REFRESH - - else if(href_list["select_color"]) - var/UI_style_color_new = input(user, "Choose UI color, dark colors are not recommended!", "Global Preference", pref.UI_style_color) as color|null - if(isnull(UI_style_color_new) || !CanUseTopic(user)) return PREFERENCES_NOACTION - pref.UI_style_color = UI_style_color_new - return PREFERENCES_REFRESH - - else if(href_list["select_alpha"]) - var/UI_style_alpha_new = input(user, "Select UI alpha (transparency) level, between 50 and 255.", "Global Preference", pref.UI_style_alpha) as num|null - if(isnull(UI_style_alpha_new) || (UI_style_alpha_new < 50 || UI_style_alpha_new > 255) || !CanUseTopic(user)) return PREFERENCES_NOACTION - pref.UI_style_alpha = UI_style_alpha_new - return PREFERENCES_REFRESH - - else if(href_list["select_ooc_color"]) - var/new_ooccolor = input(user, "Choose OOC color:", "Global Preference") as color|null - if(new_ooccolor && can_select_ooc_color(user) && CanUseTopic(user)) - pref.ooccolor = new_ooccolor - return PREFERENCES_REFRESH - - else if(href_list["select_tooltip_style"]) - var/tooltip_style_new = tgui_input_list(user, "Choose tooltip style.", "Global Preference", all_tooltip_styles, pref.tooltipstyle) - if(!tooltip_style_new || !CanUseTopic(user)) return PREFERENCES_NOACTION - pref.tooltipstyle = tooltip_style_new - return PREFERENCES_REFRESH - - else if(href_list["select_client_fps"]) - var/fps_new = input(user, "Input Client FPS (1-200, 0 uses server FPS)", "Global Preference", pref.client_fps) as null|num - if(isnull(fps_new) || !CanUseTopic(user)) return PREFERENCES_NOACTION - if(fps_new < 0 || fps_new > MAX_CLIENT_FPS) return PREFERENCES_NOACTION - pref.client_fps = fps_new - if(pref.client) - pref.client.fps = fps_new - return PREFERENCES_REFRESH - - else if(href_list["reset"]) - switch(href_list["reset"]) - if("ui") - pref.UI_style_color = initial(pref.UI_style_color) - if("alpha") - pref.UI_style_alpha = initial(pref.UI_style_alpha) - if("ooc") - pref.ooccolor = initial(pref.ooccolor) - return PREFERENCES_REFRESH - - return ..() - -/datum/category_item/player_setup_item/player_global/ui/proc/can_select_ooc_color(var/mob/user) - return CONFIG_GET(flag/allow_admin_ooccolor) && check_rights(R_ADMIN, 0, user) diff --git a/code/modules/preferences/preference_setup/global/02_settings.dm b/code/modules/preferences/preference_setup/global/02_settings.dm index 55d7d570e6c..b56e512aecf 100644 --- a/code/modules/preferences/preference_setup/global/02_settings.dm +++ b/code/modules/preferences/preference_setup/global/02_settings.dm @@ -7,129 +7,10 @@ sort_order = 2 /datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S) - S["lastchangelog"] >> pref.lastchangelog - S["lastnews"] >> pref.lastnews S["default_slot"] >> pref.default_slot - S["preferences"] >> pref.preferences_enabled - S["preferences_disabled"] >> pref.preferences_disabled /datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S) - S["lastchangelog"] << pref.lastchangelog - S["lastnews"] << pref.lastnews S["default_slot"] << pref.default_slot - S["preferences"] << pref.preferences_enabled - S["preferences_disabled"] << pref.preferences_disabled /datum/category_item/player_setup_item/player_global/settings/sanitize_preferences() - // Ensure our preferences are lists. - if(!istype(pref.preferences_enabled, /list)) - pref.preferences_enabled = list() - if(!istype(pref.preferences_disabled, /list)) - pref.preferences_disabled = list() - - // Arrange preferences that have never been enabled/disabled. - var/list/client_preference_keys = list() - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp - client_preference_keys += client_pref.key - if((client_pref.key in pref.preferences_enabled) || (client_pref.key in pref.preferences_disabled)) - continue - - if(client_pref.enabled_by_default) - pref.preferences_enabled += client_pref.key - else - pref.preferences_disabled += client_pref.key - - // Clean out preferences that no longer exist. - for(var/key in pref.preferences_enabled) - if(!(key in client_preference_keys)) - pref.preferences_enabled -= key - for(var/key in pref.preferences_disabled) - if(!(key in client_preference_keys)) - pref.preferences_disabled -= key - - pref.lastchangelog = sanitize_istext(pref.lastchangelog, initial(pref.lastchangelog)) - pref.lastnews = sanitize_istext(pref.lastnews, initial(pref.lastnews)) pref.default_slot = sanitize_integer(pref.default_slot, 1, config_legacy.character_slots, initial(pref.default_slot)) - -/datum/category_item/player_setup_item/player_global/settings/content(datum/preferences/prefs, mob/user, data) - . = list() - . += "Preferences
" - . += "" - var/mob/pref_mob = preference_mob() - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp - if(!client_pref.may_toggle(pref_mob)) - continue - - . += "" - if(pref_mob.is_preference_enabled(client_pref.key)) - . += "" - else - . += "" - . += "" - - . += "
[client_pref.description]: [client_pref.enabled_description] [client_pref.disabled_description][client_pref.enabled_description] [client_pref.disabled_description]
" - return jointext(., "") - -/datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) - var/mob/pref_mob = preference_mob() - if(href_list["toggle_on"]) - . = pref_mob.set_preference(href_list["toggle_on"], TRUE) - else if(href_list["toggle_off"]) - . = pref_mob.set_preference(href_list["toggle_off"], FALSE) - if(.) - return PREFERENCES_REFRESH - - return ..() - -/client/proc/is_preference_enabled(var/preference) - var/datum/client_preference/cp = get_client_preference(preference) - if(isnull(cp)) - return FALSE - return prefs?.initialized? (cp.key in prefs.preferences_enabled) : cp.enabled_by_default - -/client/proc/set_preference(var/preference, var/set_preference) - var/datum/client_preference/cp = get_client_preference(preference) - if(!cp) - return FALSE - preference = cp.key - - if(set_preference && !(preference in prefs.preferences_enabled)) - return toggle_preference(cp) - else if(!set_preference && (preference in prefs.preferences_enabled)) - return toggle_preference(cp) - -/client/proc/toggle_preference(var/preference, var/set_preference) - var/datum/client_preference/cp = get_client_preference(preference) - if(!cp) - return FALSE - preference = cp.key - - var/enabled - if(preference in prefs.preferences_disabled) - prefs.preferences_enabled |= preference - prefs.preferences_disabled -= preference - enabled = TRUE - . = TRUE - else if(preference in prefs.preferences_enabled) - prefs.preferences_enabled -= preference - prefs.preferences_disabled |= preference - enabled = FALSE - . = TRUE - if(.) - cp.toggled(mob, enabled) - -/mob/proc/is_preference_enabled(var/preference) - if(!client) - return FALSE - return client.is_preference_enabled(preference) - -/mob/proc/set_preference(var/preference, var/set_preference) - if(!client) - return FALSE - if(!client.prefs) - log_debug(SPAN_DEBUGWARNING("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.")) - return FALSE - - return client.set_preference(preference, set_preference) diff --git a/code/modules/preferences/preference_setup/global/04_ooc.dm b/code/modules/preferences/preference_setup/global/04_ooc.dm index a4c18e08f96..46d7ea99ff3 100644 --- a/code/modules/preferences/preference_setup/global/04_ooc.dm +++ b/code/modules/preferences/preference_setup/global/04_ooc.dm @@ -9,7 +9,6 @@ /datum/category_item/player_setup_item/player_global/ooc/save_preferences(var/savefile/S) S["ignored_players"] << pref.ignored_players -/* /datum/category_item/player_setup_item/player_global/ooc/sanitize_preferences() if(isnull(pref.ignored_players)) pref.ignored_players = list() @@ -39,4 +38,3 @@ return PREFERENCES_REFRESH return ..() -*/ diff --git a/code/modules/preferences/preference_setup/global/language_prefix.dm b/code/modules/preferences/preference_setup/global/language_prefix.dm deleted file mode 100644 index b9910f2f97e..00000000000 --- a/code/modules/preferences/preference_setup/global/language_prefix.dm +++ /dev/null @@ -1,66 +0,0 @@ -/datum/category_item/player_setup_item/player_global/language_prefix - name = "Language Prefix" - is_global = TRUE - save_key = GLOBAL_DATA_LANGUAGE_PREFIX - -/datum/category_item/player_setup_item/player_global/language_prefix/proc/valid_prefix(c) - return length(c) == 1 && !(c in list(";", ":", ".", "!", "*", "^")) && !contains_az09(c) - -/datum/category_item/player_setup_item/player_global/language_prefix/filter_data(datum/preferences/prefs, data, list/errors) - var/list/prefixes = data - prefixes = sanitize_islist(prefixes) - for(var/c in prefixes) - if(!valid_prefix(c)) - prefixes -= c - if(!length(prefixes)) - return default_value() - return prefixes - -/datum/category_item/player_setup_item/player_global/language_prefix/content(datum/preferences/prefs, mob/user, data) - var/list/prefixes = data - . = list() - . += "Language Keys
" - . += " [jointext(prefixes, "")] [href_simple(prefs, "change", "Change")] [href_simple(prefs, "reset", "Reset")]" - -/datum/category_item/player_setup_item/player_global/language_prefix/act(datum/preferences/prefs, mob/user, action, list/params) - switch(action) - if("change") - var/char - var/keys[0] - do - char = input("Enter a single special character.\nYou may re-select the same characters.\nThe following characters are already in use by radio: ; : .\nThe following characters are already in use by special say commands: ! * ^", "Enter Character - [3 - keys.len] remaining") as null|text - if(char) - if(length(char) > 1) - alert(user, "Only single characters allowed.", "Error", "Ok") - else if(char in list(";", ":", ".")) - alert(user, "Radio character. Rejected.", "Error", "Ok") - else if(char in list("!","*", "^")) - alert(user, "Say character. Rejected.", "Error", "Ok") - else if(contains_az09(char)) - alert(user, "Non-special character. Rejected.", "Error", "Ok") - else - keys.Add(char) - while(char && keys.len < 3) - - if(keys.len == 3) - write(prefs, keys) - return PREFERENCES_REFRESH - return PREFERENCES_HANDLED - if("reset") - write(prefs, config_legacy.language_prefixes.Copy()) - return PREFERENCES_REFRESH - return ..() - -/datum/category_item/player_setup_item/player_global/language_prefix/default_value(randomizing) - return config_legacy.language_prefixes.Copy() - -/datum/preferences/proc/get_language_prefixes() - var/list/L = get_global_data(GLOBAL_DATA_LANGUAGE_PREFIX) - return L.Copy() - -/datum/preferences/proc/get_primary_language_prefix() - var/list/L = get_global_data(GLOBAL_DATA_LANGUAGE_PREFIX) - return L[1] - -/datum/preferences/proc/is_language_prefix(c) - return c in get_global_data(GLOBAL_DATA_LANGUAGE_PREFIX) diff --git a/code/modules/preferences/preference_setup/global/setting_datums.dm b/code/modules/preferences/preference_setup/global/setting_datums.dm deleted file mode 100644 index 63afcec92f4..00000000000 --- a/code/modules/preferences/preference_setup/global/setting_datums.dm +++ /dev/null @@ -1,365 +0,0 @@ -var/list/_client_preferences -var/list/_client_preferences_by_key -var/list/_client_preferences_by_type - -/proc/get_client_preferences() - if(!_client_preferences) - _client_preferences = list() - for(var/ct in subtypesof(/datum/client_preference)) - var/datum/client_preference/client_type = ct - if(initial(client_type.description)) - _client_preferences += new client_type() - return _client_preferences - -/proc/get_client_preference(var/datum/client_preference/preference) - if(istype(preference)) - return preference - if(ispath(preference)) - return get_client_preference_by_type(preference) - return get_client_preference_by_key(preference) - -/proc/get_client_preference_by_key(var/preference) - if(!_client_preferences_by_key) - _client_preferences_by_key = list() - for(var/ct in get_client_preferences()) - var/datum/client_preference/client_pref = ct - _client_preferences_by_key[client_pref.key] = client_pref - return _client_preferences_by_key[preference] - -/proc/get_client_preference_by_type(var/preference) - if(!_client_preferences_by_type) - _client_preferences_by_type = list() - for(var/ct in get_client_preferences()) - var/datum/client_preference/client_pref = ct - _client_preferences_by_type[client_pref.type] = client_pref - return _client_preferences_by_type[preference] - -/datum/client_preference - var/description - var/key - var/enabled_by_default = TRUE - var/enabled_description = "Yes" - var/disabled_description = "No" - -/datum/client_preference/proc/may_toggle(var/mob/preference_mob) - return TRUE - -/datum/client_preference/proc/toggled(var/mob/preference_mob, var/enabled) - return - -/********************* -* Player Preferences * -*********************/ - -/datum/client_preference/play_admin_midis - description ="Play admin midis" - key = "SOUND_MIDI" - -/datum/client_preference/play_lobby_music - description ="Play lobby music" - key = "SOUND_LOBBY" - -/datum/client_preference/play_lobby_music/toggled(var/mob/preference_mob, var/enabled) - if(!preference_mob.client || !preference_mob.client.media) - return - - if(enabled) - preference_mob.client.playtitlemusic() - else - preference_mob.client.media.stop_music() - -/datum/client_preference/play_ambiance - description ="Play ambience" - key = "SOUND_AMBIENCE" - -/datum/client_preference/play_ambiance/toggled(var/mob/preference_mob, var/enabled) - if(!enabled) - SEND_SOUND(preference_mob, sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)) - SEND_SOUND(preference_mob, sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)) -// Need to put it here because it should be ordered riiiight here. -/datum/client_preference/play_jukebox - description ="Play jukebox music" - key = "SOUND_JUKEBOX" - -/datum/client_preference/play_jukebox/toggled(var/mob/preference_mob, var/enabled) - if(!enabled) - preference_mob.stop_all_music() - else - preference_mob.update_music() - -/datum/client_preference/eating_noises - description = "Eating Noises" - key = "EATING_NOISES" - enabled_description = "Noisy" - disabled_description = "Silent" - -/datum/client_preference/digestion_noises - description = "Digestion Noises" - key = "DIGEST_NOISES" - enabled_description = "Noisy" - disabled_description = "Silent" - -/datum/client_preference/weather_sounds - description ="Weather sounds" - key = "SOUND_WEATHER" - enabled_description = "Audible" - disabled_description = "Silent" - -/datum/client_preference/supermatter_hum - description ="Supermatter hum" - key = "SOUND_SUPERMATTER" - enabled_description = "Audible" - disabled_description = "Silent" - -/datum/client_preference/ghost_ears - description ="Ghost ears" - key = "CHAT_GHOSTEARS" - enabled_description = "All Speech" - disabled_description = "Nearby" - -/datum/client_preference/ghost_sight - description ="Ghost sight" - key = "CHAT_GHOSTSIGHT" - enabled_description = "All Emotes" - disabled_description = "Nearby" - -/datum/client_preference/ghost_radio - description ="Ghost radio" - key = "CHAT_GHOSTRADIO" - enabled_description = "All Chatter" - disabled_description = "Nearby" - -/datum/client_preference/chat_tags - description ="Chat tags" - key = "CHAT_SHOWICONS" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/air_pump_noise - description ="Air Pump Ambient Noise" - key = "SOUND_AIRPUMP" - enabled_description = "Audible" - disabled_description = "Silent" - -/datum/client_preference/mob_tooltips - description ="Mob tooltips" - key = "MOB_TOOLTIPS" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/pickup_sounds - description = "Picked Up Item Sounds" - key = "SOUND_PICKED" - - enabled_description = "Enabled" - disabled_description = "Disabled" - -/datum/client_preference/drop_sounds - description = "Dropped Item Sounds" - key = "SOUND_DROPPED" - enabled_description = "Enabled" - disabled_description = "Disabled" - -/datum/client_preference/hotkeys_default - description ="Hotkeys Default" - key = "HUD_HOTKEYS" - enabled_description = "Enabled" - disabled_description = "Disabled" - enabled_by_default = FALSE // Backwards compatibility - -/datum/client_preference/subtle_see - description = "Subtle Emotes" - key = "SUBTLE_SEE" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/show_typing_indicator - description ="Typing indicator" - key = "SHOW_TYPING" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/show_typing_indicator/toggled(var/mob/preference_mob, var/enabled) - if(!enabled) - preference_mob.set_typing_indicator(FALSE) - -/datum/client_preference/show_ooc - description ="OOC chat" - key = "CHAT_OOC" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/show_looc - description ="LOOC chat" - key = "CHAT_LOOC" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/show_dsay - description ="Dead chat" - key = "CHAT_DEAD" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/check_mention - description ="Emphasize Name Mention" - key = "CHAT_MENTION" - enabled_description = "Emphasize" - disabled_description = "Normal" - -/datum/client_preference/show_progress_bar - description ="Progress Bar" - key = "SHOW_PROGRESS" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/browser_style - description = "Fake NanoUI Browser Style" - key = "BROWSER_STYLED" - enabled_description = "Fancy" - disabled_description = "Plain" - -/datum/client_preference/ambient_occlusion - description = "Fake Ambient Occlusion" - key = "AMBIENT_OCCLUSION_PREF" - enabled_by_default = FALSE - enabled_description = "On" - disabled_description = "Off" - -/datum/client_preference/ambient_occlusion/toggled(var/mob/preference_mob, var/enabled) - . = ..() - if(preference_mob.client) - preference_mob?.using_perspective?.planes?.sync_owner(preference_mob.client) - -/datum/client_preference/instrument_toggle - description ="Hear In-game Instruments" - key = "SOUND_INSTRUMENT" - -/datum/client_preference/anonymous_ghost_chat - description = "Anonymous Ghost Chat" - key = "ANON_GHOST_CHAT" - enabled_by_default = FALSE - enabled_description = "Hide ckey" - disabled_description = "Show ckey" - -/datum/client_preference/show_in_advanced_who - description = "Show my status in advanced who" - key = "SHOW_IN_ADVANCED_WHO" - enabled_by_default = TRUE - enabled_description = "Visible" - disabled_description = "Hidden" - -/datum/client_preference/announce_ghost_joinleave - description = "Announce joining/leaving as a ghost/observer" - key = "ANNOUNCE_GHOST_JOINLEAVE" - enabled_by_default = TRUE - enabled_description = "Announce" - disabled_description = "Silent" - -/datum/client_preference/help_intent_firing - description = "Allow firing on help intent" - key = "HELP_INTENT_SAFETY" - enabled_by_default = FALSE - enabled_description = "Allow" - disabled_description = "Forbid" - -/datum/client_preference/parallax - description = "Parallax (fancy space, disable for FPS issues" - key = "PARALLAX_ENABLED" - enabled_description = "Enabled" - disabled_description = "Disabled" - -/datum/client_preference/parallax/toggled(mob/preference_mob, enabled) - . = ..() - preference_mob?.client?.parallax_holder?.reset() -/datum/client_preference/overhead_chat - description = "Overhead Chat" - key = "OVERHEAD_CHAT" - enabled_description = "Show" - disabled_description = "Hide" - enabled_by_default = TRUE - -/******************** -* Staff Preferences * -********************/ -/datum/client_preference/admin/may_toggle(var/mob/preference_mob) - return check_rights(R_ADMIN, 0, preference_mob) - -/datum/client_preference/mod/may_toggle(var/mob/preference_mob) - return check_rights(R_MOD|R_ADMIN, 0, preference_mob) - -/datum/client_preference/debug/may_toggle(var/mob/preference_mob) - return check_rights(R_DEBUG|R_ADMIN, 0, preference_mob) - -/datum/client_preference/mod/show_attack_logs - description = "Attack Log Messages" - key = "CHAT_ATTACKLOGS" - enabled_description = "Show" - disabled_description = "Hide" - enabled_by_default = FALSE - -/datum/client_preference/debug/show_debug_logs - description = "Debug Log Messages" - key = "CHAT_DEBUGLOGS" - enabled_description = "Show" - disabled_description = "Hide" - enabled_by_default = FALSE - -/datum/client_preference/admin/show_chat_prayers - description = "Chat Prayers" - key = "CHAT_PRAYER" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/holder/may_toggle(var/mob/preference_mob) - return preference_mob && preference_mob.client && preference_mob.client.holder - -/datum/client_preference/holder/play_adminhelp_ping - description = "Adminhelps" - key = "SOUND_ADMINHELP" - enabled_description = "Hear" - disabled_description = "Silent" - -/datum/client_preference/holder/hear_radio - description = "Radio chatter" - key = "CHAT_RADIO" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/holder/show_rlooc - description ="Remote LOOC chat" - key = "CHAT_RLOOC" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/holder/obfuscate_stealth_dsay - description = "Obfuscate Stealthmin Dsay" - key = "OBFUSCATE_STEALTH_DSAY" - enabled_by_default = FALSE - enabled_description = "On" - disabled_description = "Off" - -/datum/client_preference/holder/stealth_ghost_mode - description = "Stealthmin Ghost Mode" - key = "STEALTH_GHOST_MODE" - enabled_by_default = FALSE - enabled_description = "Obfuscate Ghost" - disabled_description = "Normal Ghost" - -/datum/client_preference/autocorrect - description = "Autocorrect" - key = "AUTOCORRECT" - enabled_description = "Enabled" - disabled_description = "Disabled" - -/datum/client_preference/examine_look - description = "Examine Messages" - key = "EXAMINE_LOOK" - enabled_description = "Show" - disabled_description = "Hide" - -/datum/client_preference/language_indicator - description = "Language Indicators" - key = "LANGUAGE_INDICATOR" - enabled_description = "Show" - disabled_description = "Hide" diff --git a/code/modules/preferences/preference_setup/keybindings/keybindings.dm b/code/modules/preferences/preference_setup/keybindings/keybindings.dm deleted file mode 100644 index 57e92944ee4..00000000000 --- a/code/modules/preferences/preference_setup/keybindings/keybindings.dm +++ /dev/null @@ -1,214 +0,0 @@ -// todo: convert and make looking up keys BY BIND possible -/datum/preferences - /// Custom Keybindings - var/list/key_bindings = list() - /// Hotkeys mode - var/hotkeys = TRUE - -//Used in savefile update from 11, can be removed once that is no longer relevant. -/datum/preferences/proc/force_reset_keybindings() - var/choice = tgalert(client.mob, "Your basic keybindings need to be reset, emotes will remain as before. Would you prefer 'hotkey' or 'classic' mode?", "Reset keybindings", "Hotkey", "Classic") - hotkeys = (choice != "Classic") - var/list/oldkeys = key_bindings - key_bindings = (hotkeys) ? deep_copy_list(GLOB.hotkey_keybinding_list_by_key) : deep_copy_list(GLOB.classic_keybinding_list_by_key) - - for(var/key in oldkeys) - if(!key_bindings[key]) - key_bindings[key] = oldkeys[key] - client.update_movement_keys() - -/datum/category_group/player_setup_category/keybindings - name = "Keybindings" - sort_order = 7 - category_item_type = /datum/category_item/player_setup_item/keybinding - auto_split = FALSE - -/datum/category_item/player_setup_item/keybinding/hotkey_mode - name = "Hotkey Mode" - sort_order = 1 - -/datum/category_item/player_setup_item/keybinding/hotkey_mode/load_preferences(savefile/S) - S["hotkeys"] >> pref.hotkeys - -/datum/category_item/player_setup_item/keybinding/hotkey_mode/save_preferences(savefile/S) - WRITE_FILE(S["hotkeys"], pref.hotkeys) - -/datum/category_item/player_setup_item/keybinding/hotkey_mode/sanitize_preferences() - pref.hotkeys = sanitize_integer(pref.hotkeys, 0, 1, initial(pref.hotkeys)) - -/datum/category_item/player_setup_item/keybinding/hotkey_mode/content(datum/preferences/prefs, mob/user, data) - . += "Hotkey mode: [(pref.hotkeys) ? "Hotkeys" : "Default"]
" - . += "Keybindings mode controls how the game behaves with tab and map/input focus.
If it is on Hotkeys, the game will always attempt to force you to map focus, meaning keypresses are sent \ - directly to the map instead of the input. You will still be able to use the command bar, but you need to tab to do it every time you click on the game map.
\ - If it is on Input, the game will not force focus away from the input bar, and you can switch focus using TAB between these two modes: If the input bar is pink, that means that you are in non-hotkey mode, sending all keypresses of the normal \ - alphanumeric characters, punctuation, spacebar, backspace, enter, etc, typing keys into the input bar. If the input bar is white, you are in hotkey mode, meaning all keypresses go into the game's keybind handling system unless you \ - manually click on the input bar to shift focus there.
\ - Input mode is the closest thing to the old input system.
\ - IMPORTANT: While in input mode's non hotkey setting (tab toggled), Ctrl + KEY will send KEY to the keybind system as the key itself, not as Ctrl + KEY. This means Ctrl + T/W/A/S/D/all your familiar stuff still works, but you \ - won't be able to access any regular Ctrl binds.
" - -/datum/category_item/player_setup_item/keybinding/hotkey_mode/OnTopic(href, list/href_list, mob/user) - if(href_list["option"]) - switch(href_list["option"]) - if("hotkeys") - pref.hotkeys = !pref.hotkeys - user.client.set_macros() - return PREFERENCES_REFRESH - return ..() - -/datum/category_item/player_setup_item/keybinding/bindings - name = "Bindings" - sort_order = 2 - -/datum/category_item/player_setup_item/keybinding/bindings/load_preferences(savefile/S) - S["key_bindings"] >> pref.key_bindings - -/datum/category_item/player_setup_item/keybinding/bindings/save_preferences(savefile/S) - WRITE_FILE(S["key_bindings"], pref.key_bindings) - -/datum/category_item/player_setup_item/keybinding/bindings/sanitize_preferences() - pref.key_bindings = sanitize_islist(pref.key_bindings, list()) - for(var/key in pref.key_bindings) - var/list/L = pref.key_bindings[key] - for(var/kb in L) - if(!GLOB.keybindings_by_name[kb]) - L -= kb - if(!length(L)) - pref.key_bindings -= key - -/datum/category_item/player_setup_item/keybinding/bindings/content(datum/preferences/prefs, mob/user, data) - . = list() - var/list/key_bindings = pref.key_bindings //cache for speed or atleast my finger's sake.. - // Create an inverted list of keybindings -> key - var/list/user_binds = list() - for (var/key in key_bindings) - for(var/kb_name in key_bindings[key]) - user_binds[kb_name] += list(key) - - var/list/kb_categories = list() - // Group keybinds by category - for (var/name in GLOB.keybindings_by_name) - var/datum/keybinding/kb = GLOB.keybindings_by_name[name] - kb_categories[kb.category] += list(kb) - - . += "" - - for (var/category in kb_categories) - . += "

[category]

" - for (var/i in kb_categories[category]) - var/datum/keybinding/kb = i - if(!length(user_binds[kb.name])) - . += " Unbound" - var/list/default_keys = pref.hotkeys ? kb.hotkey_keys : kb.classic_keys - if(LAZYLEN(default_keys)) - . += "| Default: [default_keys.Join(", ")]" - . += "
" - else - var/bound_key = user_binds[kb.name][1] - . += " [bound_key]" - for(var/bound_key_index in 2 to length(user_binds[kb.name])) - bound_key = user_binds[kb.name][bound_key_index] - . += " | [bound_key]" - if(length(user_binds[kb.name]) < MAX_KEYS_PER_KEYBIND) - . += "| Add Secondary" - var/list/default_keys = pref.hotkeys ? kb.classic_keys : kb.hotkey_keys - if(LAZYLEN(default_keys)) - . += "| Default: [default_keys.Join(", ")]" - . += "
" - - . += "

" - . += "\[Reset to default\]" - . += "" - . = jointext(., null) - -/datum/category_item/player_setup_item/keybinding/bindings/OnTopic(href, list/href_list, mob/user) - if(href_list["option"]) - switch(href_list["option"]) - if("keybindings_capture") - var/datum/keybinding/kb = GLOB.keybindings_by_name[href_list["keybinding"]] - var/old_key = href_list["old_key"] - pref.CaptureKeybinding(user, kb, old_key, src) - return - - if("keybindings_set") - var/kb_name = href_list["keybinding"] - if(!kb_name) - user << browse(null, "window=capturekeypress") - return PREFERENCES_REFRESH - - var/clear_key = text2num(href_list["clear_key"]) - var/old_key = href_list["old_key"] - if(clear_key) - if(pref.key_bindings[old_key]) - pref.key_bindings[old_key] -= kb_name - if(!length(pref.key_bindings[old_key])) - pref.key_bindings -= old_key - user << browse(null, "window=capturekeypress") - SScharacters.queue_preferences_save(pref) - return PREFERENCES_REFRESH - - var/new_key = uppertext(href_list["key"]) - var/AltMod = text2num(href_list["alt"]) ? "Alt" : "" - var/CtrlMod = text2num(href_list["ctrl"]) ? "Ctrl" : "" - var/ShiftMod = text2num(href_list["shift"]) ? "Shift" : "" - var/numpad = text2num(href_list["numpad"]) ? "Numpad" : "" - // var/key_code = text2num(href_list["key_code"]) - - if(GLOB._kbMap[new_key]) - new_key = GLOB._kbMap[new_key] - - var/full_key - switch(new_key) - if("Alt") - full_key = "[new_key][CtrlMod][ShiftMod]" - if("Ctrl") - full_key = "[AltMod][new_key][ShiftMod]" - if("Shift") - full_key = "[AltMod][CtrlMod][new_key]" - else - full_key = "[AltMod][CtrlMod][ShiftMod][numpad][new_key]" - if(pref.key_bindings[old_key]) - pref.key_bindings[old_key] -= kb_name - if(!length(pref.key_bindings[old_key])) - pref.key_bindings -= old_key - pref.key_bindings[full_key] += list(kb_name) - pref.key_bindings[full_key] = sortList(pref.key_bindings[full_key]) - - user << browse(null, "window=capturekeypress") - user.client.update_movement_keys() - SScharacters.queue_preferences_save(pref) - - if("keybindings_reset") - var/choice = tgalert(user, "Would you prefer 'hotkey' or 'classic' defaults?", "Setup keybindings", "Hotkey", "Classic", "Cancel") - if(choice == "Cancel") - return PREFERENCES_REFRESH - pref.hotkeys = (choice == "Hotkey") - pref.key_bindings = (pref.hotkeys) ? deep_copy_list(GLOB.hotkey_keybinding_list_by_key) : deep_copy_list(GLOB.classic_keybinding_list_by_key) - user.client.update_movement_keys() - return PREFERENCES_REFRESH - return ..() - -/datum/preferences/proc/CaptureKeybinding(mob/user, datum/keybinding/kb, old_key, datum/category_item/player_setup_item/keybinding/bindings/host) - var/HTML = {" -
Keybinding: [kb.full_name]
[kb.description]

Press any key to change
Press ESC to clear
- - "} - winshow(user, "capturekeypress", TRUE) - var/datum/browser/popup = new(user, "capturekeypress", "
Keybindings
", 350, 300) - popup.set_content(HTML) - popup.open(FALSE) - onclose(user, "capturekeypress", src) diff --git a/code/modules/preferences/preferences_toggle_procs.dm b/code/modules/preferences/preferences_toggle_procs.dm index f1b5e8da6cc..456c876ae27 100644 --- a/code/modules/preferences/preferences_toggle_procs.dm +++ b/code/modules/preferences/preferences_toggle_procs.dm @@ -1,346 +1,9 @@ -//Toggles for preferences, normal clients -/client/verb/toggle_ghost_ears() - set name = "Show/Hide Ghost Ears" - set category = "Preferences" - set desc = "Toggles between seeing all mob speech and nearby mob speech." - var/pref_path = /datum/client_preference/ghost_ears - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all mob speech as a ghost.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TGEars") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_vision() - set name = "Show/Hide Ghost Vision" - set category = "Preferences" - set desc = "Toggles between seeing all mob emotes and nearby mob emotes." - - var/pref_path = /datum/client_preference/ghost_sight - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see all emotes as a ghost.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TGVision") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_radio() - set name = "Show/Hide Radio Chatter" - set category = "Preferences" - set desc = "Toggles between seeing all radio chat and nearby radio chatter." - - var/pref_path = /datum/client_preference/ghost_radio - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all radios as a ghost.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TGRadio") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_deadchat() - set name = "Show/Hide Deadchat" - set category = "Preferences" - set desc = "Toggles the dead chat channel." - - var/pref_path = /datum/client_preference/show_dsay - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear dead chat as a ghost.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TDeadChat") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ooc() - set name = "Show/Hide OOC" - set category = "Preferences" - set desc = "Toggles global out of character chat." - - var/pref_path = /datum/client_preference/show_ooc - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(/datum/client_preference/show_ooc)) ? "now" : "no longer"] hear global out of character chat.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_looc() - set name = "Show/Hide LOOC" - set category = "Preferences" - set desc = "Toggles local out of character chat." - - var/pref_path = /datum/client_preference/show_looc - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear local out of character chat.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_typing() - set name = "Show/Hide Typing Indicator" - set category = "Preferences" - set desc = "Toggles the speech bubble typing indicator." - - var/pref_path = /datum/client_preference/show_typing_indicator - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] have the speech indicator.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TTIND") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ahelp_sound() - set name = "Toggle Admin Help Sound" - set category = "Preferences" - set desc = "Toggles the ability to hear a noise broadcasted when you get an admin message." - - var/pref_path = /datum/client_preference/holder/play_adminhelp_ping - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive noise from admin messages.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TAHelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_lobby_music() - set name = "Toggle Lobby Music" - set category = "Preferences" - set desc = "Toggles the music in the lobby." - - var/pref_path = /datum/client_preference/play_lobby_music - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear music in the lobby.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TLobMusic") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_admin_midis() - set name = "Toggle Admin MIDIs" - set category = "Preferences" - set desc = "Toggles the music in the lobby." - - var/pref_path = /datum/client_preference/play_admin_midis - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear MIDIs from admins.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TAMidis") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ambience() - set name = "Toggle Ambience" - set category = "Preferences" - set desc = "Toggles the playing of ambience." - - var/pref_path = /datum/client_preference/play_ambiance - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear ambient noise.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TAmbience") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_weather_sounds() - set name = "Toggle Weather Sounds" - set category = "Preferences" - set desc = "Toggles the ability to hear weather sounds while on a planet." - - var/pref_path = /datum/client_preference/weather_sounds - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear weather sounds.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TWeatherSounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_supermatter_hum() - set name = "Toggle SM Hum" // Avoiding using the full 'Supermatter' name to not conflict with the Setup-Supermatter adminverb. - set category = "Preferences" - set desc = "Toggles the ability to hear supermatter hums." - - var/pref_path = /datum/client_preference/supermatter_hum - - toggle_preference(pref_path) - - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear a hum from the supermatter.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TSupermatterHum") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_jukebox() - set name = "Toggle Jukebox" - set category = "Preferences" - set desc = "Toggles the playing of jukebox music." - - var/pref_path = /datum/client_preference/play_jukebox - - toggle_preference(pref_path) - - to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear jukebox music.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TJukebox") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_be_special(role in be_special_flags) - set name = "Toggle SpecialRole Candidacy" - set category = "Preferences" - set desc = "Toggles which special roles you would like to be a candidate for, during events." - - var/role_flag = be_special_flags[role] - if(!role_flag) return - - prefs.be_special ^= role_flag - SScharacters.queue_preferences_save(prefs) - - to_chat(src,"You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible).") - - feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_air_pump_hum() - set name = "Toggle Air Pump Noise" - set category = "Preferences" - set desc = "Toggles Air Pumps humming" - - var/pref_path = /datum/client_preference/air_pump_noise - - toggle_preference(pref_path) - - to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear air pumps hum, start, and stop.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TAirPumpNoise") - -/client/verb/toggle_pickup_sounds() - set name = "Toggle Picked Up Item Sounds" - set category = "Preferences" - set desc = "Toggles sounds when items are picked up or thrown." - - var/pref_path = /datum/client_preference/pickup_sounds - - toggle_preference(pref_path) - - to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear sounds when items are picked up or thrown.") - - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb", "TPickupSounds") - -/client/verb/toggle_mob_tooltips() - set name = "Toggle Mob Tooltips" - set category = "Preferences" - set desc = "Toggles displaying name/species over mobs when moused over." - - var/pref_path = /datum/client_preference/mob_tooltips - toggle_preference(pref_path) - SScharacters.queue_preferences_save(prefs) - - to_chat(src,"You will now [(is_preference_enabled(/datum/client_preference/mob_tooltips)) ? "see" : "not see"] mob tooltips.") - - feedback_add_details("admin_verb","TMobTooltips") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_hear_instruments() - set name = "Toggle Hear/Ignore Instruments" - set category = "Preferences" - set desc = "Hear In-game Instruments" - - var/pref_path = /datum/client_preference/instrument_toggle - toggle_preference(pref_path) - SScharacters.queue_preferences_save(prefs) - - to_chat(src, "You will [(is_preference_enabled(/datum/client_preference/instrument_toggle)) ? "now hear" : "no longer hear"] instruments being played.") - - feedback_add_details("admin_verb","THInstm") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_overhead_chat() - set name = "Toggle Overhead Chat" - set category = "Preferences" - set desc = "Enable/Disable seeing overhead chat messages." - - var/pref_path = /datum/client_preference/overhead_chat - toggle_preference(pref_path) - SScharacters.queue_preferences_save(prefs) - - to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/overhead_chat)) ? "see" : "not see"] overhead chat messages..") - - feedback_add_details("admin_verb","TOHChat") - - -/client/verb/toggle_subtle_emotes() - set name = "Toggle Subtle Emotes" - set category = "Preferences" - set desc = "Toggle seeing subtle emotes as a ghost." - - var/pref_path = /datum/client_preference/subtle_see - toggle_preference(pref_path) - SScharacters.queue_preferences_save(prefs) - - to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/subtle_see)) ? "see" : "not see"] subtle emotes.") - - feedback_add_details("admin_verb","TSubtleEmote") -//Toggles for Staff -//Developers - -/client/proc/toggle_debug_logs() - set name = "Toggle Debug Logs" - set category = "Preferences" - set desc = "Toggles debug logs." - - var/pref_path = /datum/client_preference/debug/show_debug_logs - - if(check_rights(R_ADMIN|R_DEBUG)) - toggle_preference(pref_path) - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive debug logs.") - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -//Mods -/client/proc/toggle_attack_logs() - set name = "Toggle Attack Logs" - set category = "Preferences" - set desc = "Toggles attack logs." - - var/pref_path = /datum/client_preference/mod/show_attack_logs - - if(check_rights(R_ADMIN|R_MOD)) - toggle_preference(pref_path) - to_chat(src,"You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive attack logs.") - SScharacters.queue_preferences_save(prefs) - - feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +// todo: god fucking damnit why is this in this file? /mob/living/carbon/human/verb/toggle_pain_msg() set name = "Toggle Pain Messages" - set category = "Preferences" + set category = "OOC" set desc = "Toggles pain messages." set src = usr @@ -349,11 +12,10 @@ else src.painmsg = 1 to_chat(src,"You will [ (painmsg) ? "now" : "no longer"] see your own pain messages.") - feedback_add_details("admin_verb","painmsg") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /mob/living/carbon/human/verb/acting() set name = "Feign Impairment" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Allows user to manually enable drunkenness, stutter, jitter, etc." set src = usr diff --git a/code/modules/projectiles/dnalocking.dm b/code/modules/projectiles/dnalocking.dm index b5488db0fea..cc76fa593cd 100644 --- a/code/modules/projectiles/dnalocking.dm +++ b/code/modules/projectiles/dnalocking.dm @@ -33,7 +33,7 @@ /obj/item/gun/verb/give_dna() set name = "Give DNA" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr get_dna(usr) @@ -58,7 +58,7 @@ /obj/item/gun/verb/remove_dna() set name = "Remove DNA" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr clear_dna(usr) @@ -76,7 +76,7 @@ /obj/item/gun/verb/allow_dna() set name = "Toggle DNA Samples Allowance" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr toggledna(usr) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 0e1454a9ee0..8d5ecefeb26 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -389,7 +389,7 @@ handle_click_safety(user) return - if(!user?.client?.is_preference_enabled(/datum/client_preference/help_intent_firing) && user.a_intent == INTENT_HELP) + if(!user?.client?.get_preference_toggle(/datum/game_preference_toggle/game/help_intent_firing) && user.a_intent == INTENT_HELP) to_chat(user, SPAN_WARNING("You refrain from firing [src] because your intent is set to help!")) return @@ -835,7 +835,7 @@ /obj/item/gun/verb/toggle_safety_verb() set src in usr - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Toggle Gun Safety" if(usr == loc) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 23d639e8364..717c55ad975 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -318,7 +318,7 @@ //in case the weapon has firemodes and can't unload using attack_hand() /obj/item/gun/ballistic/verb/unload_gun() set name = "Unload Ammo" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(usr.stat || usr.restrained()) return diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index caeecb00832..3977ec6de2c 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -181,7 +181,7 @@ one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand. /obj/item/gun/energy/sniperrifle/verb/scope() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Use Scope" set popup_menu = 1 set src in usr @@ -217,7 +217,7 @@ var/scope_multiplier = 1.5 /obj/item/gun/energy/monorifle/verb/sights() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Aim Down Sights" set popup_menu = 1 set src in usr diff --git a/code/modules/projectiles/guns/energy/sizegun_vr.dm b/code/modules/projectiles/guns/energy/sizegun_vr.dm index c2940eb6c08..a96008be2e0 100644 --- a/code/modules/projectiles/guns/energy/sizegun_vr.dm +++ b/code/modules/projectiles/guns/energy/sizegun_vr.dm @@ -42,7 +42,7 @@ /obj/item/gun/energy/sizegun/proc/select_size() set name = "Select Size" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) var/size_select = input("Put the desired size (25-200%)", "Set Size", size_set_to*100) as num diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 439381e11d7..11e1dd6ee28 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -64,7 +64,7 @@ /obj/item/gun/energy/floragun/verb/select_gene() set name = "Select Gene" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) var/genemask = input("Choose a gene to modify.") as null|anything in SSplants.plant_gene_datums diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm index 1fcb4298d22..9d43fcbb3fa 100644 --- a/code/modules/projectiles/guns/launcher/pneumatic.dm +++ b/code/modules/projectiles/guns/launcher/pneumatic.dm @@ -34,7 +34,7 @@ /obj/item/gun/launcher/pneumatic/verb/set_pressure() //set amount of tank pressure. set name = "Set Valve Pressure" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in range(0) var/N = input("Percentage of tank used per shot:","[src]") as null|anything in possible_pressure_amounts if (N) diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm index aa7f9d1fbda..e19910e122d 100644 --- a/code/modules/projectiles/guns/projectile/boltaction.dm +++ b/code/modules/projectiles/guns/projectile/boltaction.dm @@ -213,7 +213,7 @@ scoped_accuracy = 100 /obj/item/gun/ballistic/shotgun/pump/scopedrifle/verb/scope() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Use Scope" set popup_menu = 1 diff --git a/code/modules/projectiles/guns/projectile/musket.dm b/code/modules/projectiles/guns/projectile/musket.dm index 78d65cdbeb9..a17b875a4af 100644 --- a/code/modules/projectiles/guns/projectile/musket.dm +++ b/code/modules/projectiles/guns/projectile/musket.dm @@ -33,7 +33,7 @@ if(!has_powder) to_chat(user, SPAN_WARNING("\The [src] is not loaded with gunpowder!")) return FALSE - if(!user?.client?.is_preference_enabled(/datum/client_preference/help_intent_firing) && user.a_intent == INTENT_HELP) + if(!user?.client?.get_preference_toggle(/datum/game_preference_toggle/game/help_intent_firing) && user.a_intent == INTENT_HELP) to_chat(user, SPAN_WARNING("You refrain from firing [src] because your intent is set to help!")) return FALSE if(safety_state == GUN_SAFETY_ON) diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 8dbeb0d05d1..c2798f3b120 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -29,7 +29,7 @@ /obj/item/gun/ballistic/colt/detective/verb/rename_gun() set name = "Name Gun" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Rename your gun. If you're Security." var/mob/M = usr @@ -48,7 +48,7 @@ /obj/item/gun/ballistic/colt/detective/verb/reskin_gun() set name = "Resprite gun" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Click to choose a sprite for your gun." var/mob/M = usr diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index af530957c26..accf9272424 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -20,7 +20,7 @@ /obj/item/gun/ballistic/revolver/verb/spin_cylinder() set name = "Spin cylinder" set desc = "Fun when you're bored out of your skull." - set category = "Object" + set category = VERB_CATEGORY_OBJECT chamber_offset = 0 visible_message("\The [usr] spins the cylinder of \the [src]!", \ @@ -71,7 +71,7 @@ /obj/item/gun/ballistic/revolver/detective/verb/rename_gun() set name = "Name Gun" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Click to rename your gun. If you're the detective." var/mob/M = usr @@ -99,7 +99,7 @@ /obj/item/gun/ballistic/revolver/detective45/verb/rename_gun() set name = "Name Gun" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Rename your gun. If you're the Detective." var/mob/M = usr @@ -118,7 +118,7 @@ /obj/item/gun/ballistic/revolver/detective45/verb/reskin_gun() set name = "Resprite gun" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Click to choose a sprite for your gun." var/mob/M = usr @@ -215,7 +215,7 @@ /obj/item/gun/ballistic/revolver/lemat/verb/swap_firingmode() set name = "Swap Firing Mode" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Click to swap from one method of firing to another." var/mob/living/carbon/human/M = usr @@ -258,7 +258,7 @@ /obj/item/gun/ballistic/revolver/lemat/spin_cylinder() set name = "Spin cylinder" set desc = "Fun when you're bored out of your skull." - set category = "Object" + set category = VERB_CATEGORY_OBJECT chamber_offset = 0 visible_message("\The [usr] spins the cylinder of \the [src]!", \ diff --git a/code/modules/projectiles/guns/projectile/semiauto.dm b/code/modules/projectiles/guns/projectile/semiauto.dm index f69d83c0caa..f93a515685b 100644 --- a/code/modules/projectiles/guns/projectile/semiauto.dm +++ b/code/modules/projectiles/guns/projectile/semiauto.dm @@ -34,7 +34,7 @@ scoped_accuracy = 100 /obj/item/gun/ballistic/garand/sniper/verb/scope() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Use Scope" set popup_menu = 1 diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 1d40202a040..0e21977cc57 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -81,7 +81,7 @@ /obj/item/gun/ballistic/shotgun/pump/combat/warden/verb/rename_gun() set name = "Name Gun" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Rename your gun. If you're the Warden." var/mob/M = usr @@ -100,7 +100,7 @@ /obj/item/gun/ballistic/shotgun/pump/combat/warden/verb/reskin_gun() set name = "Resprite gun" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set desc = "Click to choose a sprite for your gun." var/mob/M = usr diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index cc90ae00536..1b5b38c2fd5 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -69,7 +69,7 @@ ..() /obj/item/gun/ballistic/heavysniper/verb/scope() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Use Scope" set popup_menu = 1 @@ -105,7 +105,7 @@ icon_state = "SVD-empty" /obj/item/gun/ballistic/SVD/verb/scope() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Use Scope" set popup_menu = 1 diff --git a/code/modules/projectiles/guns/projectile/sniper/collapsible_sniper.dm b/code/modules/projectiles/guns/projectile/sniper/collapsible_sniper.dm index ff68d4742f1..5cc4e475944 100644 --- a/code/modules/projectiles/guns/projectile/sniper/collapsible_sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper/collapsible_sniper.dm @@ -3,7 +3,7 @@ /obj/item/gun/ballistic/heavysniper/collapsible /obj/item/gun/ballistic/heavysniper/collapsible/verb/take_down() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Disassemble Rifle" var/mob/living/carbon/human/user = usr diff --git a/code/modules/projectiles/magazines/smartmag.dm b/code/modules/projectiles/magazines/smartmag.dm index 36f372c37b1..9b2f96e9682 100644 --- a/code/modules/projectiles/magazines/smartmag.dm +++ b/code/modules/projectiles/magazines/smartmag.dm @@ -201,7 +201,7 @@ // This verb clears out the smart mag's copied data, but only if it's empty /obj/item/ammo_magazine/smart/verb/clear_ammo_data() set name = "Clear Ammo Data" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!istype(src.loc, /mob/living)) // Needs to be in your hands to reset diff --git a/code/modules/projectiles/targeting/targeting_mob.dm b/code/modules/projectiles/targeting/targeting_mob.dm index 7968b119b3d..75ca52f4b2a 100644 --- a/code/modules/projectiles/targeting/targeting_mob.dm +++ b/code/modules/projectiles/targeting/targeting_mob.dm @@ -4,7 +4,7 @@ /mob/verb/toggle_gun_mode() set name = "Toggle Gun Mode" set desc = "Begin or stop aiming." - set category = "IC" + set category = VERB_CATEGORY_IC if(isliving(src)) var/mob/living/M = src diff --git a/code/modules/reagents/items/hypospray.dm b/code/modules/reagents/items/hypospray.dm index af5633b3c8e..512cf86d455 100644 --- a/code/modules/reagents/items/hypospray.dm +++ b/code/modules/reagents/items/hypospray.dm @@ -97,7 +97,7 @@ // todo: alt click context radials? /obj/item/hypospray/verb/set_transfer_amount() set name = "Set Injection Amount" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(!inject_adjustable) usr.action_feedback(SPAN_WARNING("[src] can't have its injection thresholds changed."), src) diff --git a/code/modules/reagents/machinery/dispenser/cartridge.dm b/code/modules/reagents/machinery/dispenser/cartridge.dm index 69ae493929e..f60e72fb846 100644 --- a/code/modules/reagents/machinery/dispenser/cartridge.dm +++ b/code/modules/reagents/machinery/dispenser/cartridge.dm @@ -19,7 +19,7 @@ /obj/item/reagent_containers/cartridge/dispenser/verb/set_label_verb() set name = "Set Label" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr var/new_label = input(usr, "Enter a new label.", "Label Cartridge", label) as text|null diff --git a/code/modules/reagents/machinery/reagent_dispenser.dm b/code/modules/reagents/machinery/reagent_dispenser.dm index 08a8af4cadd..f78c043b66d 100644 --- a/code/modules/reagents/machinery/reagent_dispenser.dm +++ b/code/modules/reagents/machinery/reagent_dispenser.dm @@ -41,7 +41,7 @@ /obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this set name = "Set transfer amount" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts if (N) diff --git a/code/modules/reagents/machinery/reagent_dispenser/watercooler.dm b/code/modules/reagents/machinery/reagent_dispenser/watercooler.dm index eb4d408da46..9926b6417d6 100644 --- a/code/modules/reagents/machinery/reagent_dispenser/watercooler.dm +++ b/code/modules/reagents/machinery/reagent_dispenser/watercooler.dm @@ -28,7 +28,7 @@ /obj/structure/reagent_dispensers/water_cooler/verb/rotate_clockwise() set name = "Rotate Cooler Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored || usr:stat) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 38fecf0e79d..f290dc6c805 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -36,7 +36,7 @@ /obj/item/reagent_containers/verb/set_APTFT() //set amount_per_transfer_from_this set name = "Set transfer amount" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in range(0) var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts if(N) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index c494f1a72fe..da54531817d 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -83,7 +83,7 @@ /obj/item/reagent_containers/spray/verb/empty() set name = "Empty Tank" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if (alert(usr, "Are you sure you want to empty that?", "Empty Tank:", "Yes", "No") != "Yes") diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 81926a4b64c..56483c413aa 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -129,7 +129,7 @@ // flip and rotate verbs /obj/structure/disposalconstruct/verb/rotate() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Rotate Pipe" set src in view(1) @@ -144,7 +144,7 @@ update() /obj/structure/disposalconstruct/verb/flip() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Flip Pipe" set src in view(1) if(usr.stat) diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index 6510b5fbdf1..a539e8c311a 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -120,7 +120,7 @@ return ..() /obj/machinery/computer/transhuman/resleeving/verb/eject_mirror() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject Mirror" set src in oview(1) diff --git a/code/modules/resleeving/infomorph.dm b/code/modules/resleeving/infomorph.dm index c1461ace1e6..13b11d6e4f9 100644 --- a/code/modules/resleeving/infomorph.dm +++ b/code/modules/resleeving/infomorph.dm @@ -325,7 +325,7 @@ var/list/infomorph_emotions = list( /mob/living/silicon/infomorph/lay_down() set name = "Rest" - set category = "IC" + set category = VERB_CATEGORY_IC resting = !resting icon_state = resting ? "[chassis]_rest" : "[chassis]" @@ -382,7 +382,7 @@ var/list/infomorph_emotions = list( /mob/living/silicon/infomorph/verb/wipe_software() set name = "Suspend Self" - set category = "OOC" + set category = VERB_CATEGORY_OOC set desc = "Wipe yourself from your hardware. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." // Make sure people don't kill themselves accidentally diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index a0b901ebd0b..6eb21e0d84f 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -618,7 +618,7 @@ /obj/machinery/transhuman/resleever/verb/get_out() set name = "EJECT Occupant" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != CONSCIOUS) return @@ -628,7 +628,7 @@ /obj/machinery/transhuman/resleever/verb/move_inside() set name = "Move INSIDE" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(usr.stat != CONSCIOUS || machine_stat & (NOPOWER|BROKEN)) return diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index 4136e694e42..1d6e7397035 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -146,7 +146,7 @@ /obj/machinery/shield_capacitor/verb/rotate_clockwise() set name = "Rotate Capacitor Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if (src.anchored) diff --git a/code/modules/species/station/alraune.dm b/code/modules/species/station/alraune.dm index 827ecaba873..1ea5df54cd9 100644 --- a/code/modules/species/station/alraune.dm +++ b/code/modules/species/station/alraune.dm @@ -373,7 +373,7 @@ /mob/living/carbon/human/proc/alraune_fruit_pick() set name = "Pick Fruit" set desc = "Pick fruit off of [src]." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) //do_reagent_implant(usr) diff --git a/code/modules/tgui/module.dm b/code/modules/tgui/module.dm index 6aebc2669ea..34413fb8a10 100644 --- a/code/modules/tgui/module.dm +++ b/code/modules/tgui/module.dm @@ -8,8 +8,7 @@ * without having to deal with copypaste code * * todo: for now, we just use expected_type and typecast. we want to use pointers in the future. - * - * todo: there's no way to push custom data at the moment, which makes modules not too advantageous in certain cases. + * todo: maybe hold off on that pointer idea * * todo: /datum/tgui_module/push_ui_data() should route to host automatically if host registers modules. * todo: rework module registration system. /datum procs: register_ui_module(), unregister_ui_module() hooked to model del, for automatic inclusion in ui. diff --git a/code/modules/tgui/modules/general/cardmod.dm b/code/modules/tgui/modules/general/cardmod.dm index 579cc6a645a..194e95514ed 100644 --- a/code/modules/tgui/modules/general/cardmod.dm +++ b/code/modules/tgui/modules/general/cardmod.dm @@ -409,7 +409,6 @@ expected_type = /datum/computer_file/program/card_mod var/datum/computer_file/program/program - /datum/tgui_module/card_mod/standard/id_computer/ntos/New(datum/host) . = ..() program = host diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 8e806bb64c9..e3c594ae0e5 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -65,7 +65,8 @@ */ /datum/tgui/New(mob/user, datum/src_object, interface, title, datum/tgui/parent_ui) log_tgui(user, - "new [interface] fancy [user?.client?.prefs.tgui_fancy]", + // "new [interface] fancy [user?.client?.prefs.tgui_fancy]", + "new [interface] fancy 1", src_object = src_object) src.user = user src.src_object = src_object @@ -112,7 +113,9 @@ if(!window.is_ready()) window.initialize( strict_mode = TRUE, - fancy = user.client.prefs.tgui_fancy, + // todo: do we need that lmao + // fancy = user.client.prefs.tgui_fancy, + fancy = TRUE, assets = list( get_asset_datum(/datum/asset/simple/tgui), )) @@ -275,8 +278,10 @@ "refreshing" = refreshing, "window" = list( "key" = window_key, - "fancy" = user.client.prefs.tgui_fancy, - "locked" = user.client.prefs.tgui_lock, + // "fancy" = user.client.prefs.tgui_fancy, + // "locked" = user.client.prefs.tgui_lock, + "fancy" = TRUE, + "locked" = TRUE, ), "client" = list( "ckey" = user.client.ckey, @@ -291,12 +296,12 @@ var/list/modules = list() // static first if(with_static_data) - json_data["static"] = src_object.ui_static_data(user, src, state) + json_data["static"] = src_object.ui_static_data(user, src) for(var/datum/module as anything in modules_registered) var/id = modules_registered[module] modules[id] = module.ui_static_data(user, src, TRUE) if(with_data) - json_data["data"] = src_object.ui_data(user, src, state) + json_data["data"] = src_object.ui_data(user, src) for(var/datum/module as anything in (with_static_data? modules_registered : modules_processed)) var/id = modules_registered[module] modules[id] = modules[id] | module.ui_data(user, src, TRUE) @@ -459,6 +464,8 @@ /** * Registers a datum as a module into this UI. * + * todo: why is 'interface' a param again..? + * * @params * * module - the module in question * * id - the id to use for the module diff --git a/code/modules/tgui/tgui_module_context.dm b/code/modules/tgui/tgui_module_context.dm new file mode 100644 index 00000000000..5c5f964c5cd --- /dev/null +++ b/code/modules/tgui/tgui_module_context.dm @@ -0,0 +1,30 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/** + * holds the context of a module's embedding into an UI + */ +/datum/tgui_module_context + /// thing being controlled + var/datum/delegate + /// person doing the controlling + var/datum/event_args/actor/actor + /// the host ui + var/datum/tgui/ui + +#warn /datum/tgui/proc/register_functional_module(datum/target = src) + +/datum/tgui_module_context/New(datum/host, datum/delegate, datum/event_args/actor/actor, datum/tgui/ui) + src.delegate = delegate + src.host = host + src.actor = actor + src.ui = ui + + +/datum/tgui_module_context/proc/tgui_context() + return list( + "host" = ui.src_object, + ) + +// todo: this file is unticked and is basically a placeholder for modules v3 +// more in tgui_module_function.dm diff --git a/code/modules/tgui/tgui_module_function.dm b/code/modules/tgui/tgui_module_function.dm new file mode 100644 index 00000000000..de8daa7b928 --- /dev/null +++ b/code/modules/tgui/tgui_module_function.dm @@ -0,0 +1,31 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + +/** + * holds the behavior of a module's embedding into an UI + */ +/datum/tgui_module_function + /// tgui interface + var/tgui_interface + +// todo: this file is unticked and is basically a placeholder for modules v3 +// tl;dr +// instead of the overhead of modules-per-datum +// why not singleton datum with context datums made and destroyde when uis are opened/closed? + +/datum/tgui_module_function/proc/static_data(datum/tgui_module_context/context) + return list( + "$tgui" = tgui_interface, + "$context" = context.tgui_context(), + ) + +/datum/tgui_module_function/proc/data(datum/tgui_module_context/context) + return list() + +/** + * remember to stop propagation if ..() is truthy. + * + * @return TRUE if handled + */ +/datum/tgui_module_function/proc/act(datum/tgui_module_context/context, action, list/params) + return FALSE diff --git a/code/modules/tgui_panel/external.dm b/code/modules/tgui_panel/external.dm index cb7c6cae293..c112a8c147e 100644 --- a/code/modules/tgui_panel/external.dm +++ b/code/modules/tgui_panel/external.dm @@ -10,7 +10,7 @@ */ /client/verb/fix_tgui_panel() set name = "Fix chat" - set category = "OOC" + set category = VERB_CATEGORY_OOC var/action log_tgui(src, "Started fixing.", context = "verb/fix_tgui_panel") diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 238159f0e78..ece092bb29b 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -107,8 +107,8 @@ Notes: /proc/openToolTip(mob/user = null, atom/movable/tip_src = null, params = null, title = "", content = "", theme = "") if(istype(user)) if(user.client && user.client.tooltips) - if(!theme && user.client.prefs && user.client.prefs.tooltipstyle) - theme = lowertext(user.client.prefs.tooltipstyle) + if(!theme) + theme = lowertext(user.get_preference_entry(/datum/game_preference_entry/dropdown/tooltip_style)) if(!theme) theme = "midnight" user.client.tooltips.show(tip_src, params, title, content, theme) diff --git a/code/modules/vehicles_legacy/skateboard.dm b/code/modules/vehicles_legacy/skateboard.dm index 463dde8faea..a2d16724a2c 100644 --- a/code/modules/vehicles_legacy/skateboard.dm +++ b/code/modules/vehicles_legacy/skateboard.dm @@ -87,11 +87,22 @@ var/turf/T2 = get_step(A, pick(throw_dirs)) unload(H) H.throw_at_old(T2, 1, 1, src) + + //Surface injuries + H.adjustBruteLoss(rand(3, 5)) var/head_slot = SLOT_HEAD if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) - H.setBrainLoss(2,5) + //5% chance to suffer severe head trauma because you weren't wearing a helmet + if(prob(5)) + var/obj/item/organ/external/egg = H.get_organ(BP_HEAD) + egg?.fracture() + H.adjustBrainLoss(rand(5, 10)) + visible_message("[src] crashes into [A], sending [H] flying! They land on their head, that doesn't look good...") + else + //Minor brain injury from hitting your head + H.adjustBrainLoss(rand(1, 2)) + visible_message("[src] crashes into [A], sending [H] flying!") H.update_health() - visible_message("[src] crashes into [A], sending [H] flying!") H.afflict_paralyze(20 * 12) else if (rough_terrain) var/list/throw_dirs = list(1, 2, 4, 8, 5, 6, 9, 10) @@ -100,9 +111,15 @@ H.throw_at_old(T2, 1, 1, src) var/head_slot = SLOT_HEAD if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) - H.setBrainLoss(2,5) + if(prob(5)) + var/obj/item/organ/external/egg = H.get_organ(BP_HEAD) + egg?.fracture() + H.adjustBrainLoss(rand(5, 10)) + visible_message("[src] crashes into [A], sending [H] flying! They land on their head, that doesn't look good...") + else + H.adjustBrainLoss(rand(1, 2)) + visible_message("[src] crashes into [A], sending [H] flying!") H.update_health() - visible_message("[src] crashes into [A], sending [H] flying!") H.afflict_paralyze(20 * 12) else var/backdir = turn(dir, 180) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 7cfb2dd4215..48ff592cd33 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -192,7 +192,7 @@ else soundfile = fancy_vore_sounds[vore_sound] if(soundfile) - playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) + playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/game_preference_toggle/vore_sounds/eating_noises) recent_sound = TRUE //Messages if it's a mob @@ -239,7 +239,7 @@ else soundfile = fancy_release_sounds[release_sound] if(soundfile) - playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) + playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/game_preference_toggle/vore_sounds/eating_noises) return count @@ -287,7 +287,7 @@ else soundfile = fancy_release_sounds[release_sound] if(soundfile) - playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) + playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/game_preference_toggle/vore_sounds/eating_noises) return 1 @@ -565,9 +565,9 @@ struggle_snuggle = sound(get_sfx("classic_struggle_sounds")) else struggle_snuggle = sound(get_sfx("fancy_prey_struggle")) - playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) + playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) else - playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) + playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) if(escapable) //If the stomach has escapable enabled. if(prob(escapechance)) //Let's have it check to see if the prey escapes first. @@ -650,7 +650,7 @@ else soundfile = fancy_vore_sounds[target.vore_sound] if(soundfile) - playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) + playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/game_preference_toggle/vore_sounds/digestion_noises) owner.updateVRPanel() for(var/mob/living/M in contents) M.updateVRPanel() diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 0407ec859c7..de0c2e86500 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -38,7 +38,7 @@ if(is_wet && wet_loop) // Is it a fleshy environment, and does the pred have a fleshy heartbeat loop to play? if(!M.client) continue - if(M.is_preference_enabled(/datum/client_preference/digestion_noises)) //then we check if the mob has sounds enabled at all + if(M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) //then we check if the mob has sounds enabled at all var/sound/preyloop = sound('sound/vore/sunesound/prey/loop.ogg') M.playsound_local(get_turf(src),preyloop, 80,0, channel = CHANNEL_PREYLOOP) M.next_preyloop = (world.time + (52 SECONDS)) @@ -131,13 +131,13 @@ else items_preserved |= I if(prob(25)) //Less often than with normal digestion - if(L && L.client && L.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(L && L.client && L.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(L,prey_digest) play_sound = pick(pred_digest) else if(item_digest_mode == IM_DIGEST) digest_item(I) if(prob(25)) //Less often than with normal digestion - if(L && L.client && L.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(L && L.client && L.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(L,prey_digest) play_sound = pick(pred_digest) to_update = TRUE @@ -154,13 +154,13 @@ else items_preserved |= I if(prob(25)) //Less often than with normal digestion - if(L && L.client && L.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(L && L.client && L.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(L,prey_digest) play_sound = pick(pred_digest) else if(item_digest_mode == IM_DIGEST) digest_item(I) if(prob(25)) //Less often than with normal digestion - if(L && L.client && L.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(L && L.client && L.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(L,prey_digest) play_sound = pick(pred_digest) to_update = TRUE @@ -178,7 +178,7 @@ if(prob(50)) //Was SO OFTEN. AAAA. for(var/mob/M in contents) - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) @@ -208,7 +208,7 @@ to_chat(M,"" + digest_alert_prey + "") play_sound = pick(pred_death) - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_death) if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains) handle_remains_leaving(M) @@ -253,7 +253,7 @@ for (var/target in touchable_mobs) var/mob/living/M = target if(prob(10)) //Less often than gurgles. People might leave this on forever. - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) @@ -288,7 +288,7 @@ var/mob/living/M = target if(prob(10)) //Less often than gurgles. People might leave this on forever. - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) @@ -304,7 +304,7 @@ var/mob/living/M = target if(prob(10)) //Infinite gurgles! - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) @@ -323,7 +323,7 @@ var/mob/living/M = target if(prob(10)) - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) @@ -339,7 +339,7 @@ var/mob/living/M = target if(prob(10)) - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) @@ -356,7 +356,7 @@ if(prob(50)) //Wet heals! The secret is you can leave this on for gurgle noises for fun. for(var/mob/M in contents) - if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(M && M.client && M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises)) SEND_SOUND(M,prey_digest) play_sound = pick(pred_digest) @@ -387,7 +387,7 @@ if(play_sound) LAZYCLEARLIST(hearing_mobs) for(var/mob/M in hearers(VORE_SOUND_RANGE, owner)) - if(!M.client || !(M.is_preference_enabled(/datum/client_preference/digestion_noises))) + if(!M.client || !(M.get_preference_toggle(/datum/game_preference_toggle/vore_sounds/digestion_noises))) continue LAZYADD(hearing_mobs, M) for(var/mob/M in hearing_mobs) //so we don't fill the whole room with the sound effect diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 9bd661c47b9..73bc3e8c5c5 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -314,7 +314,7 @@ // /mob/living/proc/lick(var/mob/living/tasted in living_mobs(1)) set name = "Lick" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Lick someone nearby!" set popup_menu = FALSE // Stop licking by accident! @@ -353,7 +353,7 @@ // 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 category = VERB_CATEGORY_IC set desc = "Smell someone nearby!" set popup_menu = FALSE @@ -743,7 +743,7 @@ /mob/living/proc/switch_scaling() set name = "Switch scaling mode" - set category = "Preferences" + set category = "OOC" set desc = "Switch sharp/fuzzy scaling for current mob." appearance_flags ^= PIXEL_SCALE diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/code/modules/vore/eating/simple_animal_vr.dm index 354555af9b3..e2f857215bf 100644 --- a/code/modules/vore/eating/simple_animal_vr.dm +++ b/code/modules/vore/eating/simple_animal_vr.dm @@ -8,7 +8,7 @@ // /mob/living/simple_mob/proc/animal_nom(var/mob/living/T in living_mobs(1)) set name = "Animal Nom" - set category = "IC" + set category = VERB_CATEGORY_IC set desc = "Since you can't grab, you get a verb!" if (stat != CONSCIOUS) @@ -32,7 +32,7 @@ /mob/living/simple_mob/proc/toggle_digestion() set name = "Toggle Animal's Digestion" set desc = "Enables digestion on this mob for 20 minutes." - set category = "OOC" + set category = VERB_CATEGORY_OOC set src in oview(1) var/mob/living/carbon/human/user = usr @@ -58,7 +58,7 @@ /mob/living/simple_mob/proc/toggle_fancygurgle() set name = "Toggle Animal's Gurgle sounds" set desc = "Switches between Fancy and Classic sounds on this mob." - set category = "OOC" + set category = VERB_CATEGORY_OOC set src in oview(1) var/mob/living/user = usr //I mean, At least ghosts won't use it. diff --git a/code/modules/vore/fluffstuff/custom_clothes.dm b/code/modules/vore/fluffstuff/custom_clothes.dm index abcc7fca0e0..608add366e0 100644 --- a/code/modules/vore/fluffstuff/custom_clothes.dm +++ b/code/modules/vore/fluffstuff/custom_clothes.dm @@ -440,7 +440,7 @@ /obj/item/clothing/suit/storage/fluff/jacket/verb/toggle() set name = "Toggle coat buttons" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in usr if(!CHECK_MOBILITY(usr, MOBILITY_CAN_USE)) diff --git a/code/modules/vore/fluffstuff/custom_items.dm b/code/modules/vore/fluffstuff/custom_items.dm index 055629a3d26..6d71cdef762 100644 --- a/code/modules/vore/fluffstuff/custom_items.dm +++ b/code/modules/vore/fluffstuff/custom_items.dm @@ -1202,7 +1202,7 @@ /mob/living/carbon/human/proc/use_reagent_implant_evian() set name = "Lay Egg" set desc = "Force Evian to lay an egg by squeezing into his lower body! This makes the lizard extremely embarrassed, and it looks funny." - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in view(1) //do_reagent_implant(usr) diff --git a/code/modules/vore/fluffstuff/guns/bsharpoon.dm b/code/modules/vore/fluffstuff/guns/bsharpoon.dm index f924a0bbbcd..05b424e56af 100644 --- a/code/modules/vore/fluffstuff/guns/bsharpoon.dm +++ b/code/modules/vore/fluffstuff/guns/bsharpoon.dm @@ -81,7 +81,7 @@ /obj/item/bluespace_harpoon/verb/chande_fire_mode(mob/user as mob) set name = "Change fire mode" - set category = "Object" + set category = VERB_CATEGORY_OBJECT set src in oview(1) if(transforming) return mode = !mode diff --git a/code/modules/xenoarcheaology/finds/talking.dm b/code/modules/xenoarcheaology/finds/talking.dm index da1c2deec98..c6527c6dc84 100644 --- a/code/modules/xenoarcheaology/finds/talking.dm +++ b/code/modules/xenoarcheaology/finds/talking.dm @@ -114,7 +114,7 @@ continue //skip monkeys and leavers if (istype(M, /mob/new_player)) continue - if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + if(M.stat == DEAD && M.get_preference_toggle(/datum/game_preference_toggle/observer/ghost_ears)) listening|=M for(var/mob/M in listening) diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm index d4b03f66577..555e3fb8b71 100644 --- a/code/modules/xenoarcheaology/tools/suspension_generator.dm +++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm @@ -179,7 +179,7 @@ /obj/machinery/suspension_gen/verb/rotate_counterclockwise() set src in view(1) set name = "Rotate suspension gen Counterclockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(anchored) to_chat(usr, SPAN_DANGER("You cannot rotate [src], it has been firmly fixed to the floor.")) @@ -189,7 +189,7 @@ /obj/machinery/suspension_gen/verb/rotate_clockwise() set src in view(1) set name = "Rotate suspension gen Clockwise" - set category = "Object" + set category = VERB_CATEGORY_OBJECT if(anchored) to_chat(usr, SPAN_DANGER("You cannot rotate [src], it has been firmly fixed to the floor.")) diff --git a/code/modules/xenobio/machinery/processor.dm b/code/modules/xenobio/machinery/processor.dm index 4c380937efc..600a748c01c 100644 --- a/code/modules/xenobio/machinery/processor.dm +++ b/code/modules/xenobio/machinery/processor.dm @@ -84,7 +84,7 @@ // Verb to remove everything. /obj/machinery/processor/verb/eject() - set category = "Object" + set category = VERB_CATEGORY_OBJECT set name = "Eject Processor" set src in oview(1) diff --git a/config/entries/cross_server.txt b/config/entries/cross_server.txt index ef0d152eaa0..11dbfe700c8 100644 --- a/config/entries/cross_server.txt +++ b/config/entries/cross_server.txt @@ -3,13 +3,5 @@ ## Our secret key - used to auth incoming messages # COMMS_KEY default_pwd -## allow sending out cross server bunker overrides -## TODO: remove / replace -ALLOW_CROSS_SERVER_BUNKER_OVERRIDE - -## List of cross server bunker overrides -## TODO: remove / replace -# CROSS_SERVER_BUNKER_OVERRIDE - ## Our server name in cross-server communications # CROSS_COMM_NAME Citadel Station 13 - RP diff --git a/config/entries/database.txt b/config/entries/database.txt index 2b6f2455598..8608646a50e 100644 --- a/config/entries/database.txt +++ b/config/entries/database.txt @@ -1,6 +1,6 @@ ## Enables SQL/database usage ## WARNING: A lot of the codebase requires SQL. Not using this is a terrible idea. -#SQL_ENABLED +# SQL_ENABLED ## SQL address SQL_ADDRESS localhost diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 278114c10f7..d7da3b1ea57 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/screen/actions/pai.dmi b/icons/screen/actions/pai.dmi index dc0dcd32517..c3eb658f886 100644 Binary files a/icons/screen/actions/pai.dmi and b/icons/screen/actions/pai.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index 17c258a024b..a01ba32c036 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -2,7 +2,7 @@ /client/verb/wiki(query as text) set name = "wiki" set desc = "Type what you want to know about. This will open the wiki on your web browser." - set category = "OOC" + set category = VERB_CATEGORY_OOC if(config_legacy.wikiurl) if(query) if(config_legacy.wikisearchurl) @@ -96,19 +96,20 @@ /client/verb/changelog() set name = "Changelog" - set category = "OOC" + set category = VERB_CATEGORY_OOC if(!GLOB.changelog_tgui) GLOB.changelog_tgui = new /datum/changelog() GLOB.changelog_tgui.ui_interact(usr) - if(prefs.lastchangelog != GLOB.changelog_hash) - prefs.lastchangelog = GLOB.changelog_hash - prefs.save_preferences() + + if(player.immediately_available() && player.player_misc["changelog_hash"] != GLOB.changelog_hash) + player.player_misc["changelog_hash"] = GLOB.changelog_hash + player.save() winset(src, "infowindow.changelog", "font-style=;") /client/verb/hotkeys_help() set name = "hotkeys-help" - set category = "OOC" + set category = VERB_CATEGORY_OOC var/admin = {" Admin: @@ -227,13 +228,3 @@ Any-Mode: (hotkey doesn't need to be on) to_chat(src, other) if(holder) to_chat(src, admin) - -/client/verb/skin_toggle_hotkeys() - set name = "Toggle Hotkeys" - set category = "Preferences" - set desc = "Toggle input control scheme" - set hidden = TRUE - - prefs.hotkeys = !prefs.hotkeys - set_macros() - diff --git a/interface/menus/_menus.dm b/interface/menus/_menus.dm index fb441646832..43f9d2f0ef4 100644 --- a/interface/menus/_menus.dm +++ b/interface/menus/_menus.dm @@ -1,3 +1,6 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + //! skin menus /** * dynamic in-code menu system with blackjack and hookers diff --git a/interface/menus/main.dm b/interface/menus/main.dm index e233d3f2518..3f46b7ce946 100644 --- a/interface/menus/main.dm +++ b/interface/menus/main.dm @@ -1,3 +1,6 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2023 Citadel Station developers. *// + GLOBAL_DATUM_INIT(main_window_menu, /datum/skin_menu/main, new) /datum/skin_menu/main diff --git a/maps/rift/levels/rift-03-underground1.dmm b/maps/rift/levels/rift-03-underground1.dmm index 34b62814ecc..acfd5e943be 100644 --- a/maps/rift/levels/rift-03-underground1.dmm +++ b/maps/rift/levels/rift-03-underground1.dmm @@ -2310,6 +2310,13 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/tiled, /area/engineering/atmos) +"fJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "fK" = ( /obj/structure/table/reinforced, /obj/effect/floor_decal/borderfloor{ @@ -3421,6 +3428,7 @@ /obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 4 }, +/obj/machinery/fire_alarm/west_mount, /turf/simulated/floor/tiled/white, /area/security/prison/lower) "jx" = ( @@ -4027,6 +4035,10 @@ "lB" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/appliance/cooker/fryer, +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, /turf/simulated/floor/tiled/white, /area/security/prison/lower) "lC" = ( @@ -4492,6 +4504,12 @@ }, /turf/simulated/floor/concrete/indoors, /area/security/prison/lower) +"mT" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "mU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 @@ -4818,6 +4836,8 @@ /obj/machinery/camera/network/security{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/concrete/indoors, /area/security/prison/lower) "on" = ( @@ -4889,6 +4909,12 @@ /obj/effect/floor_decal/spline/plain{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/concrete/indoors, /area/security/prison/lower) "ow" = ( @@ -5021,6 +5047,12 @@ /obj/structure/cable/green{ icon_state = "16-0" }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plating, /area/security/prison/lower) "oS" = ( @@ -5170,6 +5202,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/engineering) +"pq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "pr" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -5302,6 +5341,12 @@ "pM" = ( /turf/simulated/wall/r_wall/prepainted, /area/rift/station/fighter_bay/transport_tunnel_garage) +"pN" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/concrete/tile/indoors, +/area/security/prison/lower) "pO" = ( /obj/structure/railing{ dir = 8 @@ -5472,6 +5517,15 @@ /obj/structure/closet/crate/freezer, /turf/simulated/floor/tiled/freezer/cold, /area/security/prison/lower) +"qw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 10 + }, +/turf/simulated/floor, +/area/security/prison/lower) "qy" = ( /obj/structure/cable/green{ icon_state = "0-4" @@ -5515,6 +5569,12 @@ }, /turf/simulated/floor/tiled/steel, /area/hallway/primary/underone) +"qD" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/concrete/tile/indoors, +/area/security/prison/lower) "qF" = ( /obj/machinery/door/airlock/maintenance/sec{ req_one_access = null @@ -6060,6 +6120,7 @@ /obj/effect/floor_decal/corner/grey/diagonal, /obj/structure/table/marble, /obj/machinery/appliance/mixer/candy, +/obj/machinery/fire_alarm/east_mount, /turf/simulated/floor/tiled/white, /area/security/prison/lower) "sP" = ( @@ -6825,6 +6886,10 @@ /obj/machinery/pipedispenser/disposal, /turf/simulated/floor/tiled, /area/engineering/atmos) +"vp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "vq" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow, /obj/machinery/meter, @@ -7374,6 +7439,10 @@ /obj/effect/floor_decal/spline/plain, /turf/simulated/floor/wood, /area/rift/station/fighter_bay) +"xi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "xj" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -7916,6 +7985,8 @@ /obj/machinery/door/airlock/maintenance/sec{ req_one_access = null }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor, /area/security/prison/lower) "yD" = ( @@ -7967,6 +8038,10 @@ }, /turf/simulated/floor/concrete/tile/indoors, /area/security/prison/lower) +"yL" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "yM" = ( /obj/effect/floor_decal/rust, /obj/structure/cable/green{ @@ -8489,12 +8564,6 @@ /obj/machinery/holoplant, /turf/simulated/floor/tiled/white, /area/rnd/secure_storage/upper) -"Ay" = ( -/obj/structure/railing/grey{ - dir = 4 - }, -/turf/simulated/floor/concrete/indoors, -/area/security/prison/lower) "Az" = ( /obj/machinery/door/window/westleft, /obj/machinery/door/blast/shutters{ @@ -8662,6 +8731,14 @@ }, /turf/simulated/floor/wood, /area/maintenance/engineering) +"Bi" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/concrete/tile/indoors, +/area/security/prison/lower) "Bj" = ( /turf/simulated/shuttle/wall/voidcraft, /area/turbolift/rmine/under1) @@ -9283,6 +9360,12 @@ }, /turf/simulated/floor/tiled/monowhite, /area/security/prison/lower) +"Dz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "DC" = ( /obj/machinery/door/airlock/glass_external{ req_one_access = list(47) @@ -9865,6 +9948,10 @@ }, /turf/simulated/floor/tiled/steel, /area/hallway/primary/underone) +"Fx" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "Fz" = ( /obj/effect/floor_decal/techfloor, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ @@ -10277,6 +10364,12 @@ }, /turf/simulated/floor/tiled/techmaint, /area/engineering/drone_fabrication) +"GG" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "GH" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 4 @@ -10291,6 +10384,12 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue, /turf/simulated/floor/tiled, /area/engineering/atmos) +"GK" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor, +/area/security/prison/lower) "GM" = ( /obj/machinery/atmospherics/pipe/manifold/visible/red{ dir = 1 @@ -10368,6 +10467,15 @@ /obj/random/maintenance/engineering, /turf/simulated/floor/plating, /area/maintenance/engineering) +"Hb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "Hc" = ( /obj/structure/railing{ dir = 4 @@ -10944,6 +11052,11 @@ /obj/item/reagent_containers/spray/squirt, /turf/simulated/floor/plating, /area/maintenance/elevator) +"IS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "IT" = ( /obj/machinery/button/remote/blast_door{ dir = 4; @@ -11450,6 +11563,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/engineering/atmos) +"Kz" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 8 + }, +/turf/simulated/floor, +/area/security/prison/lower) "KA" = ( /obj/effect/floor_decal/industrial/loading{ dir = 4 @@ -12647,6 +12770,13 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/rnd/secure_storage/upper) +"Og" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "Oh" = ( /obj/item/circuitboard/skills{ pixel_x = -3; @@ -12788,6 +12918,12 @@ /obj/structure/cable/green{ icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 8 + }, /turf/simulated/floor, /area/security/prison/lower) "Oy" = ( @@ -13372,6 +13508,16 @@ }, /turf/simulated/floor/tiled/techfloor, /area/station/protean_nanite_room) +"QS" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 5 + }, +/turf/simulated/floor, +/area/security/prison/lower) "QU" = ( /obj/effect/floor_decal/spline/plain, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -13502,6 +13648,15 @@ /obj/effect/paint/pipecyan, /turf/simulated/floor/plating, /area/engineering/atmos) +"Rq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "Rr" = ( /obj/effect/floor_decal/borderfloor, /obj/structure/cable{ @@ -13536,6 +13691,15 @@ /obj/machinery/camera/network/civilian, /turf/simulated/floor/tiled/steel, /area/rift/station/fighter_bay/maintenance) +"Rx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "Rz" = ( /obj/machinery/door/blast/shutters{ dir = 2; @@ -13606,6 +13770,15 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/engineering/atmos) +"RK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "RL" = ( /obj/structure/grille, /obj/structure/foamedmetal, @@ -13701,6 +13874,16 @@ }, /turf/simulated/floor/tiled/kafel_full/blue, /area/crew_quarters/pool) +"Sa" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 10 + }, +/turf/simulated/floor, +/area/security/prison/lower) "Sb" = ( /turf/simulated/floor/tiled/white, /area/security/prison/lower) @@ -13858,6 +14041,12 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/underone) +"SD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "SE" = ( /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/light{ @@ -14229,6 +14418,13 @@ }, /turf/simulated/floor, /area/hallway/primary/underone) +"Uj" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/concrete/indoors, +/area/security/prison/lower) "Ul" = ( /obj/machinery/space_heater, /obj/structure/railing, @@ -14393,6 +14589,9 @@ dir = 1 }, /obj/machinery/scale, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, /turf/simulated/floor/concrete/indoors, /area/security/prison/lower) "UL" = ( @@ -15939,6 +16138,12 @@ "ZH" = ( /obj/effect/floor_decal/rust, /obj/machinery/door/airlock/maintenance/sec, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 8 + }, /turf/simulated/floor, /area/security/prison/lower) "ZJ" = ( @@ -32628,7 +32833,7 @@ aa aa BH gq -vc +Kz vc BH aa @@ -33016,7 +33221,7 @@ ua ua ua JJ -vc +Kz Vd VJ ua @@ -33210,18 +33415,18 @@ ua Zi vc JT -JT -vc -vc +qw +GK +QS JJ ua FP Vg Vg +GG Vg Vg -Vg -Vg +mT YF ua Np @@ -33406,16 +33611,16 @@ JT JT JJ Oo -vc -vc +Sa +GK yC om -Vg -Vg -Vg -Vg -Vg -Vg +IS +IS +pq +Hb +vp +SD wj ua Np @@ -33606,8 +33811,8 @@ ua ua UJ Jy -Ay -Vg +Jy +Rx Vg Jy UG @@ -33995,7 +34200,7 @@ Vg Vg Vg Vg -Vg +Rx Vg Vg Vg @@ -34187,9 +34392,9 @@ Vg Vg Vg Vg -Vg -Vg -Vg +RK +IS +Rq Vg Vg Vg @@ -34381,7 +34586,7 @@ dD dD dD Vg -Vg +Rx dD Tk Tk @@ -34575,7 +34780,7 @@ ei ei dD Vg -Vg +Rx dD OU OU @@ -34769,7 +34974,7 @@ dD lE Ip Vg -Vg +Rx dD Tk Tk @@ -34963,7 +35168,7 @@ dD dD lm Vg -Vg +Rx dD dD dD @@ -35157,7 +35362,7 @@ dD dD Ip Vg -Vg +Rx dD Tk Tk @@ -35350,8 +35555,8 @@ dD dD dD Ip -Vg -Vg +yL +Uj dD OU OU @@ -35545,7 +35750,7 @@ dD dD Ip Vg -Vg +Rx dD Tk Tk @@ -35738,8 +35943,8 @@ dD dD dD Ip -Vg -Vg +Fx +Og dD dD dD @@ -35933,7 +36138,7 @@ dD dD Ip Vg -Vg +Rx LR Vk Vk @@ -36127,7 +36332,7 @@ dD dD Xt Vg -Vg +Rx fN sP sP @@ -36321,7 +36526,7 @@ dD Gf Ip Vg -Vg +Rx fN sP sP @@ -36515,7 +36720,7 @@ Mk Mk dD Vg -Vg +Rx fN sP sP @@ -36709,7 +36914,7 @@ Vg Vg Vg Vg -Vg +Rx iA sP yc @@ -36897,13 +37102,13 @@ dD JV yY Vg -Vg -Vg -Vg -Vg -Vg -Vg -Vg +Dz +xi +xi +xi +fJ +IS +Rq lK sP sP @@ -37091,11 +37296,11 @@ ua ua kM dD -dD +qD Vg Vg Vg -dD +pN dD dD lK @@ -38839,7 +39044,7 @@ ua IA SE pg -pg +Bi pg SE eu diff --git a/maps/rift/levels/rift-04-surface1.dmm b/maps/rift/levels/rift-04-surface1.dmm index 8bb49ecfc10..b4144794f52 100644 --- a/maps/rift/levels/rift-04-surface1.dmm +++ b/maps/rift/levels/rift-04-surface1.dmm @@ -858,6 +858,7 @@ icon_state = "4-8" }, /obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "aEE" = ( @@ -2326,6 +2327,20 @@ }, /turf/simulated/floor/lino, /area/tether/surfacebase/entertainment/backstage) +"bDQ" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals5, +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/turf/simulated/floor/tiled/steel, +/area/security/prison/upper) "bEb" = ( /obj/structure/table/rack/shelf, /obj/random/maintenance/security, @@ -2376,6 +2391,14 @@ /obj/vehicle_old/train/trolley, /turf/simulated/floor/tiled/steel, /area/quartermaster/hallway) +"bHw" = ( +/obj/structure/table/reinforced, +/obj/item/deck/cards{ + pixel_x = -10; + pixel_y = -9 + }, +/turf/simulated/floor/tiled/monotile, +/area/security/prison/upper) "bHO" = ( /obj/effect/floor_decal/spline/plain{ dir = 10 @@ -4800,6 +4823,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "dky" = ( @@ -6378,13 +6402,6 @@ }, /turf/simulated/floor/tiled/monowhite, /area/medical/patient_wing) -"eeH" = ( -/obj/machinery/door/firedoor/glass{ - dir = 8 - }, -/obj/machinery/door/airlock/maintenance/sec, -/turf/simulated/floor/plating, -/area/security/prison/upper) "eeN" = ( /obj/effect/floor_decal/rust, /turf/simulated/floor/plating, @@ -9709,6 +9726,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "gzd" = ( @@ -10757,6 +10775,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "hdw" = ( @@ -11461,10 +11480,10 @@ /obj/machinery/turnstile/exit{ dir = 8 }, -/obj/structure/curtain/open/shower/security, /obj/machinery/door/firedoor/glass{ dir = 8 }, +/obj/structure/curtain/open/black, /turf/simulated/floor/tiled/monodark, /area/security/prison/upper) "hzW" = ( @@ -13425,14 +13444,14 @@ /turf/simulated/floor/plating, /area/maintenance/security/lower) "iFM" = ( -/obj/machinery/door/airlock/glass/security{ - id_tag = "cell_lock_3"; - name = "Cell 3"; - req_one_access = null - }, /obj/machinery/door/firedoor/glass{ dir = 8 }, +/obj/machinery/door/airlock/security{ + id_tag = "cell_lock_3"; + name = "Cell 1"; + req_one_access = null + }, /turf/simulated/floor/tiled/monodark, /area/security/prison/upper) "iFN" = ( @@ -13535,6 +13554,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "iJb" = ( @@ -15912,6 +15932,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 5 + }, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "kkQ" = ( @@ -16246,14 +16269,14 @@ /turf/simulated/floor/carpet/sblucarpet, /area/crew_quarters/medbreak) "kwn" = ( -/obj/machinery/door/airlock/glass/security{ +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/machinery/door/airlock/security{ id_tag = "cell_lock_2"; name = "Cell 2"; req_one_access = null }, -/obj/machinery/door/firedoor/glass{ - dir = 8 - }, /turf/simulated/floor/tiled/monodark, /area/security/prison/upper) "kwz" = ( @@ -18601,6 +18624,21 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) +"lXo" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/steeldecal/steel_decals5{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/security/prison/upper) "lYg" = ( /obj/structure/symbol/sa, /turf/simulated/wall/prepainted, @@ -19813,6 +19851,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 6 + }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "mIB" = ( @@ -20629,6 +20671,14 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/research/southwest_wing) +"nja" = ( +/obj/structure/table/reinforced, +/obj/item/storage/pill_bottle/dice{ + pixel_x = 7; + pixel_y = 7 + }, +/turf/simulated/floor/tiled/monotile, +/area/security/prison/upper) "njD" = ( /obj/effect/floor_decal/corner/beige{ dir = 10 @@ -25704,6 +25754,12 @@ /obj/structure/cable/green{ icon_state = "32-2" }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 8 + }, /turf/simulated/open, /area/maintenance/lowmedbaymaint) "qhZ" = ( @@ -26074,6 +26130,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 10 + }, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "qse" = ( @@ -28291,6 +28350,10 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 4 }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, /turf/simulated/floor/tiled/steel, /area/security/prison/upper) "rJv" = ( @@ -33383,6 +33446,7 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) @@ -35421,6 +35485,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /turf/simulated/floor/plating, /area/maintenance/lowmedbaymaint) "vQy" = ( @@ -35706,14 +35771,14 @@ /turf/simulated/floor/outdoors/snow/lythios43c, /area/rift/surfacebase/outside/outside1) "vXz" = ( -/obj/machinery/door/airlock/glass/security{ +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/machinery/door/airlock/security{ id_tag = "cell_lock_1"; name = "Cell 1"; req_one_access = null }, -/obj/machinery/door/firedoor/glass{ - dir = 8 - }, /turf/simulated/floor/tiled/monodark, /area/security/prison/upper) "vYy" = ( @@ -36055,6 +36120,20 @@ /obj/machinery/photocopier, /turf/simulated/floor/tiled/dark, /area/security/prison/upper) +"wju" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals5, +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel, +/area/security/prison/upper) "wjG" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -37761,6 +37840,21 @@ }, /turf/simulated/floor/lythios43c, /area/rift/surfacebase/outside/outside1) +"xie" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/steeldecal/steel_decals5{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/security/prison/upper) "xit" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 10 @@ -58084,8 +58178,8 @@ gcW gcW gcW gcW -iXO -cQN +bDQ +lXo nqs eNh nqk @@ -58472,8 +58566,8 @@ gcW gcW gcW gcW -iXO -cQN +wju +xie nqs wEf lSE @@ -59428,7 +59522,7 @@ buH pnT peQ yeR -yeR +nja ejz cVb gcW @@ -59621,7 +59715,7 @@ qYv buH pnT ygq -yeR +bHw yeR ejz cVb @@ -60020,7 +60114,7 @@ pnT pnT pnT pnT -eeH +pnT pnT pnT pnT diff --git a/maps/rift/levels/rift-05-surface2.dmm b/maps/rift/levels/rift-05-surface2.dmm index 8972d4d46df..63fe275acb0 100644 --- a/maps/rift/levels/rift-05-surface2.dmm +++ b/maps/rift/levels/rift-05-surface2.dmm @@ -2925,6 +2925,9 @@ /obj/effect/floor_decal/industrial/loading{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/monodark, /area/security/security_processing) "bHs" = ( @@ -8676,6 +8679,10 @@ /obj/structure/cable/green{ icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled/dark, /area/security/security_processing) "fEL" = ( @@ -13399,6 +13406,18 @@ }, /turf/simulated/floor/tiled/steel, /area/crew_quarters/sleep) +"iED" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/security/hallway) "iEO" = ( /obj/structure/bed/padded, /obj/item/bedsheet/medical, @@ -15155,6 +15174,9 @@ /obj/machinery/turnstile/exit{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/security_processing) "jMu" = ( @@ -23017,6 +23039,9 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/security_processing) "oxe" = ( @@ -23606,6 +23631,12 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) +"oQZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/security/security_processing) "oRp" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -24011,6 +24042,9 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/security_processing) "pae" = ( @@ -30776,6 +30810,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark, /area/security/security_processing) "tAT" = ( @@ -31122,6 +31157,9 @@ /obj/effect/floor_decal/borderfloorblack/corner{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/security_processing) "tJG" = ( @@ -31927,6 +31965,9 @@ dir = 1 }, /obj/structure/curtain/open/black, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/security_processing) "uom" = ( @@ -36515,12 +36556,6 @@ /obj/effect/floor_decal/corner/red/bordercorner2{ dir = 4 }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 5 - }, /turf/simulated/floor/tiled/steel, /area/security/hallway) "xsA" = ( @@ -56435,7 +56470,7 @@ hpE kzS bnf tkZ -vCw +iED grI nDY nQn @@ -57017,7 +57052,7 @@ kxd ceg llM llM -llM +oQZ llM yeT cPE diff --git a/maps/rift/levels/rift-06-surface3.dmm b/maps/rift/levels/rift-06-surface3.dmm index b84524a8c39..9e7191e2f60 100644 --- a/maps/rift/levels/rift-06-surface3.dmm +++ b/maps/rift/levels/rift-06-surface3.dmm @@ -9401,9 +9401,6 @@ dir = 4; pixel_x = -30 }, -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 - }, /turf/simulated/floor/wood, /area/crew_quarters/bar) "aAk" = ( @@ -23002,21 +22999,18 @@ /turf/simulated/floor/tiled/monotile, /area/exploration/pilot_prep) "mxx" = ( -/obj/effect/floor_decal/corner/beige/full{ - dir = 8 - }, /obj/effect/floor_decal/spline/plain{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/machinery/light{ - dir = 8 - }, /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/bar) "mAj" = ( @@ -26280,6 +26274,22 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel, /area/exploration) +"vsW" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/fire_alarm/south_mount{ + pixel_y = -24 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/machinery/vending/mre, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/bar) "vtz" = ( /obj/structure/sink/kitchen{ pixel_y = 26 @@ -38311,7 +38321,7 @@ anP arV aUI aAj -jsv +vsW lbu akB ajM diff --git a/maps/sectors/admin_planets_192/croatoan.dmm b/maps/sectors/admin_planets_192/croatoan.dmm new file mode 100644 index 00000000000..4482bdbfd48 --- /dev/null +++ b/maps/sectors/admin_planets_192/croatoan.dmm @@ -0,0 +1,52246 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"ad" = ( +/obj/machinery/lathe/autolathe, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"ae" = ( +/obj/machinery/light/small/flicker, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"af" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/armor/pcarrier/ablative, +/obj/item/clothing/suit/armor/pcarrier/ablative{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/ablative{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/clothing/accessory/armor/armguards/ablative, +/obj/item/clothing/accessory/armor/armguards/ablative{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/clothing/accessory/armor/legguards/ablative{ + pixel_x = 5; + pixel_y = -7 + }, +/obj/item/clothing/accessory/armor/legguards/ablative{ + pixel_x = 5; + pixel_y = -7 + }, +/obj/item/clothing/accessory/armor/legguards/ablative, +/obj/item/clothing/accessory/armor/legguards/ablative, +/obj/item/clothing/head/helmet/ablative{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/clothing/head/helmet/ablative{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/clothing/head/helmet/ablative, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"ag" = ( +/obj/machinery/door/airlock/highsecurity{ + desc = "Medical Checkpoint" + }, +/obj/machinery/door/blast/puzzle{ + desc = "A large, reinforced blast door. This seems to have activated under some sort of emergency protocol and looks virtually indestructible to any means you might have short of blasting it open with some sort of explosive. Additionally, there's a key-pad integrated into the door that runs on some kind of internal battery. It's asking for a four digit pass-code."; + name = "Hardened Blast Door"; + id = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"ah" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/porta_turret, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"ai" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"aj" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"ak" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Operations Center"; + req_one_access = list(38,63) + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass{ + dir = 4; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"am" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"an" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Awaiting Specimen"; + info = "We're awaiting the specimen for the cell. Ensure the containment room is EMP proof, and can resist biological material growing into it." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ao" = ( +/obj/item/pickaxe/diamonddrill, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"ap" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"as" = ( +/obj/structure/bed/chair/sofa/black/left{ + dir = 1 + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"at" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/civ_checkpoint) +"au" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"av" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROG Cell-3" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"aw" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"ax" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"ay" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightorange/border, +/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/structure/cable, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"az" = ( +/obj/effect/debris/cleanable/blood/oil, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"aA" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"aB" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"aF" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Elevator" + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"aH" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/civ_bar_public) +"aK" = ( +/obj/machinery/door/window/brigdoor{ + desc = "Security Canister Storage"; + req_access = list(101); + req_one_access = list(103) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/spawner/corpse/engineer/rig, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"aL" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"aN" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"aO" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"aQ" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"aR" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"aV" = ( +/obj/structure/table/rack/shelf, +/obj/item/clothing/gloves/sterile/latex, +/obj/item/clothing/gloves/sterile/latex{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/gloves/sterile/latex{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/glasses/science{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"aX" = ( +/obj/spawner/corpse/scientist, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"aZ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"ba" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/structure/table/wooden_reinforced, +/obj/machinery/chemical_dispenser/catering/bar_coffee, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"bb" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"bc" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"bd" = ( +/obj/machinery/door/airlock/vault{ + req_one_access = list(39); + name = "Virology Lab" + }, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"bf" = ( +/obj/structure/table/standard, +/obj/machinery/reagentgrinder, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"bi" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROS Cell-5"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"bj" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = 13 + }, +/obj/machinery/camera/north_mount, +/obj/item/paper{ + info = "I swear to the lord above that if these people keep fucking with me, I'm gonna snap. RD's got it out for me or something! Bartender spilled a drink on purpose I think, right infront of me too. If I say anything I'll get reprimanded for being a 'drama queen.' (Note to self: Left that code in the last dorm on the right, room with the weird smiley blankets. Creeps me out, but it's the best place to hide the passcode.)"; + name = "Annoyance" + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"bm" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"bn" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"bo" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"bp" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"bq" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"br" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROG Cell-2" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"bu" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/effect/floor_decal/sign/m, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/med_checkpoint_lower) +"bv" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"bx" = ( +/obj/machinery/door/window/brigdoor{ + desc = "Security Canister Storage"; + req_access = list(101); + req_one_access = list(103) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"by" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/appliance/cooker/grill, +/obj/machinery/camera/north_mount, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"bB" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/machinery/power/rtg/fake_gen, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"bC" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"bD" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"bE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"bF" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"bH" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + alpha = 255; + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"bK" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"bN" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"bO" = ( +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-II Subject Four."; + info = "Imported from off-site via a Blackstar Security capture team. Found within a derelict town on Miaphus'Irra after having consumed a Tajaran. Shows increased adaptation to forms of harm and a significant mental resilience, however still falls victim to instincts. Testing continues on Friday." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"bR" = ( +/obj/structure/closet/secure_closet/personal, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"bT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"bW" = ( +/obj/item/paper{ + name = "Angry Note"; + info = "Can you guys STOP messing with the turrets? You triggered their red alert and now they're fucking pissed! I had to quickly call RD Ikanto and have her get a engineering team down here to fix your fuckup. One of the private security contractors nearly bit the bullet." + }, +/obj/structure/table/carbon, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"bY" = ( +/obj/machinery/light, +/obj/spawner/corpse/scientist, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"bZ" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"cb" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/salvageable/console_os, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"ce" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/structure/table/wooden_reinforced, +/obj/machinery/chemical_dispenser/catering/bar_soft, +/obj/structure/sign/double/barsign{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"cf" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"cg" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"ch" = ( +/obj/machinery/vending/security, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"ck" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/railing, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"cl" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"cm" = ( +/obj/machinery/light/small/emergency, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"cn" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"co" = ( +/obj/machinery/door/airlock/freezer{ + name = "Kitchen"; + req_access = list(28) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"cp" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"cr" = ( +/obj/structure/table/rack/shelf/steel, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 28 + }, +/obj/item/clothing/accessory/armor/tag/nts, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/accessory/armor/tag/nts, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/clothing/accessory/armor/tag/nts{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/accessory/armor/helmetcamera/security/body, +/obj/item/clothing/accessory/armor/helmetcamera/security/body{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/helmetcamera/security/body{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/helmetcamera/security/body, +/obj/item/clothing/accessory/armor/helmetcamera/security/body, +/obj/item/clothing/accessory/armor/helmetcamera/security/body{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/helmetcamera/security{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/clothing/accessory/armor/helmetcamera/security{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/clothing/accessory/armor/helmetcamera/security, +/obj/item/clothing/accessory/armor/helmetcamera/security, +/obj/item/clothing/accessory/armor/helmetcamera/security, +/obj/item/clothing/accessory/armor/helmetcamera/security, +/obj/item/clothing/accessory/armor/helmetcamera/security{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/clothing/accessory/armor/helmetcamera/security{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/paper{ + name = "High Security Reminder"; + info = "They upped the security massively recently, if High Sec goes into lockdown and we need to get in, we need to ask the HoS to open the armory blast doors, head inside and hit the high sec lockdown lift on our end. I know, it's stupid." + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"cs" = ( +/obj/machinery/door/airlock/freezer{ + name = "Kitchen"; + req_access = list(28) + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_hydro) +"cu" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/vending/boozeomat, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"cv" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"cA" = ( +/obj/machinery/beehive, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"cB" = ( +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"cC" = ( +/obj/structure/closet/secure_closet/hydroponics{ + req_access = list(); + req_one_access = list(30,35,47,77) + }, +/obj/item/storage/belt/utility/full, +/obj/item/shovel/spade, +/obj/item/plant_analyzer, +/obj/item/material/knife/machete/hatchet, +/obj/item/material/minihoe, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"cF" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/wood, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"cG" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"cH" = ( +/obj/machinery/door/airlock/highsecurity{ + desc = "Medical Checkpoint"; + name = "Class-P Science Checkpoint Entrance" + }, +/obj/machinery/door/blast/puzzle{ + desc = "A large, reinforced blast door. This seems to have activated under some sort of emergency protocol and looks virtually indestructible to any means you might have short of blasting it open with some sort of explosive. Additionally, there's a key-pad integrated into the door that runs on some kind of internal battery. It's asking for a four digit pass-code."; + name = "Hardened Blast Door"; + id = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"cJ" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 6 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"cK" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"cO" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"cP" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/folder/white, +/obj/item/paper{ + name = "Observation Results"; + info = "Observation results for Class-I Roanoke Colonies A, B, C, D and E. All show some signs of intelligence considering they've adapted to their environment near seemlessly. When we get another team of construction specialists, we'll expand the containment cells to house more Roanoke Colonies with even more complex environments for them to adapt to. I feel as if we are on the course of a breakthrough, here. We only need some more funding and a few nudges in the right place. -Research Director Ikanto" + }, +/obj/item/card/id/medical/head{ + registered_name = "Spare Virology Access Card" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"cQ" = ( +/obj/machinery/lathe/autolathe{ + name = "unlocked autolathe" + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"cR" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"cS" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"cT" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"cU" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/light/flicker{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "PPE Requirement"; + info = "Personal Protective Equipment (PPE) if REQUIRED beyond this point! Don't be an idiot and acquire some disease we have to name." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"cV" = ( +/obj/machinery/button/remote/blast_door{ + id = 24; + req_access = list(40); + req_one_access = list(19); + name = "Science Checkpoint Lockdown Override" + }, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_cmo_office) +"cW" = ( +/obj/item/paper{ + name = "More Mining Gear"; + info = "The further we go in, the heavier gear we need. Mountain's tough as Hell to dig into, had to start using those bulky excavation drills." + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain) +"cX" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"cY" = ( +/obj/machinery/smartfridge/chemistry, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_chemistry) +"cZ" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/structure/window/phoronreinforced, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"da" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"dc" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"dg" = ( +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/random/obstruction, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"dh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_morgue) +"di" = ( +/obj/structure/railing/grey{ + dir = 3 + }, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/civ_bar_public) +"dk" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 5 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"dn" = ( +/obj/structure/morgue{ + dir = 2 + }, +/obj/machinery/light/flicker, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"do" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"dp" = ( +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"dq" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"dr" = ( +/obj/structure/table/standard, +/obj/item/autopsy_scanner, +/obj/item/storage/firstaid/surgery, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"ds" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing Control Center" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/blast/puzzle{ + desc = "A hardened blast door that seems to be remotely controlled."; + id = 103; + name = "High Security Science Control Room" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"dt" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"du" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Entrance" + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"dw" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/structure/table/borosilicate, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"dx" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger{ + pixel_y = 12 + }, +/obj/machinery/cell_charger, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"dA" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"dD" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"dE" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/mountain) +"dF" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"dJ" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"dK" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"dL" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing Decontamination" + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"dM" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"dN" = ( +/obj/structure/table/reinforced, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/bodybag/cryobag{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"dO" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"dQ" = ( +/obj/machinery/door/airlock/freezer{ + name = "Kitchen Freezer"; + req_access = list(28) + }, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"dR" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/item/holowarrant, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"dS" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"dT" = ( +/obj/structure/salvageable/console_os{ + dir = 4; + name = "Data Console"; + desc = "A specialized data console which appears to access the camera logs of the nearby virology chamber." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"dW" = ( +/obj/structure/table/reinforced, +/obj/effect/floor_decal/corner/blue/border, +/obj/item/paper{ + info = "Had a lot of shipments come in out of the blue recently. Not the usual either, like materials and new hires. Saw a bunch of Blackstar guys come in recently too, all carrying rifles strapped to their backs and wearing red voidsuits. I can tell it's getting some of the other guys on edge, too."; + name = "Shipments" + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"dX" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"dZ" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Holding Cells"; + req_one_access = list(38,63) + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"ed" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_treatment) +"ee" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"eg" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"ei" = ( +/obj/structure/fake_stairs/north/top{ + _stair_tag = 5 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"ej" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"el" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"en" = ( +/turf/simulated/sky/triumph, +/area/admin_planet/croatoan/mountain) +"eo" = ( +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/outdoors/dirt/classp, +/area/admin_planet/croatoan/mountain_plains) +"ep" = ( +/obj/machinery/light, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"et" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"eu" = ( +/obj/structure/bed/pod, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"ew" = ( +/obj/structure/table/standard, +/obj/item/paper{ + name = "Welcome!"; + info = "Welcome to the NSB Croatoan! Whether you're a newly hired Engineer, excavation technician, researcher or a contracted internal security provider, you'll find the Croatoan has all the facilities to ensure you can help it thrive. If you are apart of the High Security Science Division, please see Research Director Ikanto at your earliest conveinence." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"ex" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"ey" = ( +/obj/structure/closet/firecloset/full, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"ez" = ( +/turf/simulated/mineral/icerock, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"eA" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"eD" = ( +/obj/structure/bed/chair/bay/comfy/black{ + dir = 1 + }, +/obj/spawner/corpse/vintage/pilot, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"eE" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"eF" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"eG" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"eH" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"eI" = ( +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"eL" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted/civilian, +/area/admin_planet/croatoan/civ_hydro) +"eM" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Construction Area" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"eN" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/civ_hydro) +"eP" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"eQ" = ( +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"eU" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/machinery/light, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"eV" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"eX" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/mauve/border, +/obj/spawner/corpse/scientist, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"eY" = ( +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"eZ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"fa" = ( +/obj/structure/sign/warning, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"fb" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"fd" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"ff" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"fh" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"fi" = ( +/obj/machinery/smartfridge, +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"fj" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"fl" = ( +/obj/structure/window/phoronreinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-I Subject-D"; + info = "Subject-D, Class-I Roanoke Colony. Subject has taken the form of a locker after environmental encouragement. Locker appears to have taken on an odd shape compared to the others, research ongoing." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"fm" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"fo" = ( +/obj/structure/salvageable/server_os, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/high_sec_science_observation) +"fp" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/armor/pcarrier/ballistic, +/obj/item/clothing/suit/armor/pcarrier/ballistic{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/ballistic{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/ballistic, +/obj/item/clothing/accessory/armor/legguards/ballistic, +/obj/item/clothing/accessory/armor/legguards/ballistic, +/obj/item/clothing/accessory/armor/legguards/ballistic{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/clothing/accessory/armor/legguards/ballistic{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/clothing/accessory/armor/armguards/ballistic, +/obj/item/clothing/accessory/armor/armguards/ballistic, +/obj/item/clothing/accessory/armor/armguards/ballistic{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/item/clothing/accessory/armor/armguards/ballistic{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet/ballistic{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet/ballistic{ + pixel_x = -5; + pixel_y = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"fr" = ( +/obj/structure/table/rack/shelf, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"fs" = ( +/obj/structure/bed/chair/bay/comfy/teal, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"ft" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"fu" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"fx" = ( +/obj/spawner/corpse/syndicatecommando, +/obj/item/card/id/security/officer, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"fy" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 4; + name = "Class-P Upper Medical Checkpoint" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"fz" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-II Subject Three"; + info = "Designated 'Three' by the Research Director Ikanto. Developed sapience after one of the science personnel got careless and was consumed by a Class-I Roanoke Colony. Shows exceptional intelligence, however is highly territorial. Experimentation to begin on Sunday." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"fA" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/flamp/noshade, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"fB" = ( +/obj/effect/floormimic/plating/guaranteed, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"fC" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"fD" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"fG" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"fH" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/crate/robotics, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"fK" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/porta_turret, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"fM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"fP" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"fQ" = ( +/obj/structure/table/borosilicate, +/obj/item/folder/white_rd, +/obj/item/paper_bin{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/pen/fountain, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"fR" = ( +/obj/structure/table/rack/shelf, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/storage/toolbox/electrical{ + pixel_y = -4 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"fT" = ( +/obj/spawner/corpse/clown, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"fU" = ( +/obj/machinery/seed_storage/xenobotany, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"ga" = ( +/obj/structure/lift/panel{ + name = "High Security Elevator Control Panel"; + desc = "This elevator control panel seems to have been deliberately stabbed multiple times by some sort of long, dense blade. Seems you'll have to take the stairs all the way up..." + }, +/turf/simulated/shuttle/wall/voidcraft, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"gb" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/gun/ballistic/shotgun/pump/combat, +/obj/item/gun/ballistic/shotgun/pump/combat{ + pixel_y = 7 + }, +/obj/item/gun/ballistic/shotgun/pump/combat/warden, +/obj/item/gun/ballistic/shotgun/pump/JSDF, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"gc" = ( +/obj/structure/closet{ + name = "Evidence Closet" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"gd" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sec_entrance_hallway) +"gf" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"gh" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"gk" = ( +/obj/structure/sign/signnew/canisters, +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_entry_hallway) +"gm" = ( +/obj/structure/atmospheric_retention_field, +/obj/machinery/door/airlock/glass_external{ + req_one_access = list(39); + name = "Virology Containment Cell" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"gn" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/gun/energy/gun/combat, +/obj/item/gun/energy/gun/combat, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"go" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/med_checkpoint_lower) +"gp" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/computer/med_data/laptop{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_lobby) +"gq" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/structure/table/woodentable, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"gs" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"gt" = ( +/obj/machinery/mining/brace, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain_plains) +"gu" = ( +/obj/spawner/window/low_wall/reinforced/full, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_bar_public) +"gv" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"gw" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/item/stool/padded, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_bar_public) +"gE" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"gH" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/shield/riot/tower/swat{ + pixel_x = 4 + }, +/obj/item/shield/riot/tower/swat{ + pixel_x = -4 + }, +/obj/item/shield/riot/tower/swat, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"gJ" = ( +/obj/structure/closet/crate/corporate/grayson, +/obj/structure/table/rack/shelf, +/obj/machinery/air_alarm/alarms_hidden/north_mount, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"gK" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"gP" = ( +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"gS" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"gU" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"gW" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small/flicker, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"gX" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"gY" = ( +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain_plains) +"gZ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"ha" = ( +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"hb" = ( +/obj/spawner/corpse/scientist, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"hd" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"he" = ( +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain) +"hf" = ( +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"hh" = ( +/obj/structure/table/borosilicate, +/obj/machinery/computer/skills{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/machinery/computer/med_data/laptop{ + pixel_x = 8 + }, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"hi" = ( +/obj/machinery/vending/security{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_equipment_storage) +"hj" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"hk" = ( +/obj/item/card/id/centcom/ERT{ + name = "Research Director's ID Card"; + registered_name = "Ikanto H"; + desc = "A dull looking ID Card, ordained with multiple research symbols. It's partly covered in squirming flesh." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"hl" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"hp" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"hq" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Opeations Center Checkpoint"; + req_one_access = list(38,63) + }, +/obj/machinery/door/firedoor/glass{ + dir = 4; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"ht" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_bar_public) +"hu" = ( +/obj/machinery/light, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"hv" = ( +/obj/structure/sign/signnew/biohazard, +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"hx" = ( +/turf/simulated/shuttle/wall/voidcraft, +/area/admin_planet/croatoan/high_sec_science_entrance) +"hy" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"hz" = ( +/obj/machinery/computer/rdconsole/robotics{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"hA" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/melee/baton/cattleprod, +/obj/item/melee/baton/cattleprod, +/obj/item/melee/baton/cattleprod, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"hB" = ( +/obj/structure/railing, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"hD" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"hE" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/folder/blue, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"hF" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"hG" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"hH" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"hI" = ( +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"hJ" = ( +/obj/structure/fake_stairs/north/top{ + _stair_tag = 8; + dir = 2 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"hK" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"hL" = ( +/obj/machinery/shower{ + pixel_y = 18 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"hM" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"hN" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"hO" = ( +/turf/simulated/floor/cult, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"hR" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/item/stool/padded, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"hS" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"hU" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"hV" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"hW" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"hX" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_lobby) +"hY" = ( +/obj/effect/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"hZ" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ic" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"id" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"ie" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"if" = ( +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Welcome to Extreme Security"; + info = "Hi! Welcome to Extreme Security. Wearing a anomaly suit is mandatory, unless you're a security contractor. Then you get a hardsuit. There's quite a lot of automated security devices like turrets and combat drones, so keep your ID visible at all times! If a alert sounds, calmly exit the area and wait for security to resolve it. Good luck!" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ig" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"ih" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/forcefield/cult, +/turf/simulated/floor/cult, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ii" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/mime, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"ij" = ( +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"ik" = ( +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"im" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"in" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv{ + pixel_x = -8; + pixel_y = -6 + }, +/obj/item/storage/firstaid, +/obj/item/storage/firstaid/fire{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/storage/firstaid/o2{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/storage/firstaid/toxin{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/light/flicker, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"io" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"iq" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"is" = ( +/obj/structure/table/standard, +/obj/item/storage/box/bodybags, +/obj/item/clothing/under/rank/medical/scrubs/black, +/obj/item/clothing/under/rank/medical/scrubs_fem/black, +/obj/item/clothing/head/surgery/black, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/item/paper{ + info = "Note: Finish up autopsies on the last of the Roanoke Specimens before Sunday."; + name = "Reminder" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"ix" = ( +/obj/structure/morgue{ + dir = 1 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"iy" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"iA" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"iB" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"iD" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"iG" = ( +/obj/machinery/door/airlock/engineering{ + name = "Canister Storage"; + req_one_access = list(11,24,47) + }, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"iI" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"iJ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"iK" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/smartfridge/drinks, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"iL" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Paracasual Artifacts"; + info = "Artifacts recovered off of a person wielding some sort of paracasual abilities, nothing we've ever seen before. They took down quite a lot of men before a Blackstar contractor team finally put them down. The artifacts react harshly to physical contact, so ensure your suits are properly secured before stepping into the chamber. Oddly, this doesn't seem to be of Hemoturgy or Clockwork. Further investigation required." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"iM" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"iO" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"iQ" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"iR" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/roller, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/roller{ + pixel_y = 16 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"iS" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/spawner/window/reinforced/full, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"iV" = ( +/turf/simulated/mineral/icerock/airmix, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"iX" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"iY" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"iZ" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"ja" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"jb" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"jc" = ( +/obj/effect/floor_decal/corner/blue/diagonal, +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"je" = ( +/obj/structure/closet/l3closet/scientist, +/obj/machinery/light, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"jg" = ( +/obj/structure/table/borosilicate, +/obj/machinery/photocopier/faxmachine{ + department = "CMO's Office" + }, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"jj" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/atmospherics/component/unary/outlet_injector, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"jm" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"jn" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"jp" = ( +/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable, +/obj/item/card/id/medical/chemist{ + registered_name = "Jackson Chance" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"jq" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"js" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"jt" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/effect/floor_decal/corner_oldtile/purple/diagonal, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_bar_public) +"ju" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/eastright{ + dir = 8; + name = "Medbay Lobby"; + req_one_access = list(5) + }, +/obj/item/paper{ + name = "Increase In Injuries"; + info = "We keep needing to order more shipments of medical supplies and it's hurting our budget. The scientists get themselves injured in weird ways, we're going through spaceacillin syringes like fucking candy. About tired of this shit." + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_lobby) +"jv" = ( +/obj/structure/sign/warning/secure_area, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/med_checkpoint_lower) +"jx" = ( +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"jy" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"jz" = ( +/obj/structure/filingcabinet, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"jC" = ( +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"jD" = ( +/obj/structure/bed/chair/office/dark, +/obj/spawner/corpse/solarpeacekeeper, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"jH" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/folder/yellow, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"jI" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"jJ" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"jL" = ( +/obj/structure/flora/rock/ice, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"jM" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/spawner/corpse/solarpeacekeeper, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"jN" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"jR" = ( +/obj/structure/window/phoronreinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"jT" = ( +/obj/machinery/door/airlock/glass/research{ + name = "Anomaly Lab" + }, +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"jW" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"jX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"jZ" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 8 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"ka" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kb" = ( +/obj/structure/fake_stairs/north/top{ + _stair_tag = 7; + dir = 2 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"kc" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/med_data/laptop{ + dir = 4; + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"kd" = ( +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"ke" = ( +/obj/machinery/door/firedoor/glass{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"kh" = ( +/obj/machinery/door/window/brigdoor/eastright{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"kj" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kk" = ( +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"km" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Cell Not Finished."; + info = "Cell's not finished, Research Director Ikanto wants it to be suitable for a 'Class-III Roanoke Specimen.' So we gotta go balls to the wall on reinforcing this thing. Don't forget the BZ canisters.'" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kn" = ( +/obj/structure/railing, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"ko" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"kp" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Operations Center"; + req_one_access = list(38,63) + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + name = "Security Operations Lockdown"; + id = 74 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sec_entrance_hallway) +"kq" = ( +/obj/machinery/sleep_console, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/med_treatment) +"kr" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/under/technomancer, +/obj/item/clothing/head/technomancer, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kt" = ( +/obj/machinery/light, +/turf/simulated/floor/greengrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kv" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_armory) +"kw" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_entrance_hallway) +"kx" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/under/bodysuit/bodysuithazard, +/obj/item/clothing/under/bodysuit/bodysuithazard, +/obj/item/clothing/under/bodysuit/bodysuithazard, +/obj/item/clothing/under/bodysuit/bodysuithazard, +/obj/item/clothing/under/bodysuit/bodysuithazard, +/obj/item/clothing/under/bodysuit/bodysuithazard, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"kB" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/helmet/space/void/medical/bio, +/obj/item/clothing/suit/bio_suit, +/obj/item/clothing/head/helmet/space/void/medical/bio, +/obj/item/clothing/suit/bio_suit, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"kD" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"kE" = ( +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"kH" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"kI" = ( +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/outdoors/dirt/classp, +/area/admin_planet/croatoan/med_checkpoint_lower) +"kK" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"kM" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"kN" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kP" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kQ" = ( +/obj/structure/closet/l3closet/janitor, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"kR" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"kT" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"kU" = ( +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"kW" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/helmet/space/anomaly, +/obj/item/clothing/head/helmet/space/anomaly, +/obj/item/clothing/head/helmet/space/anomaly, +/obj/item/clothing/suit/space/anomaly, +/obj/item/clothing/suit/space/anomaly, +/obj/item/clothing/suit/space/anomaly, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"kY" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"kZ" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/folder/red, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"la" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"lc" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"ld" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"le" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/gun/energy/combat, +/obj/item/gun/energy/combat, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"lg" = ( +/turf/simulated/mineral/icerock/lythios43c, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"lh" = ( +/obj/machinery/door/airlock/glass/research{ + name = "RnD Lab"; + req_one_access = list(7) + }, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"lm" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"ln" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "WARNING!"; + info = "WARNING! 'Living' creatures in this containment cell! We sent a contractor team down to 'Surt', connected via telepad to the NSB Atlas/Triumph. They acquired three specimens, all of differing make and ability. One has the ability to cloak so we've installed extra lights into the cell as well as a suitable environment for them to interact with. If they start banging on the windows, back off and alert a security provider." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"lo" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"lp" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"lt" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"lu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"lv" = ( +/obj/structure/closet/l3closet/scientist, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"lw" = ( +/obj/structure/closet/crate/corporate/nanotrasen, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"lx" = ( +/obj/machinery/light, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"lz" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/glasses/sunglasses/sechud{ + pixel_y = 4 + }, +/obj/item/clothing/glasses/sunglasses/sechud, +/obj/item/clothing/glasses/sunglasses/sechud, +/obj/item/clothing/glasses/sunglasses/sechud, +/obj/item/clothing/glasses/sunglasses/sechud, +/obj/item/clothing/glasses/sunglasses/sechud{ + pixel_y = 4 + }, +/obj/item/clothing/glasses/sunglasses/sechud{ + pixel_y = 4 + }, +/obj/item/clothing/glasses/sunglasses/sechud{ + pixel_y = 4 + }, +/obj/machinery/air_alarm/alarms_hidden/east_mount, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"lA" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"lF" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"lG" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/effect/floor_decal/sign/m, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/med_checkpoint_lower) +"lH" = ( +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"lI" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/med_treatment) +"lJ" = ( +/obj/structure/closet/crate/mimic/guaranteed, +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"lK" = ( +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"lL" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"lM" = ( +/obj/spawner/corpse/syndicatecommando, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"lN" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_rnd_lab) +"lO" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/clown, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"lQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"lS" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_circuitry_lab) +"lT" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/melee/baton/slime/robot, +/obj/item/melee/baton/slime/loaded, +/obj/item/melee/baton/slime, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"lV" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/marble, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"lW" = ( +/turf/simulated/mineral/icerock, +/area/admin_planet/croatoan/mountain) +"lX" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"lY" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"lZ" = ( +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + dir = 4 + }, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/corner/lightorange/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"ma" = ( +/obj/structure/railing/grey{ + dir = 3 + }, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/civ_bar_public) +"me" = ( +/obj/structure/table/borosilicate, +/obj/item/storage/fancy/vials, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"mg" = ( +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"mh" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"mk" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_treatment) +"ml" = ( +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/mountain_plains) +"mm" = ( +/obj/structure/fake_stairs/east/top{ + _stair_tag = 4 + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"mn" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"mq" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"mt" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/effect/floor_decal/industrial/loading, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"mw" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 1 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"mz" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"mA" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"mC" = ( +/obj/machinery/computer/diseasesplicer, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"mD" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"mH" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"mJ" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/spawner/corpse/doctor, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_lobby) +"mK" = ( +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"mL" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"mN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"mP" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"mR" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"mS" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/gunbox/armor/security, +/obj/item/gunbox/armor/security{ + pixel_y = 8 + }, +/obj/item/gunbox/armor/security, +/obj/item/gunbox/armor/security{ + pixel_y = 8 + }, +/obj/item/gunbox/armor/security, +/obj/item/cell/device/weapon, +/obj/item/cell/device/weapon{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/cell/device/weapon{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/cell/device/weapon{ + pixel_x = -8; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = 4; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = -8 + }, +/obj/item/cell/device/weapon{ + pixel_x = -4 + }, +/obj/item/cell/device/weapon{ + pixel_x = 4 + }, +/obj/item/cell/device/weapon{ + pixel_x = 8 + }, +/obj/item/cell/device/weapon, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"mU" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"mV" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"mW" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"mY" = ( +/obj/structure/railing, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"na" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"nb" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"nc" = ( +/obj/effect/shuttle_landmark/automatic{ + name = "Hammer-Head Landing Pad" + }, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"ne" = ( +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"ni" = ( +/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"nj" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"nk" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"nm" = ( +/obj/spawner/corpse/scientist, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"nn" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"nq" = ( +/obj/structure/table/reinforced, +/obj/item/card/id/science/roboticist{ + registered_name = "Jackson Hines" + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"nr" = ( +/obj/spawner/corpse/engineer/rig, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"nt" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/railing, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"nu" = ( +/obj/structure/salvageable/server_os, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"nv" = ( +/obj/machinery/camera/east_mount, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/mountain_plains) +"nw" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"nx" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 6 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ny" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"nz" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"nA" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"nC" = ( +/obj/structure/barricade, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/mountain_plains) +"nF" = ( +/obj/machinery/door/airlock/vault{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Science Entrance" + }, +/obj/machinery/door/blast/puzzle{ + desc = "A completely inpenetrable blast door which is covered in an absurb amount of armor. Warning labels cover it consisting of a number of hazards, it seems to be controlled by a button somewhere."; + name = "High Security Science Lockdown"; + id = 100 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/fans/tiny, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"nG" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"nI" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/beakers, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"nJ" = ( +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"nK" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"nN" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/vending/blood, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"nP" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_rnd_lab) +"nQ" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"nR" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/multi_tile/glass{ + req_access = list(47); + req_one_access = list(47); + name = "R&D Hallway" + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"nS" = ( +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"nT" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing" + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"nU" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_armory) +"nV" = ( +/obj/machinery/power/apc/alarms_hidden/no_cell/east_mount{ + desc = "This APC seems to have had its power-cell torn out for some reason. It looks like it could operate the nearby machinery with a new cell." + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/med_checkpoint_lower) +"nW" = ( +/obj/effect/floor_decal/corner/lightorange/border, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 8 + }, +/obj/machinery/chem_master, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"nX" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/tablet/preset/custom_loadout/standard/security, +/obj/item/modular_computer/tablet/preset/custom_loadout/standard/security, +/obj/item/modular_computer/tablet/preset/custom_loadout/standard/security, +/obj/item/modular_computer/tablet/preset/custom_loadout/standard/security, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"nY" = ( +/obj/machinery/shower{ + dir = 8; + pixel_x = -2 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"nZ" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"oa" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"ob" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"oe" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"of" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/pen, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"ol" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/technomancer_catalog, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"oo" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"op" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/blood/OMinus, +/obj/item/reagent_containers/blood/OMinus, +/obj/item/reagent_containers/blood/OMinus, +/obj/item/reagent_containers/blood/OMinus, +/obj/machinery/door/window/eastright{ + dir = 2; + name = "Treatment Storage" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"oq" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/o2{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"or" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"os" = ( +/obj/structure/window/phoronreinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-I Subject-A"; + info = "Subject-A, Class-I Roanoke Colony. Environment encouraged them to take on the appeareance of a floor tile. Behaviour research ongoing." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"ot" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"ox" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"oy" = ( +/obj/machinery/light/flamp, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"oB" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/marble, +/obj/machinery/appliance/mixer/cereal, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"oC" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"oD" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/table/borosilicate, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"oE" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/syringes, +/obj/item/card/id/science{ + registered_name = "Haley Tiano" + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"oH" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"oI" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_armory) +"oK" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/spawner/corpse/doctor, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"oL" = ( +/obj/effect/debris/cleanable/blood/oil/streak, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"oM" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"oN" = ( +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"oO" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"oP" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"oQ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"oR" = ( +/obj/structure/closet/crate/corporate/nanomed, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/rack/shelf, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"oS" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"oU" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"oX" = ( +/obj/machinery/artifact_scanpad, +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"oY" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"oZ" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"pa" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"pc" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_hos_office) +"pd" = ( +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"pe" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"pf" = ( +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"ph" = ( +/obj/structure/atmospheric_retention_field, +/obj/machinery/door/airlock/external{ + req_one_access = list(39); + name = "Virology" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"pj" = ( +/obj/item/clothing/shoes/black, +/obj/item/bone/ribs, +/turf/simulated/floor/flesh, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"pl" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"po" = ( +/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/structure/cable, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"pp" = ( +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"pq" = ( +/obj/machinery/computer/secure_data{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"pv" = ( +/obj/structure/window/phoronreinforced, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"pw" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"px" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"pA" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"pB" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/light, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"pE" = ( +/obj/machinery/door/window/brigdoor/southleft{ + req_access = list(2); + name = "Holding Cells"; + dir = 8 + }, +/obj/machinery/door_timer/cell_3{ + id = "Cell A"; + name = "Cell 1"; + pixel_y = -32 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"pF" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"pG" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"pH" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"pJ" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"pL" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/gun/energy/gun/fluff/dominator, +/obj/item/gun/energy/gun/fluff/dominator, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"pM" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"pN" = ( +/obj/effect/floor_decal/corner/lime/border, +/obj/spawner/corpse/chef, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"pP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/atmospherics/valve{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"pS" = ( +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"pT" = ( +/obj/structure/fake_stairs/north/bottom{ + _stair_tag = 12 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"pW" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"qb" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"qc" = ( +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"qe" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/accessory/armor/armorplate/heavy, +/obj/item/clothing/accessory/armor/armorplate/heavy, +/obj/item/clothing/accessory/armor/armorplate/heavy{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/heavy{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/heavy{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/heavy{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/ballistic, +/obj/item/clothing/accessory/armor/armorplate/ballistic, +/obj/item/clothing/accessory/armor/armorplate/ballistic{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate/ballistic{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate/ballistic{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate/ballistic{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate/tactical, +/obj/item/clothing/accessory/armor/armorplate/tactical, +/obj/item/clothing/accessory/armor/armorplate/tactical{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/tactical{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/tactical{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/tactical{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/combat{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate/combat{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate/combat, +/obj/item/clothing/accessory/armor/armorplate/combat, +/obj/item/clothing/accessory/armor/armorplate/combat{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate/combat{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"qf" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/loading, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"qg" = ( +/obj/machinery/disease2/diseaseanalyser, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"qh" = ( +/obj/machinery/atmospherics/component/unary/outlet_injector{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"qi" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"qj" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"qk" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ql" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/bio_hood/security, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/head/bio_hood/security, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"qo" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/item/paper{ + name = "Updated Security Systems"; + info = "Ever since the shit happened with the Carpenter, we've been getting a lot of upgraded security devices. New turrets, state of the art combat drones. You name it? We might have it at this point. I don't trust all the tech." + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"qp" = ( +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civilian/dorms) +"qq" = ( +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/machinery/air_alarm/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"qt" = ( +/obj/effect/debris/cleanable/blood/splatter, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"qu" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/donator_teak, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"qw" = ( +/obj/random/obstruction, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"qx" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"qy" = ( +/obj/machinery/portable_atmospherics/canister/empty/nitrous_oxide, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"qD" = ( +/obj/machinery/computer/security{ + dir = 1 + }, +/obj/machinery/light{ + light_range = 12 + }, +/obj/machinery/air_alarm/alarms_hidden/south_mount, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"qE" = ( +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"qF" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"qJ" = ( +/obj/machinery/disease2/isolator, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"qK" = ( +/obj/structure/table/borosilicate, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/northright{ + name = "High Security Science Wing Security Checkpoint"; + req_one_access = list(1); + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"qO" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"qR" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"qS" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"qT" = ( +/obj/machinery/smartfridge/secure/virology, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"qW" = ( +/obj/machinery/door/airlock/glass/security{ + req_one_access = list(19); + name = "High Security Science Wing Security Checkpoint-1" + }, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"qZ" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"ra" = ( +/obj/machinery/bodyscanner, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/med_treatment) +"rb" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_checkpoint_upper) +"rc" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/structure/mirror/long/left{ + dir = 8; + pixel_x = -28 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"rg" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"ri" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"rj" = ( +/obj/item/pickaxe, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"rm" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"rn" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/machinery/power/rtg/fake_gen, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"ro" = ( +/obj/machinery/computer/station_alert/security{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"rt" = ( +/obj/structure/closet, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"rv" = ( +/obj/structure/sign/botany, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_hydro) +"rw" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"rz" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"rB" = ( +/obj/structure/fake_stairs/north/top{ + _stair_tag = 6 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"rC" = ( +/obj/machinery/door/airlock/multi_tile/glass/medical{ + dir = 4; + name = "Class-P Science Checkpoint"; + req_access = list(47); + req_one_access = list(47) + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"rE" = ( +/obj/machinery/holoposter, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_kitchen) +"rF" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/sec_armory) +"rG" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Opeations Center Checkpoint"; + req_one_access = list(38,63) + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"rH" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"rI" = ( +/obj/effect/floor_decal/industrial/halfstair{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"rJ" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_main_hallway) +"rK" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"rL" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"rM" = ( +/obj/structure/sign/nanotrasen, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/civ_checkpoint) +"rN" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_entrance) +"rO" = ( +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"rP" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"rR" = ( +/obj/structure/table/borosilicate, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun{ + pixel_x = 5 + }, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun, +/obj/item/clothing/accessory/permit/gun{ + pixel_x = 5 + }, +/obj/item/clothing/accessory/permit/gun{ + pixel_x = 5 + }, +/obj/item/clothing/accessory/permit/gun{ + pixel_x = 5 + }, +/obj/item/paper{ + desc = ""; + info = "In the event that more weapon permits are needed, please fax Central Command to request more. Please also include a reason for the request. Blank permits will be shipped to cargo for pickup. If long-term permits are desired, please contact your Nanotrasen Employee Representitive for more information."; + name = "note from CentCom about permits"; + pixel_x = -4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"rS" = ( +/obj/machinery/computer/crew{ + dir = 8; + pixel_x = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"rT" = ( +/obj/structure/salvageable/console_os{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"rW" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"rX" = ( +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"rZ" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 10 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"sa" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"sb" = ( +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"sc" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"sf" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/structure/table/hardwoodtable, +/obj/item/paper{ + name = "Supplies"; + info = "Our supply shipments keep getting brought in late, had to start fashioning new cups out of wood and ice chunks I've found laying around. Turns out, ice doesn't make for good materials and I got told off for giving a doctor a splinter in the tongue. Maybe they should give me my proper gear instead?" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"sg" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"sh" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"si" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"sk" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"sl" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"sn" = ( +/obj/structure/fake_stairs/east/top{ + _stair_tag = 3 + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"so" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"sq" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_storage) +"st" = ( +/obj/machinery/door/airlock{ + id_tag = "dorm1"; + name = "Dormitory Lobby" + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"su" = ( +/obj/structure/sign/signnew/canisters, +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/admin_planet/croatoan/sci_canister_storage) +"sx" = ( +/obj/effect/floor_decal/borderfloorblack, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"sy" = ( +/obj/machinery/door/airlock/vault{ + name = "Security Canister Storage"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"sz" = ( +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"sA" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"sB" = ( +/obj/spawner/corpse/solarpeacekeeper, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"sE" = ( +/obj/structure/sign/signnew/danger, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"sF" = ( +/obj/structure/fake_stairs/north/bottom{ + _stair_tag = 10 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"sG" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/purple, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"sJ" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/light, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"sL" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"sN" = ( +/obj/structure/table/reinforced, +/obj/item/storage/hypokit, +/obj/item/storage/hypokit{ + pixel_x = -8; + pixel_y = -8 + }, +/obj/item/storage/hypokit{ + pixel_x = -8 + }, +/obj/item/storage/hypokit{ + pixel_x = -8; + pixel_y = 8 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"sQ" = ( +/obj/structure/table/darkglass, +/obj/machinery/computer/security{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"sR" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/armor/pcarrier/riot, +/obj/item/clothing/suit/armor/pcarrier/riot{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/riot{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/clothing/accessory/armor/legguards/riot{ + pixel_x = 5; + pixel_y = -7 + }, +/obj/item/clothing/accessory/armor/legguards/riot, +/obj/item/clothing/accessory/armor/legguards/riot, +/obj/item/clothing/accessory/armor/legguards/riot{ + pixel_x = 5; + pixel_y = -7 + }, +/obj/item/clothing/suit/armor/pcarrier/riot, +/obj/item/clothing/accessory/armor/armguards/riot, +/obj/item/clothing/accessory/armor/armguards/riot, +/obj/item/clothing/accessory/armor/armguards/riot{ + pixel_x = -4; + pixel_y = -7 + }, +/obj/item/clothing/accessory/armor/armguards/riot{ + pixel_x = -4; + pixel_y = -7 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"sS" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded{ + pixel_y = -6 + }, +/obj/item/melee/baton/loaded{ + pixel_y = -2 + }, +/obj/item/melee/baton/loaded{ + pixel_y = 2 + }, +/obj/item/melee/baton/loaded{ + pixel_y = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"sU" = ( +/obj/structure/table/reinforced, +/obj/item/roller, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/roller{ + pixel_y = 16 + }, +/obj/structure/window/reinforced, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"sV" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"sX" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"sY" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"sZ" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"ta" = ( +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/rtg/fake_gen, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"tf" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"tg" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"th" = ( +/obj/structure/closet/secure_closet/medical3, +/obj/machinery/light/flicker, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"ti" = ( +/obj/structure/table/borosilicate, +/obj/item/ammo_magazine/s357, +/obj/item/ammo_magazine/s357, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"tn" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/paper{ + info = "Hid a old medical access card in the east most excavation dril. It's slotted into the panel on the left, tap it a few times and a compartment should open up and spit it out. Just incase we need emergency medical access, don't tell anyone else about this. -A"; + name = "Cache" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"to" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"tp" = ( +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"tr" = ( +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_bar_public) +"tu" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"tv" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"tw" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/camera/west_mount, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"ty" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"tz" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"tB" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"tD" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"tE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"tF" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/eastright{ + name = "Gear Storage" + }, +/obj/item/storage/firstaid, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/surgery, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"tG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"tH" = ( +/obj/spawner/window/reinforced/full, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"tI" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/cell/device/weapon, +/obj/item/cell/device/weapon{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/cell/device/weapon{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/cell/device/weapon{ + pixel_x = -8; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = 4; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/item/cell/device/weapon{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/cell/device/weapon{ + pixel_x = -8 + }, +/obj/item/cell/device/weapon{ + pixel_x = -4 + }, +/obj/item/cell/device/weapon{ + pixel_x = 4 + }, +/obj/item/cell/device/weapon{ + pixel_x = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"tJ" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"tK" = ( +/obj/structure/statue/gold/hos, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"tL" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"tM" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/machinery/camera/east_mount, +/turf/simulated/floor/outdoors/dirt/classp, +/area/admin_planet/croatoan/med_checkpoint_lower) +"tN" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"tO" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"tP" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_kitchen) +"tQ" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"tS" = ( +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/rtg/fake_gen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"tU" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"tW" = ( +/obj/machinery/portable_atmospherics/canister{ + name = "BZ Canister"; + desc = "An odd canister covered in a variety of warning symbols. Its label details the hazardous gas contained within as 'BZ.'" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"tX" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Entrance" + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"tY" = ( +/obj/structure/closet/secure_closet/medical3, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"ua" = ( +/obj/structure/closet/secure_closet/genpop, +/obj/item/clothing/under/color/prison, +/obj/item/clothing/shoes/flats/orange, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"ub" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"ug" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 4 + }, +/obj/structure/closet/secure_closet/chemical, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"uj" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(39); + name = "Virology Lab" + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"uk" = ( +/obj/effect/shuttle_landmark/automatic{ + docking_controller = "frozen"; + name = "Civilian Shuttle Landing Pad" + }, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"um" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_equipment_storage) +"un" = ( +/obj/structure/table/reinforced, +/obj/item/electronic_assembly/large/default, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"uq" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"ur" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_chemistry) +"ut" = ( +/obj/machinery/camera/west_mount, +/turf/simulated/floor/outdoors/dirt/classp, +/area/admin_planet/croatoan/mountain_plains) +"uu" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/eastright{ + dir = 1; + name = "Treatment Storage"; + req_one_access = list(33) + }, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"uv" = ( +/obj/structure/closet, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"ux" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"uy" = ( +/obj/structure/table/reinforced, +/obj/item/hypospray, +/obj/item/reagent_containers/glass/hypovial, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"uA" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"uC" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"uD" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"uG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"uH" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"uJ" = ( +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"uK" = ( +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"uL" = ( +/obj/machinery/button/remote/blast_door{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Science Entrance Lockdown"; + id = 99 + }, +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_armory) +"uM" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"uN" = ( +/obj/machinery/camera/north_mount, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"uP" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"uQ" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/civ_bar_public) +"uR" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/storage/box/survival_knife, +/obj/item/storage/box/survival_knife{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/storage/box/survival_knife{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/storage/box/survival_knife{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/survival_knife{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"uS" = ( +/obj/machinery/suspension_gen, +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"uT" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"uV" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"uZ" = ( +/obj/structure/fake_stairs/east/top{ + _stair_tag = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"va" = ( +/obj/machinery/door/airlock/glass/research{ + name = "Robotics Lab"; + req_access = list(29,47) + }, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"vc" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/backed_grey, +/obj/effect/floor_decal/corner/beige{ + dir = 4 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"vd" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"vf" = ( +/obj/structure/table/borosilicate, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/item/gun/ballistic/revolver/mateba{ + name = "Last Hope"; + desc = "A highly ordained Mateba which seems to have seen quite a lot of action. Engravings cover the length of the revolver, telling tales of uncountable holders and endless glory." + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"vh" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"vj" = ( +/obj/structure/window/phoronreinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-I Subject-E"; + info = "Subject E, Class-I Roanoke Colony. Behaviour studies ongoing, appears to be acting erratically for an unknown reason. Tests to be put on hold." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"vk" = ( +/obj/structure/bed/chair/bay/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"vm" = ( +/obj/structure/table/borosilicate, +/obj/structure/filingcabinet/chestdrawer{ + name = "Medical Forms" + }, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"vn" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"vo" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"vp" = ( +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/mountain_plains) +"vq" = ( +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"vr" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"vt" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"vv" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_entry_hallway) +"vw" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"vy" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"vB" = ( +/obj/machinery/botany/editor, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"vC" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"vF" = ( +/obj/structure/fake_stairs/east/top{ + _stair_tag = 5 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"vG" = ( +/obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"vH" = ( +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/bone, +/turf/simulated/floor/flesh, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"vI" = ( +/obj/machinery/door/window/brigdoor/southleft{ + dir = 4; + req_access = list(2); + name = "Holding Cells" + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"vM" = ( +/obj/structure/table/borosilicate, +/obj/item/folder/white_rd, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen/fountain, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/obj/item/tape_recorder{ + name = "Recorder Device"; + desc = "A small recording device. When turned on, it plays a short message. 'We know you're following us.Don't worry,we'll be sure what happened to Director Ikanto happens to you as well.' It ends abruptly." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"vQ" = ( +/obj/machinery/door/window/brigdoor/northright{ + name = "High Security Science Wing Security Checkpoint"; + req_one_access = list(1); + dir = 4 + }, +/obj/structure/table/borosilicate, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"vR" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"vV" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/lime/bordercorner, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"vW" = ( +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"vX" = ( +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"vY" = ( +/obj/structure/sign/department/bar, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_bar_public) +"wb" = ( +/obj/machinery/power/rtg/fake_gen, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"wd" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"we" = ( +/obj/machinery/door/airlock/glass/research{ + name = "Circuitry Workshop"; + req_access = list(7); + req_one_access = list(7) + }, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"wi" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/paper{ + name = "Holding Cells?"; + info = "Why do we need holding cells, exactly? These barely ever get used except when one of the clowns starts acting up." + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"wj" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"wl" = ( +/obj/structure/closet, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"wm" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"wo" = ( +/obj/structure/fake_stairs/north/bottom{ + _stair_tag = 8; + dir = 2 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"wp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"wq" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"wr" = ( +/obj/effect/floor_decal/industrial/halfstair, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/outdoors/beach/sand/dirt/classd, +/area/admin_planet/croatoan/civ_bar_public) +"ws" = ( +/obj/structure/filingcabinet, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"wv" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"ww" = ( +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"wx" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"wy" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"wz" = ( +/obj/structure/bed/chair, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"wA" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"wC" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"wE" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/brown, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"wG" = ( +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"wH" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"wJ" = ( +/obj/machinery/camera/west_mount, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"wL" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"wN" = ( +/obj/spawner/window/low_wall/borosillicate/reinforced/full/firelocks, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"wO" = ( +/obj/machinery/camera/auto_mount, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/civ_checkpoint) +"wP" = ( +/obj/machinery/door/window/brigdoor{ + desc = "Security Canister Storage"; + req_access = list(101); + req_one_access = list(103) + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"wQ" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/cult, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"wR" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"wS" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"wT" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/loading, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"wV" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"wW" = ( +/obj/machinery/light/flicker, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"xb" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"xe" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"xf" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROS Cell-1"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"xg" = ( +/obj/structure/table/reinforced, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/fans/tiny, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"xh" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 1 + }, +/obj/spawner/corpse/doctor, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"xj" = ( +/obj/structure/table/carbon, +/obj/item/paper_bin{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/folder/blue{ + pixel_x = -8; + pixel_y = 2 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"xk" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"xl" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/storage/firstaid/adv{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/storage/firstaid/o2{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/toxin{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"xm" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"xn" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"xp" = ( +/obj/structure/table/rack/shelf/steel, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 28 + }, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs{ + pixel_x = -8 + }, +/obj/item/storage/box/flashbangs, +/obj/item/storage/box/flashbangs{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/storage/box/flashbangs{ + pixel_y = 7 + }, +/obj/item/storage/box/teargas, +/obj/item/storage/box/teargas{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/teargas{ + pixel_y = 7 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"xq" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"xs" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"xu" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell B" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"xv" = ( +/obj/machinery/power/rtg/fake_gen, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"xw" = ( +/obj/structure/fans/tiny, +/obj/effect/floor_decal/corner/lightorange/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"xx" = ( +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"xz" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"xA" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"xC" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"xD" = ( +/turf/simulated/mineral/icerock/airmix, +/area/admin_planet/croatoan/landing_pad) +"xF" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/spawner/corpse/solarpeacekeeper, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"xI" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"xL" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/railing{ + dir = 1 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"xO" = ( +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"xR" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/gun/energy/lasershotgun, +/obj/item/gun/energy/lasershotgun, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"xU" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"xV" = ( +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"xW" = ( +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/machinery/light/flicker, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"xX" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"xZ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"yc" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"yd" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/vending/dinnerware, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"ye" = ( +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/admin_planet/croatoan/high_sec_science_entrance) +"yg" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"yh" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Science Entrance" + }, +/obj/machinery/door/blast/puzzle{ + desc = "A completely inpenetrable blast door which is covered in an absurb amount of armor. Warning labels cover it consisting of a number of hazards, it seems to be controlled by a button somewhere."; + name = "High Security Science Lockdown"; + id = 99 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/fans/tiny, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"yi" = ( +/obj/effect/floor_decal/industrial/loading, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"yj" = ( +/obj/structure/reagent_dispensers/virusfood, +/turf/simulated/floor/reinforced, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"yl" = ( +/obj/machinery/camera/south_mount, +/obj/effect/floor_decal/borderfloor, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"ym" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/armor/pcarrier/navy, +/obj/item/clothing/suit/armor/pcarrier/navy{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/clothing/suit/armor/pcarrier/navy{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/clothing/suit/armor/pcarrier/navy{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/clothing/suit/armor/pcarrier/navy{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/suit/armor/pcarrier, +/obj/item/clothing/suit/armor/pcarrier{ + pixel_x = 6; + pixel_y = -5 + }, +/obj/item/clothing/suit/armor/pcarrier{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/clothing/accessory/armor/armorplate/stab, +/obj/item/clothing/accessory/armor/armorplate/stab{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/stab{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/stab, +/obj/item/clothing/accessory/armor/armorplate/stab{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/stab{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/accessory/armor/armorplate/stab, +/obj/item/clothing/accessory/armor/armorplate/stab, +/obj/item/clothing/accessory/armor/armorplate, +/obj/item/clothing/accessory/armor/armorplate{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate, +/obj/item/clothing/accessory/armor/armorplate{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/clothing/accessory/armor/armorplate, +/obj/item/clothing/accessory/armor/armorplate, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 28 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"yn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"yo" = ( +/obj/machinery/button/remote/blast_door{ + id = 10 + }, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/med_checkpoint_lower) +"yr" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"ys" = ( +/obj/machinery/artifact_harvester, +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"yt" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"yu" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"yv" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/machinery/camera/east_mount, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/med_checkpoint_lower) +"yx" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_kitchen) +"yy" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"yA" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"yB" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/railing, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"yC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"yE" = ( +/obj/machinery/mecha_part_fabricator/pros{ + dir = 8; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"yF" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"yG" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"yH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/wood, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"yJ" = ( +/obj/structure/urinal, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civilian/dorms) +"yK" = ( +/obj/structure/closet/crate/mimic/closet/dangerous, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"yL" = ( +/obj/structure/bed/chair/modern_chair{ + dir = 8 + }, +/obj/spawner/corpse/syndicatecommando, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"yM" = ( +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"yN" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"yP" = ( +/obj/machinery/door/airlock/multi_tile/glass/civilian, +/obj/structure/fans/tiny, +/obj/effect/floor_decal/corner/lightorange/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"yQ" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"yS" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"yU" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"yV" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"yW" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"yY" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"yZ" = ( +/obj/effect/forcefield/cult, +/turf/simulated/floor/cult, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"zb" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"zc" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/head/radiation, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"zd" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"ze" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"zf" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"zg" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"zi" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"zk" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"zn" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"zp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + name = "Canister Storage"; + req_one_access = list(11,24,47) + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"zq" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"zr" = ( +/obj/item/paper{ + name = "Work Order: Urinals not working."; + info = "What it says on the tin. Fix the bathroom urinals because we all know there isn't enough toilets for all us and Corporal Redmann is tired of having to piss into the snow." + }, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"zs" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"zt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"zu" = ( +/obj/item/storage/backpack/satchel/fluff/swat43bag, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"zv" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"zw" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"zx" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/mountain) +"zA" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"zF" = ( +/obj/machinery/door/airlock/freezer{ + name = "Hydroponics"; + req_one_access = list(35,28) + }, +/obj/structure/fans/tiny, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/eris/dark, +/area/admin_planet/croatoan/civ_hydro) +"zG" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"zK" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"zM" = ( +/obj/structure/flora/rock, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"zN" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/red/border, +/obj/spawner/corpse/syndicatecommando, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"zO" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"zR" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"zS" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"zT" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"zU" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"zV" = ( +/obj/structure/fake_stairs/south/bottom{ + connections = 2; + _stair_tag = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"zX" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Aa" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Ab" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"Ad" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Ag" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/food/drinks/shaker, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Ah" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Aj" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"Ak" = ( +/obj/structure/table/reinforced, +/obj/item/paper{ + name = "Construction Efforts"; + info = "Research Director Ikanto needs more area for her work here, make sure the area is properly excavated according to holoprints to facilitate the expansion of the upper facilities. More specialists will arrive later in the week." + }, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/mountain_plains) +"Am" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"An" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"Ao" = ( +/mob/living/simple_mob/mechanical/mecha/combat/marauder{ + name = "B-ST3R"; + desc = "A heavily reinforced Marauder with multiple modifications. This one seems custom done and has 'RD Ikanto' labeled across its chestplate. This isn't going down easy." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Ap" = ( +/obj/structure/fake_stairs/east/bottom{ + _stair_tag = 3 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"Ar" = ( +/obj/structure/flora/rock/ice/alternative_1, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"At" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"Av" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/civ_checkpoint) +"Ax" = ( +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"AA" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"AB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"AC" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_main_hallway) +"AE" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"AF" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"AN" = ( +/obj/machinery/door_timer/cell_3{ + name = "Cell 4" + }, +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_holding_cells) +"AQ" = ( +/obj/structure/table/carbon, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/item/folder/blue{ + pixel_x = -8; + pixel_y = 2 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"AS" = ( +/turf/simulated/floor/outdoors/gravsnow, +/area/admin_planet/croatoan/landing_pad) +"AT" = ( +/obj/machinery/artifact_analyser, +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/item/paper{ + name = "Anomaly Notice:"; + info = "NOTICE: The more dangerous anomalies have been brought to to the Extreme Security wing of High Security Science. We're not having a 'flesh monster breaks through the blast doors' incident again." + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"AU" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/mountain) +"AV" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"AW" = ( +/obj/machinery/door/airlock/external{ + req_access = list(47); + req_one_access = list(47); + name = "Decontamination" + }, +/obj/structure/fans/tiny, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/virgo2, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"AX" = ( +/obj/structure/table/borosilicate, +/obj/machinery/button/remote/blast_door{ + id = 103; + name = "High Security Science Control Room Access" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"AZ" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/button/remote/blast_door{ + name = "Security Operations Center Lockdown"; + id = 74; + req_one_access = list(1) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Ba" = ( +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = 13 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Bb" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Bc" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"Be" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + alpha = 255 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Bf" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Bi" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"Bj" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"Bm" = ( +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"Bo" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Bp" = ( +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Bq" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"Bs" = ( +/turf/simulated/floor/flesh, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Bu" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"Bv" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Bw" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Bx" = ( +/obj/structure/table/rack/shelf, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/machinery/light, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"Bz" = ( +/obj/machinery/door/airlock/glass/security{ + id_tag = "detdoor"; + name = "Forensics Lab"; + req_access = list(4) + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"BA" = ( +/obj/structure/closet/secure_closet/CMO, +/obj/item/cmo_disk_holder, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"BB" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"BC" = ( +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/civ_bar_public) +"BF" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/storage/belt/medical/technomancer, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"BG" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"BH" = ( +/obj/structure/table/borosilicate, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security/hos, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"BI" = ( +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_kitchen) +"BJ" = ( +/obj/structure/table/borosilicate, +/obj/effect/floor_decal/corner/blue/diagonal, +/obj/item/paper{ + name = "Request from Director Ikanto"; + info = "Director Ikanto requested you start interviewing those infected with Roanoke for whatever reason. Take them into a private wound, do a medical checkup. It's weird, man. But it's whatever." + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"BL" = ( +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain_plains) +"BN" = ( +/obj/machinery/seed_extractor, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"BO" = ( +/obj/item/bone, +/turf/simulated/floor/flesh, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"BR" = ( +/obj/machinery/papershredder, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"BS" = ( +/obj/machinery/button/remote/blast_door{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Science Entrance Lockdown"; + id = 100 + }, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"BT" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"BU" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/civ_hydro) +"BW" = ( +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Cc" = ( +/obj/structure/closet/secure_closet/hos2, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Cd" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Cg" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Ch" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Ci" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Cj" = ( +/obj/machinery/vending/weeb, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Ck" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Cl" = ( +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Cp" = ( +/obj/machinery/portable_atmospherics/canister/chlorine, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"Cq" = ( +/obj/spawner/window/reinforced/full, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"Cr" = ( +/obj/machinery/door/airlock/glass/research{ + name = "Xenoflora Research"; + req_one_access = list(30,35,47,77) + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Cw" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Cx" = ( +/obj/structure/window/phoronreinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-I Subject-B"; + info = "Subject-B, Class-I Roanoke Colony. Environment created to encourage the colony to take the form of a airlock." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Cz" = ( +/obj/structure/reagent_dispensers/virusfood, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"CA" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"CB" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-II Subject Four."; + info = "Imported from off-site via a Blackstar Security capture team. Found within a derelict town on Miaphus'Irra after having consumed a Tajaran. Shows increased adaptation to forms of harm and a significant mental resilience, however still falls victim to instincts. Testing continues on Friday." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"CE" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"CI" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/computer/crew, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"CL" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"CM" = ( +/obj/machinery/computer/secure_data{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"CN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"CR" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"CS" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/structure/table/wooden_reinforced, +/obj/machinery/chemical_dispenser/catering/bar_alc, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"CT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"CU" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"CW" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"CX" = ( +/obj/structure/fake_stairs/north/top{ + _stair_tag = 10; + dir = 2 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"CY" = ( +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"Da" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Db" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Df" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"Dg" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Di" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Dj" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Dk" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Dl" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Dm" = ( +/obj/machinery/holoposter, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_bar_public) +"Dn" = ( +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"Dp" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_forensics_lab) +"Dr" = ( +/obj/machinery/door/window/brigdoor/southleft{ + req_access = list(2); + name = "Holding Cells"; + dir = 8 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Ds" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Equipment Storage"; + req_one_access = list(2) + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"Dt" = ( +/obj/effect/floor_decal/borderfloor/corner, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Dv" = ( +/obj/machinery/light, +/obj/machinery/porta_turret, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"Dw" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Dx" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"DA" = ( +/obj/machinery/disease2/diseaseanalyser, +/obj/item/paper{ + name = "Alternate Roanoke Strain Results"; + info = "I've never seen Roanoke this aggressive. To put it lightly, it's like someone took Roanoke strain-A and injected it with some sort of steroid. It acts more like a virus rather than a bacterial infection. Provided things keep on track, I'll have plenty of time to study it. First, is breaking its genome. Then I'll figure out what to do from there. -Research Director Ikanto." + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"DC" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"DE" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"DH" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/bio_hood/security, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/head/bio_hood/security, +/obj/machinery/light/flicker, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"DK" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"DL" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROS Cell-2"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"DP" = ( +/obj/structure/fake_stairs/north/bottom{ + _stair_tag = 11 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"DQ" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/orange, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"DT" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"DW" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Ea" = ( +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"Ec" = ( +/obj/machinery/door/airlock{ + name = "Dormitory Restrooms" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"Ed" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Ee" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_observation) +"Eg" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"Eh" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Ej" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Ek" = ( +/obj/machinery/dnaforensics, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"Em" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"En" = ( +/obj/machinery/botany/extractor, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Eo" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"Ep" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROG Cell-5" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Eq" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Es" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"Et" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Eu" = ( +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Ex" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"Ez" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"EA" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"EC" = ( +/obj/structure/fake_stairs/north/top{ + _stair_tag = 9; + dir = 2 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"EE" = ( +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"EG" = ( +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"EH" = ( +/obj/machinery/camera/east_mount, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"EI" = ( +/obj/structure/fake_stairs/north/top{ + connections = 2; + _stair_tag = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"EK" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Construction Area" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"EL" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sec_entrance_hallway) +"EM" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"EO" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"EP" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/accessory/armor/helmcover/nt{ + pixel_y = -8 + }, +/obj/item/clothing/accessory/armor/helmcover/nt{ + pixel_y = -8 + }, +/obj/item/clothing/accessory/armor/helmcover/nt{ + pixel_y = -8 + }, +/obj/item/clothing/accessory/armor/helmcover/nt, +/obj/item/clothing/accessory/armor/helmcover/nt, +/obj/item/clothing/accessory/armor/helmcover/nt, +/obj/item/clothing/accessory/armor/helmcover/navy, +/obj/item/clothing/accessory/armor/helmcover/navy, +/obj/item/clothing/accessory/armor/helmcover/navy, +/obj/item/clothing/accessory/armor/helmcover/navy{ + pixel_y = 5 + }, +/obj/item/clothing/accessory/armor/helmcover/navy{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"EQ" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"ER" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"ES" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"EU" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"EV" = ( +/obj/spawner/corpse/solarpeacekeeper, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"EW" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_hydro) +"EX" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"EY" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Fa" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/mech_recharger, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_robotics_lab) +"Fb" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/machinery/air_alarm/alarms_hidden/south_mount, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"Fc" = ( +/obj/machinery/door/airlock{ + id_tag = "dorm1"; + name = "Dormitory" + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Ff" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Fg" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Fi" = ( +/obj/structure/table/borosilicate, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/item/chainsaw/chainsword{ + name = "Invictus"; + desc = "A whirring mess of a weapon, once held by many great men throughout the decades of its existance. Highly ordained in markings of multiple origins, this is truly a sword of legends" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Fj" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/med_treatment) +"Fk" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Fm" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/marble, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Fp" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Fq" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Fr" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Fs" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"Ft" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Fu" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"Fv" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Fw" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Fx" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Fy" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Fz" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"FA" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"FB" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier/faxmachine{ + department = "Security" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"FC" = ( +/obj/structure/medical_stand, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/med_treatment) +"FD" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"FE" = ( +/obj/structure/filingcabinet, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"FG" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"FI" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"FJ" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"FL" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/vending/medical, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"FM" = ( +/mob/living/simple_mob/mechanical/cyber_horror/tajaran, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"FN" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"FO" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"FP" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"FQ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/spawner/corpse/syndicatecommando, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"FR" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"FS" = ( +/obj/structure/closet/secure_closet/freezer, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"FU" = ( +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"FW" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"FX" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"FZ" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/spawner/corpse/scientist, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"Ga" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Gd" = ( +/obj/structure/sign/signnew/cryogenics, +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"Ge" = ( +/obj/structure/table/reinforced, +/obj/fiftyspawner/steel, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"Gh" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Gj" = ( +/obj/structure/table/reinforced, +/obj/item/technomancer_core, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Gl" = ( +/obj/machinery/portable_atmospherics/canister/empty/nitrous_oxide, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Gm" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Gs" = ( +/obj/effect/floor_decal/corner/blue/border, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Gt" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"Gv" = ( +/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror, +/turf/simulated/floor/greengrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Gw" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/enzyme{ + layer = 5; + pixel_y = 16 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -9 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 9 + }, +/obj/item/reagent_containers/food/condiment/spacespice{ + pixel_x = -8; + pixel_y = 13 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Gx" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Gz" = ( +/obj/machinery/door/airlock/external, +/obj/structure/fans/tiny, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"GA" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/spawner/corpse/chef, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"GE" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"GF" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/pen, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"GG" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/firstaid/adv{ + pixel_x = -8; + pixel_y = -6 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"GH" = ( +/obj/machinery/door/airlock{ + id_tag = "dorm1"; + name = "Dormitory" + }, +/turf/simulated/floor/trap/delayed/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"GJ" = ( +/obj/structure/closet/l3closet/scientist, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"GN" = ( +/obj/structure/table/reinforced, +/obj/item/storage/single_use/med_pouch/burn, +/obj/item/storage/single_use/med_pouch/burn{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/single_use/med_pouch/burn{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"GO" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet{ + pixel_x = 5; + pixel_y = -6 + }, +/obj/item/clothing/head/helmet{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet{ + pixel_x = 5; + pixel_y = -6 + }, +/obj/item/clothing/head/helmet{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 28 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"GT" = ( +/obj/structure/closet/crate/corporate/aether, +/obj/machinery/light, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"GU" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"GV" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"GY" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"GZ" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sci_primary_hallway) +"Hb" = ( +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Hc" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"Hf" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Hi" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Hl" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROG Cell-4" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Hm" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/syringes{ + pixel_x = -8 + }, +/obj/item/storage/box/traumainjectors{ + pixel_x = 8 + }, +/obj/machinery/door/window/eastright{ + dir = 1; + name = "Treatment Storage"; + req_one_access = list(33) + }, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Hn" = ( +/obj/structure/barricade, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain) +"Hu" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Hw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"Hz" = ( +/obj/machinery/camera/west_mount, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain_plains) +"HA" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"HD" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"HF" = ( +/turf/unsimulated/wall/planetary/lythios43c{ + desc = "Glacial permafrost, compacted harder than stone."; + icon_state = "icerock-dark"; + icon = 'icons/turf/walls.dmi' + }, +/area/admin_planet/croatoan/landing_pad) +"HG" = ( +/obj/item/gun/energy/secutor, +/obj/item/gun/energy/secutor{ + pixel_y = -5 + }, +/obj/item/gun/energy/secutor{ + pixel_y = -3 + }, +/obj/item/gun/energy/secutor{ + pixel_y = -1 + }, +/obj/item/gun/energy/taser, +/obj/item/gun/energy/taser{ + pixel_y = -4 + }, +/obj/item/gun/energy/taser{ + pixel_y = -2 + }, +/obj/item/gun/energy/taser{ + pixel_y = 2 + }, +/obj/item/gun/energy/phasegun, +/obj/item/gun/energy/phasegun, +/obj/item/gun/energy/phasegun, +/obj/item/gun/energy/phasegun, +/obj/item/gun/energy/phasegun/pistol, +/obj/item/gun/energy/phasegun/pistol, +/obj/item/gun/energy/phasegun/pistol, +/obj/item/gun/energy/phasegun/pistol, +/obj/machinery/light/small/emergency{ + dir = 1 + }, +/obj/structure/closet/crate/secure/weapon, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"HH" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_anomaly_lab) +"HI" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Construction Area" + }, +/obj/structure/fans/tiny, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/sci_entry_hallway) +"HJ" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_robotics_lab) +"HK" = ( +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"HM" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/flamp/noshade, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"HO" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"HP" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/machinery/cell_charger{ + pixel_y = 12 + }, +/obj/item/paper{ + name = "Robotics Bay Fabricator Malfunction"; + info = "Exosuit fabricator blew a fuze or something, it'll be out of order for a while. Don't start a fire trying to get it to work, ask an engineer to help when the RD doesn't have them on the clock." + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"HR" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner"; + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"HS" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 10 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"HY" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"HZ" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Ia" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/effect/floor_decal/sign/c, +/turf/simulated/floor/outdoors/gravsnow, +/area/admin_planet/croatoan/landing_pad) +"Ib" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"Ic" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/curtain/open/privacy, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Id" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/salvageable/machine, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Ii" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/spawner/corpse/engineer/rig, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Ij" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Ik" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Im" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"In" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Io" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"Ip" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Iq" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Ir" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/salvageable/console_os, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"Is" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"It" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/camera/north_mount, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/civ_hydro) +"Iw" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Ix" = ( +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/mountain_plains) +"Iy" = ( +/obj/effect/floor_decal/industrial/loading, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Iz" = ( +/turf/simulated/mineral/icerock/airmix, +/area/admin_planet/croatoan/med_checkpoint_lower) +"IB" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Holding Cells"; + req_one_access = list(38,63) + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"ID" = ( +/obj/structure/table/reinforced, +/obj/machinery/microscope, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"IE" = ( +/obj/machinery/button/remote/blast_door{ + req_access = list(58); + req_one_access = list(19); + name = "Armory Lockdown"; + id = 97 + }, +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_hos_office) +"IF" = ( +/obj/structure/janitorialcart, +/obj/item/mop, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/storage/bag/trash, +/obj/item/soap, +/obj/machinery/light/small/flicker, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"IH" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Operations Center"; + req_one_access = list(38,63) + }, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/door/firedoor/glass{ + dir = 4; + req_one_access = list(18,47) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"IJ" = ( +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"IK" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"IM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_chemistry) +"IN" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"IO" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"IP" = ( +/obj/item/pickaxe/excavationdrill, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"IR" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"IS" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"IW" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "Observation Area" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"IX" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Ja" = ( +/obj/structure/closet/crate/mimic/airlock/guaranteed, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Jb" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/atmospheric_retention_field, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_main_hallway) +"Jc" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Je" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue/border, +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Jf" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Jh" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Ji" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"Jj" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"Jk" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Jl" = ( +/obj/machinery/disease2/incubator, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Jm" = ( +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/closet/firecloset/full, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Jn" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Jo" = ( +/obj/machinery/computer/mecha{ + dir = 4 + }, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"Js" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Ju" = ( +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"Jw" = ( +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"Jx" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Jy" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Jz" = ( +/obj/structure/bed/roller/adv, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/med_treatment) +"JB" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"JC" = ( +/obj/machinery/door/airlock/glass/security{ + req_one_access = list(38,63); + name = "Security Hallway" + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"JD" = ( +/obj/effect/shuttle_landmark/automatic{ + docking_controller = "frozen"; + name = "Exploration Shuttle Landing Pad" + }, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"JE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"JH" = ( +/obj/structure/closet/crate/corporate/nanotrasen, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"JI" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"JJ" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/chem_master/condimaster, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"JM" = ( +/obj/structure/closet/crate/hydroponics{ + desc = "All you need to start your own honey farm."; + name = "beekeeping crate" + }, +/obj/item/bee_pack, +/obj/item/bee_pack, +/obj/item/bee_pack, +/obj/item/bee_smoker, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/clothing/suit/beekeeper, +/obj/item/clothing/mask/gas/bee, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/tool/crowbar, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"JN" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"JP" = ( +/obj/structure/table/wooden_reinforced, +/obj/machinery/camera/east_mount, +/obj/item/card/id/civilian/janitor{ + registered_name = "Chayse Nowton" + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"JR" = ( +/obj/machinery/light/flicker, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"JS" = ( +/obj/machinery/door/airlock/glass/security{ + req_one_access = list(19); + name = "High Security Science Wing Security Checkpoint-1" + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"JT" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"JV" = ( +/obj/structure/fake_stairs/east/bottom{ + _stair_tag = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"JW" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner, +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"JY" = ( +/obj/machinery/door/airlock/maintenance, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/med_lobby) +"Ka" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Kb" = ( +/obj/machinery/door/window/brigdoor{ + desc = "Security Canister Storage"; + req_access = list(101); + req_one_access = list(103) + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/machinery/power/rtg/fake_gen, +/obj/machinery/power/apc/hyper/west_mount, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Kc" = ( +/obj/machinery/door/airlock/external{ + name = "Cargo Shuttle Landing-Pad"; + req_access = list(31) + }, +/obj/machinery/door/firedoor/glass{ + dir = 4 + }, +/obj/structure/fans/tiny, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Kd" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Kf" = ( +/turf/unsimulated/wall/planetary/lythios43c{ + desc = "Glacial permafrost, compacted harder than stone."; + icon_state = "icerock-dark"; + icon = 'icons/turf/walls.dmi' + }, +/area/admin_planet/croatoan/mountain) +"Kg" = ( +/obj/structure/closet/l3closet/scientist, +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Kh" = ( +/obj/machinery/door/airlock/external{ + req_access = list(47); + req_one_access = list(47); + name = "Decontamination" + }, +/obj/structure/fans/tiny, +/obj/machinery/door/firedoor/glass{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Ki" = ( +/obj/structure/sign/securearea, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/civ_checkpoint) +"Kl" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"Ko" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Kp" = ( +/obj/effect/floor_decal/flesh/colour, +/obj/item/bone/skull, +/obj/item/bone/leg, +/turf/simulated/floor/flesh, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Kq" = ( +/obj/machinery/door/airlock/external{ + name = "Cargo Shuttle Landing-Pad"; + req_access = list(31) + }, +/obj/machinery/door/firedoor/glass{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Ks" = ( +/obj/machinery/computer/centrifuge, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Ku" = ( +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_primary_hallway) +"Kw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Ky" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/railing, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"Kz" = ( +/obj/effect/floor_decal/industrial/halfstair{ + dir = 1 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"KB" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"KC" = ( +/obj/machinery/holoposter{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"KD" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"KE" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"KF" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/table/carbon, +/obj/item/paper_bin{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/pen, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"KH" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"KK" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"KL" = ( +/obj/machinery/door/airlock/medical{ + name = "Class-P Morgue" + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"KM" = ( +/obj/machinery/door/airlock{ + id_tag = "dorm1"; + name = "Dormitory Lobby" + }, +/turf/unsimulated/wall/planetary/lythios43c{ + desc = "Glacial permafrost, compacted harder than stone."; + icon_state = "icerock-dark"; + icon = 'icons/turf/walls.dmi' + }, +/area/admin_planet/croatoan/civilian/dorms) +"KN" = ( +/obj/spawner/corpse/scientist, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"KR" = ( +/obj/machinery/light/small{ + dir = 1; + pixel_x = -2 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"KS" = ( +/obj/structure/salvageable/console_broken_os, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"KT" = ( +/turf/simulated/shuttle/wall/voidcraft/hard_corner, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"KU" = ( +/obj/effect/floormimic/dangerous, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"KX" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/civ_bar_public) +"KY" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"KZ" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/hand_labeler{ + pixel_y = -4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"La" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Lb" = ( +/turf/simulated/mineral/icerock/airmix, +/area/admin_planet/croatoan/mountain_plains) +"Lc" = ( +/obj/machinery/door/airlock/civilian, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Ld" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Le" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"Lg" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Lh" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/storage/hypokit, +/obj/item/storage/hypokit{ + pixel_x = -8; + pixel_y = -8 + }, +/obj/item/storage/hypokit{ + pixel_x = -8 + }, +/obj/item/storage/hypokit{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/storage/hypokit{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/storage/hypokit{ + pixel_x = 8; + pixel_y = -8 + }, +/obj/item/storage/hypokit{ + pixel_x = 8 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"Li" = ( +/obj/machinery/portable_atmospherics/canister/chlorine, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"Lj" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Ll" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/helmet/space/void/medical/bio, +/obj/item/clothing/suit/bio_suit, +/obj/item/clothing/head/helmet/space/void/medical/bio, +/obj/item/clothing/suit/bio_suit, +/obj/machinery/light/flicker{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Lm" = ( +/obj/structure/window/phoronreinforced, +/obj/structure/salvageable/console_os{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Ln" = ( +/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/structure/cable, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Lo" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/railing, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Lr" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Lt" = ( +/obj/structure/closet/crate/corporate/heph, +/obj/machinery/light, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Lw" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing Decontamination" + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Lx" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_operations_center) +"Ly" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Lz" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"LA" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_bar_public) +"LB" = ( +/obj/machinery/lapvend, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"LC" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"LD" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"LE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"LF" = ( +/obj/machinery/door/airlock/glass/medical{ + name = "Chemistry"; + req_one_access = list(33) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"LG" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/window/phoronreinforced, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"LH" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROS Cell-3"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"LI" = ( +/obj/machinery/mining/drill{ + name = "Excavation Drill" + }, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain_plains) +"LK" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"LO" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"LQ" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Elevator" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"LU" = ( +/obj/structure/sign/nanotrasen, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/med_checkpoint_lower) +"LV" = ( +/turf/simulated/floor/greengrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"LW" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"LX" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255 + }, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"LY" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"LZ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/railing, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Ma" = ( +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"Mc" = ( +/obj/machinery/door/window/brigdoor/southleft{ + dir = 4; + req_access = list(2); + name = "Holding Cells" + }, +/obj/machinery/door_timer/cell_3{ + id = "Cell A"; + name = "Cell 1"; + pixel_y = -32 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Me" = ( +/obj/structure/closet/crate/corporate/carp, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Mf" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Mg" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Mh" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"Mj" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/item/card/id/cargo/cargo_tech{ + registered_name = "Spare Cargo Access Card" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"Mk" = ( +/obj/effect/floor_decal/corner/lightorange/border, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_y = 9 + }, +/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/item/stack/material/phoron, +/obj/structure/cable, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"Mo" = ( +/obj/machinery/light/flamp/noshade, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/med_checkpoint_lower) +"Mp" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Mq" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Ms" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"Mv" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/turf/simulated/floor/wood, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Mx" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Mz" = ( +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"MC" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue/border, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/structure/closet/firecloset/full, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"MD" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/hardsuit/hazard, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"ME" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"MF" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"MG" = ( +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"MI" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/helmet/combat, +/obj/item/clothing/head/helmet/combat{ + pixel_x = 5; + pixel_y = -6 + }, +/obj/item/clothing/head/helmet/combat{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/clothing/head/helmet/combat{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/clothing/head/helmet/combat{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/clothing/suit/armor/pcarrier/ballistic, +/obj/item/clothing/suit/armor/pcarrier/ballistic{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/ballistic{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/ballistic{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/ballistic{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/pcarrier/ballistic, +/obj/item/clothing/head/helmet/combat{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"MK" = ( +/obj/machinery/camera/west_mount, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"MM" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"MN" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"MP" = ( +/obj/machinery/power/rtg/fake_gen, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"MQ" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"MS" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"MT" = ( +/obj/structure/bed/chair/office/dark, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"MV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"MX" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/structure/mirror/long/right{ + dir = 8; + pixel_x = -28 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"MY" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/railing, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"Na" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"Nb" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/spawner/corpse/scientist, +/obj/item/paper{ + name = "Lab Notes"; + info = "If you need to re-do the research levels, don't bother Director Ikanto with it. One of the newbies got a Hell of a scolding for interrupting them during an experiment in high security science. Ask Ashton, he seems to be an expert at this stuff." + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"Ne" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Ng" = ( +/obj/machinery/vending/hydroseeds, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Nj" = ( +/obj/item/clothing/under/rank/research_director/rdalt, +/obj/item/bone/leg, +/turf/simulated/floor/flesh, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Nk" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Nm" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen/red{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/pen, +/obj/item/pen/blue{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/paper{ + name = "Updated Security Systems"; + info = "Ever since the shit happened with the Carpenter, we've been getting a lot of upgraded security devices. New turrets, state of the art combat drones. You name it? We might have it at this point. I don't trust all the tech." + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Np" = ( +/obj/machinery/door/airlock/vault{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Science Entrance" + }, +/obj/machinery/door/blast/puzzle{ + desc = "A completely inpenetrable blast door which is covered in an absurb amount of armor. Warning labels cover it consisting of a number of hazards, it seems to be controlled by a button somewhere."; + name = "High Security Science Lockdown"; + id = 100 + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/fans/tiny, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Nq" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_lobby) +"Nr" = ( +/obj/structure/sign/signnew/cryogenics, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Ns" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/gun/energy/taser/xeno/sec, +/obj/item/gun/energy/taser/xeno/robot, +/obj/item/gun/energy/taser/xeno, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Nt" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(39); + name = "Virology Lab" + }, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Nu" = ( +/obj/machinery/r_n_d/protolathe, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"Nv" = ( +/obj/structure/closet/chefcloset, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"Nw" = ( +/obj/structure/window/phoronreinforced{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"Nx" = ( +/obj/effect/floor_decal/corner/blue/diagonal, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"Ny" = ( +/obj/machinery/door/airlock/glass/security{ + req_one_access = list(38,63); + name = "Armory Hallway" + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_armory) +"Nz" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"NA" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"NB" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/yellow, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"NC" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"ND" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/clothing/accessory/storage/pouches{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/clothing/accessory/storage/pouches{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/clothing/accessory/storage/pouches{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/clothing/accessory/storage/pouches{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/clothing/accessory/storage/pouches{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/holster/leg, +/obj/item/clothing/accessory/holster/leg, +/obj/item/clothing/accessory/holster/leg, +/obj/item/clothing/accessory/holster/leg{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/accessory/holster/leg{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/accessory/holster/leg{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/accessory/holster/armpit{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/item/clothing/accessory/holster/armpit{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/item/clothing/accessory/holster/armpit{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/item/clothing/accessory/holster/armpit, +/obj/item/clothing/accessory/holster/armpit, +/obj/item/clothing/accessory/holster/armpit, +/obj/item/clothing/accessory/holster/hip{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/clothing/accessory/holster/hip{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/clothing/accessory/holster/hip{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/clothing/accessory/holster/hip, +/obj/item/clothing/accessory/holster/hip, +/obj/item/clothing/accessory/holster/hip, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 28 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"NF" = ( +/obj/machinery/portable_atmospherics/canister{ + name = "BZ Canister"; + desc = "An odd canister covered in a variety of warning symbols. Its label details the hazardous gas contained within as 'BZ.'" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"NH" = ( +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_hydro) +"NI" = ( +/obj/structure/table/darkglass, +/obj/machinery/computer/secure_data{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"NN" = ( +/obj/effect/floor_decal/industrial/loading, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"NO" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"NQ" = ( +/obj/effect/floor_decal/industrial/halfstair, +/turf/simulated/floor/outdoors/beach/sand/dirt/classd, +/area/admin_planet/croatoan/civ_bar_public) +"NR" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"NS" = ( +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"NW" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"NX" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"NY" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"NZ" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "Observation Area" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Ob" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"Oc" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Ok" = ( +/obj/spawner/corpse/scientist, +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/mountain_plains) +"On" = ( +/obj/structure/closet/l3closet/scientist, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/air_alarm/alarms_hidden/north_mount, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"Oo" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/gun/energy/pulse_pistol, +/obj/item/gun/energy/pulse_pistol, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"Op" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Or" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Os" = ( +/obj/structure/bed/chair/bay/chair/padded, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Ot" = ( +/obj/machinery/door/airlock/command{ + id_tag = "HoSdoor"; + name = "Head of Security"; + req_access = list(58) + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Ow" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/light/flamp/noshade, +/obj/structure/railing/grey{ + dir = 3 + }, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/civ_bar_public) +"Oy" = ( +/obj/spawner/window/reinforced/full, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Oz" = ( +/obj/structure/closet, +/obj/effect/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"OA" = ( +/obj/machinery/door/airlock/highsecurity{ + desc = "Medical Checkpoint"; + name = "Class-P Science Checkpoint Entrance"; + req_one_access = list(47) + }, +/obj/machinery/door/blast/puzzle{ + desc = "A large, reinforced blast door covered with an R&D symbol painted onto it. There doesn't seem to be anyway to open it, and it's covered with blast-proof plating. Maybe something else will open it?"; + name = "Hardened Blast Door"; + id = 24 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"OB" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"OC" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/air_alarm/alarms_hidden{ + dir = 8; + pixel_x = 22; + req_one_access = list(160) + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"OE" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"OF" = ( +/obj/structure/closet/l3closet/scientist, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"OG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"OJ" = ( +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"OK" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"OL" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/rtg/fake_gen, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"ON" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/rtg/fake_gen, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"OO" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"OP" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"OQ" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"OR" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"OS" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"OT" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_bar_public) +"OV" = ( +/obj/structure/fake_stairs/south/bottom{ + connections = 2; + _stair_tag = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_upper) +"OW" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"OX" = ( +/obj/machinery/light{ + light_range = 12 + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"OY" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"Pb" = ( +/turf/simulated/mineral/icerock, +/area/admin_planet/croatoan/mountain_plains) +"Pc" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Pd" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Pf" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Pg" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/item/holowarrant, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/item/card/id/security/head, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Ph" = ( +/obj/machinery/light, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Pl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"Pm" = ( +/obj/machinery/door/airlock/vault{ + name = "Security Canister Storage"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Pn" = ( +/obj/structure/fake_stairs/north/bottom{ + _stair_tag = 9 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Po" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing Initial Equipment Storage" + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"Pp" = ( +/obj/machinery/mining/drill{ + name = "Excavation Drill" + }, +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/mountain_plains) +"Pq" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"Pr" = ( +/obj/structure/sign/signnew/cryogenics, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/civ_checkpoint) +"Ps" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/civ_hydro) +"Pt" = ( +/obj/machinery/power/terminal, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Pu" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Pv" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Pw" = ( +/obj/structure/table/reinforced, +/obj/item/integrated_circuit_printer, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"Py" = ( +/obj/machinery/door/airlock/vault{ + name = "Extreme Security Containment Cell Access"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Pz" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_cmo_office) +"PD" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/machinery/door/window/brigdoor/eastleft{ + name = "Bar Access" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"PE" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"PH" = ( +/obj/machinery/door/airlock/external{ + req_access = list(47); + req_one_access = list(47); + name = "Decontamination" + }, +/obj/structure/fans/tiny, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/techfloor/virgo2, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"PI" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/air_alarm/alarms_hidden/east_mount, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"PK" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_morgue) +"PL" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"PM" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"PN" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"PO" = ( +/obj/machinery/light, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_main_hallway) +"PQ" = ( +/obj/structure/sign/department/morgue, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_storage) +"PR" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"PT" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"PX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"PY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Qa" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Qb" = ( +/obj/machinery/door/airlock/external{ + name = "Cargo Shuttle Landing-Pad"; + req_access = list(31) + }, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/obj/structure/fans/tiny, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Qc" = ( +/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/structure/cable, +/turf/unsimulated/floor/techfloor_grid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Qf" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Qg" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list(58); + req_one_access = list(19); + name = "Armory Access" + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/machinery/door/blast/puzzle{ + desc = "A hardened blast door that looks completely unbreakable. This ones interface shows that its remotely controlled by some sort of button with the words 'ARMORY' above it."; + name = "Armory Blast Door"; + id = 97 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"Qh" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"Qi" = ( +/obj/effect/floor_decal/industrial/halfstair{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Qj" = ( +/obj/machinery/door/airlock/multi_tile/glass/medical{ + dir = 4; + name = "Medbay Treatment Center"; + req_access = list(5); + req_one_access = list(5) + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Ql" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"Qm" = ( +/obj/effect/floor_decal/borderfloor, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"Qn" = ( +/obj/machinery/door/window/brigdoor{ + desc = "Security Canister Storage"; + req_access = list(101); + req_one_access = list(103) + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Qo" = ( +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Qp" = ( +/obj/structure/anomaly_container, +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"Qq" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/item/storage/belt/utility/full, +/obj/item/shovel/spade, +/obj/item/plant_analyzer, +/obj/item/material/knife/machete/hatchet, +/obj/item/material/minihoe, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Qt" = ( +/obj/spawner/window/reinforced/full, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_cmo_office) +"Qu" = ( +/obj/structure/table/borosilicate, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/item/paper{ + name = "High Security Science Gear"; + info = "If you are entering the high security science division, please make sure you are wearing atleast a gasmask. A biohazard suit covering all lengths of your body is recommended as well. We're dealing with pretty nasty diseases at times, stay clean and stay safe!" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Qv" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/machinery/light, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"Qw" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"Qy" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_cmo_office) +"Qz" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/catering/bar_soft, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"QA" = ( +/turf/simulated/mineral/icerock/airmix, +/area/admin_planet/croatoan/mountain) +"QB" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/fire{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"QC" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"QE" = ( +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"QF" = ( +/obj/machinery/dnaforensics, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"QG" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_robotics_lab) +"QH" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"QI" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/machinery/light, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"QJ" = ( +/turf/simulated/floor/wood, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"QK" = ( +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"QO" = ( +/obj/effect/floor_decal/corner/lightorange/border, +/obj/machinery/chemical_dispenser/full, +/obj/structure/table/reinforced, +/obj/machinery/light/flicker, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"QP" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"QQ" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"QR" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing" + }, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"QS" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROS Cell-4"; + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"QT" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"QU" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/storage/box/stunshells/large, +/obj/item/storage/box/stunshells/large, +/obj/item/storage/box/shotgunshells/large, +/obj/item/storage/box/shotgunshells/large, +/obj/item/storage/box/shotgunshells/large, +/obj/item/storage/box/shotgunshells/large, +/obj/item/storage/box/shotgunammo/large, +/obj/item/storage/box/shotgunammo/large, +/obj/item/storage/box/shotgunammo/large, +/obj/item/storage/box/shotgunammo/large, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m57x28mm/fiveseven/ap, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m9mmt{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/ammo_magazine/m762, +/obj/item/ammo_magazine/m762, +/obj/item/ammo_magazine/m762, +/obj/item/ammo_magazine/m762, +/obj/item/ammo_magazine/m762, +/obj/item/ammo_magazine/m44, +/obj/item/ammo_magazine/m44, +/obj/item/ammo_magazine/m45, +/obj/item/ammo_magazine/m45, +/obj/item/ammo_magazine/m12gdrum, +/obj/item/ammo_magazine/m12gdrum, +/obj/item/ammo_magazine/m556, +/obj/item/ammo_magazine/m556, +/obj/item/ammo_magazine/m45uzi, +/obj/item/ammo_magazine/m45uzi, +/obj/item/ammo_magazine/m57x28mm/fiveseven, +/obj/item/ammo_magazine/m57x28mm/fiveseven, +/obj/item/ammo_magazine/m57x28mm/ntles, +/obj/item/ammo_magazine/m57x28mm/ntles, +/obj/item/ammo_magazine/m57x28mm/smg, +/obj/item/ammo_magazine/m57x28mm/smg, +/obj/item/ammo_magazine/m5mmcaseless, +/obj/item/ammo_magazine/m5mmcaseless, +/obj/item/ammo_magazine/m75, +/obj/item/ammo_magazine/m75, +/obj/item/ammo_magazine/m762, +/obj/item/ammo_magazine/m762, +/obj/item/ammo_magazine/m762garand, +/obj/item/ammo_magazine/m762garand, +/obj/item/ammo_magazine/m762m, +/obj/item/ammo_magazine/m762m, +/obj/item/ammo_magazine/m762svd, +/obj/item/ammo_magazine/m762svd, +/obj/item/ammo_magazine/m792, +/obj/item/ammo_magazine/m792, +/obj/item/ammo_magazine/m95, +/obj/item/ammo_magazine/m95, +/obj/item/ammo_magazine/m9mm, +/obj/item/ammo_magazine/m9mm, +/obj/item/ammo_magazine/m9mmt, +/obj/item/ammo_magazine/m9mmt, +/obj/item/ammo_magazine/m9mmt, +/obj/item/ammo_magazine/m9mmt, +/obj/machinery/light/small/emergency{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"QV" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"QX" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_lobby) +"QZ" = ( +/obj/machinery/door_timer/cell_3, +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_holding_cells) +"Rc" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/greengrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Re" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Rf" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Rh" = ( +/obj/machinery/smartfridge/food, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_kitchen) +"Ri" = ( +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/obj/spawner/corpse/scientist, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"Rj" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Rn" = ( +/obj/machinery/door/airlock/command{ + id_tag = "cmodoor"; + name = "Chief Medical Officer"; + req_access = list(40) + }, +/obj/effect/floor_decal/corner/blue/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_cmo_office) +"Ro" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Rp" = ( +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/mountain) +"Rq" = ( +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Rr" = ( +/turf/simulated/floor/outdoors/dirt/classp, +/area/admin_planet/croatoan/mountain_plains) +"Rt" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_armory) +"Ru" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Rv" = ( +/obj/structure/bed/chair/sofa/black/right{ + dir = 1 + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Rz" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 1; + pixel_y = 1 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"RA" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"RB" = ( +/obj/structure/table/bench/wooden, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"RD" = ( +/obj/machinery/suit_cycler/headofsecurity, +/obj/machinery/air_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"RE" = ( +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"RG" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/bio_hood/security, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/head/bio_hood/security, +/obj/machinery/light/flicker, +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"RI" = ( +/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/structure/cable, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"RJ" = ( +/obj/machinery/door/airlock/external{ + req_access = list(47); + req_one_access = list(47); + name = "Decontamination" + }, +/obj/structure/fans/tiny, +/obj/machinery/door/firedoor/glass{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"RK" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/melee/baton/stunlance, +/obj/item/melee/baton/stunsword, +/obj/item/melee/baton/shocker, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"RL" = ( +/obj/machinery/computer/card{ + dir = 8 + }, +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"RM" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"RN" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"RO" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"RP" = ( +/obj/machinery/door/blast/regular{ + name = "Containment Blast Doors" + }, +/obj/effect/floor_decal/corner_techfloor_gray/diagonal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/sci_anomaly_lab) +"RQ" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"RS" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Containment Reminder"; + info = "Never enter the containment area alone. Bring atleast one security merc or a combat drone if you want to risk it. Remember what happened last time." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"RU" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"RV" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"RX" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"RY" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"RZ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Sb" = ( +/turf/simulated/floor/beach/sand/dirt, +/area/admin_planet/croatoan/civ_bar_public) +"Sc" = ( +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Sd" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Se" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Si" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/cult, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Sj" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"Sm" = ( +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Sn" = ( +/obj/random/obstruction, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"Ss" = ( +/obj/machinery/holoposter, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/med_checkpoint_lower) +"St" = ( +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"Su" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 5 + }, +/obj/item/reagent_containers/dropper{ + pixel_y = -6 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper{ + pixel_y = -4 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"Sv" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -8 + }, +/obj/machinery/door/window/eastright{ + dir = 2; + name = "Treatment Storage" + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Sw" = ( +/obj/spawner/window/low_wall/reinforced/full, +/turf/space/basic, +/area/admin_planet/croatoan/civ_bar_public) +"Sx" = ( +/obj/machinery/smartfridge, +/turf/simulated/wall/prepainted/civilian, +/area/admin_planet/croatoan/civ_hydro) +"Sz" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"SA" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"SD" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/spawner/corpse/doctor, +/obj/item/paper{ + info = "Does anything work around here? Freight elevator jammed at the top a day ago and we haven't had an engineer check it out. They're all busy up in the high security ideas, come on!"; + name = "Jammed Elevator" + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"SF" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/sec_holding_cells) +"SG" = ( +/obj/machinery/door/airlock/highsecurity{ + desc = "Medical Checkpoint"; + name = "Class-P Science Checkpoint Entrance"; + req_one_access = list(47) + }, +/obj/machinery/door/blast/puzzle{ + desc = "A large, reinforced blast door covered with an R&D symbol painted onto it. There doesn't seem to be anyway to open it, and it's covered with blast-proof plating. Maybe something else will open it?"; + name = "Hardened Blast Door"; + id = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"SI" = ( +/obj/structure/fake_stairs/east/top{ + _stair_tag = 11; + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"SK" = ( +/obj/machinery/door/window/brigdoor{ + name = "ROG Cell-1" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"SL" = ( +/obj/structure/sign/department/anomaly, +/turf/simulated/wall/r_wall/prepainted/science, +/area/admin_planet/croatoan/sci_anomaly_lab) +"SM" = ( +/obj/effect/floor_decal/corner/lightorange/border, +/obj/structure/table/reinforced, +/obj/item/mass_spectrometer/adv, +/obj/item/mass_spectrometer/adv{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/mass_spectrometer/adv{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/glasses/science{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"SN" = ( +/obj/structure/atmospheric_retention_field, +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing Hallway-1" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"SO" = ( +/obj/structure/flora/rock/ice/alternative_2, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"SP" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"SR" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"ST" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"SV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"SW" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"SX" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/item/paper{ + name = "APC Note"; + info = "Note to engineering staff: Get us a new APC, this one keeps frying its cells left and right. Last thing we want is to get locked out of Medical." + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/med_checkpoint_lower) +"SY" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"SZ" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Tb" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Tc" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Te" = ( +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Tf" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Th" = ( +/obj/effect/floor_decal/corner/lime/border, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Tk" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/effect/floor_decal/corner/beige, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Tl" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_kitchen) +"Tm" = ( +/obj/structure/table/reinforced, +/obj/item/uv_light, +/obj/item/uv_light, +/obj/item/forensics/sample_kit/powder, +/obj/item/forensics/sample_kit/powder, +/obj/item/reagent_containers/spray/luminol, +/obj/item/reagent_containers/spray/luminol, +/obj/item/mass_spectrometer/adv, +/obj/item/mass_spectrometer/adv, +/obj/item/reagent_scanner, +/obj/item/reagent_scanner, +/obj/item/storage/box/swabs{ + layer = 5 + }, +/obj/item/storage/box/swabs{ + layer = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/sec_forensics_lab) +"Tp" = ( +/obj/item/paper{ + name = "WORK ORDER: RUSTING PHORON PIPES"; + info = "The phoron pipes that lead from storage to the atmospheric test chamber are rusting. Probably since you installed it wrong, since you all didn't install an automated shutoff valve. That means if it breaks someone is going to have to manually turn off the valve. Replace it immediately before you start a fire and burn all my test subjects! Do better, we pay you better then this! -Director Ikanto" + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Tq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"Ts" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Tt" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/eastright{ + dir = 2; + name = "Treatment Storage" + }, +/obj/item/defib_kit, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"Tu" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Tw" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Tz" = ( +/obj/machinery/button/remote/blast_door{ + name = "Security Operations Center Lockdown"; + id = 74 + }, +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_operations_center) +"TC" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"TF" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list(58); + req_one_access = list(19); + name = "Armory Access" + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/machinery/door/blast/puzzle{ + desc = "A hardened blast door that looks completely unbreakable. This ones interface shows that its remotely controlled by some sort of button with the words 'ARMORY' above it."; + name = "Armory Blast Door"; + id = 97 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"TG" = ( +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"TI" = ( +/obj/structure/table/reinforced, +/obj/item/integrated_circuit_printer, +/obj/machinery/air_alarm/alarms_hidden/east_mount, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"TK" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Security Operations Center"; + req_one_access = list(38,63) + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + name = "Security Operations Lockdown"; + id = 74 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sec_entrance_hallway) +"TL" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"TM" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"TN" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing Hallway-1" + }, +/obj/structure/atmospheric_retention_field, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"TQ" = ( +/obj/machinery/door/airlock/glass/security{ + req_one_access = list(38,63); + name = "Armory Hallway" + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_armory) +"TR" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/rtg/fake_gen, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"TT" = ( +/obj/machinery/holosign/bar{ + id = "bar_sign" + }, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civ_bar_public) +"TU" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"TX" = ( +/obj/item/reagent_containers/syringe, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"TY" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Ua" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Uc" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "High Security Science Wing Containment Access"; + req_one_access = list(19) + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Ue" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Uf" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/gun/ballistic/automatic/c20r, +/obj/item/gun/ballistic/automatic/bullpup, +/obj/item/gun/ballistic/automatic/battlerifle, +/obj/item/gun/ballistic/automatic/combat, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"Ul" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_primary_hallway) +"Um" = ( +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Un" = ( +/obj/effect/floor_decal/borderfloor, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"Uo" = ( +/obj/structure/table/borosilicate, +/obj/machinery/computer/skills{ + pixel_x = -4; + pixel_y = 6 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Ur" = ( +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/mountain) +"Us" = ( +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"Uu" = ( +/obj/structure/table/reinforced, +/obj/item/defib_kit, +/obj/item/cell/high, +/obj/item/tool/screwdriver, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Uv" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Ux" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Uy" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"Uz" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/machinery/power/terminal, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"UB" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"UC" = ( +/obj/structure/closet/crate/corporate/thinktronic, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"UD" = ( +/obj/machinery/door/airlock/medical{ + name = "Medbay Treatment Storage" + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_storage) +"UE" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_primary_hallway) +"UG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"UH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"UI" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/loading, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"UJ" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_entrance_hallway) +"UK" = ( +/obj/machinery/door/airlock/highsecurity{ + req_one_access = list(19); + name = "High Security Science Wing Control Center" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/atmospheric_retention_field, +/obj/machinery/door/blast/puzzle{ + desc = "A hardened blast door that seems to be remotely controlled."; + id = 103; + name = "High Security Science Control Room" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"UN" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"UO" = ( +/obj/structure/window/phoronreinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Roanoke Class-I Subject-C"; + info = "Subject-C, Class-I Roanoke Colony. Environment resembles Miaphus'Irra where the subject was captured. Subject seems to have taken the form of a crate." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"UQ" = ( +/obj/machinery/power/terminal, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"US" = ( +/turf/simulated/shuttle/wall/voidcraft, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"UT" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"UU" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"UV" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/ian, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"UX" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Va" = ( +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/obj/machinery/air_alarm/alarms_hidden/east_mount, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"Vb" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"Vd" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/marble, +/obj/machinery/appliance/mixer/candy, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Vf" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Vh" = ( +/obj/item/pickaxe/silver, +/obj/random/obstruction, +/turf/simulated/floor/old_tile, +/area/admin_planet/croatoan/mountain) +"Vj" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightorange/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Vk" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Vm" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/concrete/tile/classm/outdoors, +/area/admin_planet/croatoan/mountain_plains) +"Vn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_checkpoint_upper) +"Vo" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Vp" = ( +/obj/structure/table/borosilicate, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas, +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 5 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/item/paper{ + name = "High Security Science Gear"; + info = "If you are entering the high security science division, please make sure you are wearing atleast a gasmask. A biohazard suit covering all lengths of your body is recommended as well. We're dealing with pretty nasty diseases at times, stay clean and stay safe!" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Vq" = ( +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Vr" = ( +/obj/machinery/door/airlock/vault{ + name = "Secure Emergency Storage"; + req_one_access = list(101); + req_access = list(103) + }, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Vs" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + req_access = list(31); + req_one_access = list(31); + name = "Supply Shuttle Access"; + dir = 4 + }, +/obj/machinery/door/firedoor/glass{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Vt" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"Vu" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"Vw" = ( +/obj/machinery/computer/centrifuge, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Vx" = ( +/obj/machinery/door/airlock/medical{ + name = "Medbay Reception Desk" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Vy" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Vz" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"VE" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_ridged, +/area/admin_planet/croatoan/med_checkpoint_upper) +"VG" = ( +/obj/overmap/entity/visitable/sector/admin/croatoan, +/turf/simulated/wall/dungeon, +/area/admin_planet/croatoan/mountain) +"VK" = ( +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"VO" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"VP" = ( +/obj/machinery/shower{ + pixel_y = 17 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"VQ" = ( +/obj/machinery/door/airlock/engineering{ + name = "Canister Storage"; + req_one_access = list(11,24,47) + }, +/obj/machinery/door/firedoor/glass{ + dir = 8; + req_one_access = list(18,47) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"VR" = ( +/obj/item/radio/headset/centcom/alt, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/flesh, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"VT" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/concrete/tile/classm, +/area/admin_planet/croatoan/civ_bar_public) +"VV" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"VW" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/paper{ + name = "Order More Hazard Hardsuits"; + info = "Need to order more hazard hardsuits, we have like.. One or two left in stock." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"VX" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/machinery/door/firedoor/glass{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"VY" = ( +/mob/living/simple_mob/mechanical/cyber_horror/surt, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Wb" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/stool, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"Wc" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Wf" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Wg" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/structure/table/hardwoodtable, +/obj/item/card/id/civilian/bartender{ + registered_name = "William Hayton" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Wh" = ( +/obj/structure/closet/crate/science, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"Wi" = ( +/turf/simulated/floor/holofloor/beach/sand, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Wj" = ( +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"Wl" = ( +/obj/structure/table/borosilicate, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/item/clothing/head/helmet/space/plasman/sec/hos/alt2{ + name = "Harbinger Helmet"; + desc = "A helmet of extremely odd design, it seems custom-made for a species you've never seen before." + }, +/obj/item/clothing/suit/space/plasman/sec/hos{ + name = "Harbingers Shield"; + desc = "A unique suit designed specifically for one wearer. It looks highly ordained and armored." + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Wn" = ( +/obj/machinery/camera, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Wp" = ( +/obj/structure/table/carbon/reinforced, +/obj/item/towel/random, +/obj/item/soap/deluxe, +/obj/item/reagent_containers/spray/cleaner, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/sci_entry_hallway) +"Wq" = ( +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"Wr" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/power/apc/alarms_hidden/east_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_lobby) +"Wu" = ( +/obj/machinery/atmospherics/component/unary/outlet_injector{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Wv" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"Ww" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Wx" = ( +/obj/effect/floor_decal/corner_oldtile/red/diagonal, +/obj/item/stool/padded, +/obj/spawner/corpse/engineer, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"Wy" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"WA" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/porta_turret, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"WC" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/paper{ + name = "Backup Civilian Lockdown Passcode"; + info = "Backup code for the civilian lockdown incase it triggers on accident again. System's faulty and we need to get it looked at, RD's pissed. Don't tell her about this paper though, I'll likely get chewed out. Code is.. '19982'" + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"WF" = ( +/obj/structure/bed/chair/bay/comfy/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"WG" = ( +/obj/structure/closet/l3closet/scientist, +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"WH" = ( +/obj/structure/morgue{ + dir = 2 + }, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"WK" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"WL" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"WN" = ( +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/window/phoronreinforced, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"WP" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"WR" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/external, +/area/admin_planet/croatoan/civilian/dorms) +"WS" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"WT" = ( +/obj/structure/salvageable/server, +/obj/machinery/light, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"WU" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"WV" = ( +/obj/machinery/light, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"WW" = ( +/obj/machinery/computer/station_alert/security{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"WX" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"WY" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 10 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/light, +/obj/machinery/porta_turret{ + emagged = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"WZ" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Xa" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"Xe" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"Xg" = ( +/obj/structure/table/steel_reinforced, +/obj/item/book/manual/standard_operating_procedure{ + pixel_x = -5 + }, +/obj/item/book/manual/security_space_law, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Xh" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 9 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Xi" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civilian/dorms) +"Xk" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Xl" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/machinery/light, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/sci_entry_hallway) +"Xm" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/under/bodysuit/bodysuithazard_fem, +/obj/item/clothing/under/bodysuit/bodysuithazard_fem, +/obj/item/clothing/under/bodysuit/bodysuithazard_fem, +/obj/item/clothing/under/bodysuit/bodysuithazard_fem, +/obj/item/clothing/under/bodysuit/bodysuithazard_fem, +/obj/item/clothing/under/bodysuit/bodysuithazard_fem, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"Xp" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_armory) +"Xq" = ( +/obj/machinery/light, +/turf/simulated/floor/cult, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Xt" = ( +/turf/simulated/floor/reinforced, +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Xv" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list(58); + req_one_access = list(19); + name = "High Security Science Entrance" + }, +/obj/machinery/door/blast/puzzle{ + desc = "A completely inpenetrable blast door which is covered in an absurb amount of armor. Warning labels cover it consisting of a number of hazards, it seems to be controlled by a button somewhere."; + name = "High Security Science Lockdown"; + id = 99 + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/fans/tiny, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Xw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_main_hallway) +"Xx" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"XA" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"XB" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"XC" = ( +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"XE" = ( +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/high_sec_science_observation) +"XH" = ( +/turf/simulated/mineral/icerock, +/area/admin_planet/croatoan/sci_canister_storage) +"XJ" = ( +/obj/structure/table/borosilicate, +/obj/item/card/id/silver/secretary, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"XK" = ( +/obj/spawner/window/borosillicate/reinforced/full, +/obj/structure/atmospheric_retention_field, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"XL" = ( +/obj/machinery/mecha_part_fabricator{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"XN" = ( +/obj/effect/floor_decal/corner/lightorange/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/civ_bar_public) +"XO" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/mountain) +"XQ" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"XR" = ( +/obj/structure/table/reinforced, +/obj/structure/fans/tiny, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/civ_kitchen) +"XS" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"XU" = ( +/obj/structure/bed/chair/bay/chair/padded, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_observation) +"XW" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"XX" = ( +/obj/effect/overlay/holographic, +/turf/simulated/mineral/icerock, +/area/admin_planet/croatoan/mountain) +"XZ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Ya" = ( +/obj/effect/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_checkpoint) +"Yc" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/window/phoronreinforced{ + dir = 4 + }, +/obj/structure/table/borosilicate, +/obj/item/paper{ + name = "Hemoturgy Artifact"; + info = "Artifact acquired from a sect of the Hemoturgy cultists. Appears to be able to suspend itself over its base via anomalous properties, anyone who goes near it reports hearing a whispering voice in their heads, suggesting something paracasual is at work here. The 'Pylon' as we've come to call it forms a barrier around itself when threatened, one we've yet to be able to repeatedly break. It's also converted the nearby floor tiles into.. Runes? Investigation is ongoing." + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"Yg" = ( +/obj/structure/fake_stairs/north/top{ + connections = 2; + _stair_tag = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"Yh" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"Yi" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/obstruction, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_main_hallway) +"Yj" = ( +/obj/machinery/light{ + dir = 4; + light_range = 12 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_circuitry_lab) +"Ym" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"Yn" = ( +/obj/structure/table/borosilicate, +/obj/machinery/photocopier/faxmachine{ + department = "Head of Security" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"Yp" = ( +/turf/simulated/wall/durasteel, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Yq" = ( +/turf/simulated/wall/r_wall/prepainted/engineering, +/area/admin_planet/croatoan/sci_canister_storage) +"Yr" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Ys" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Yt" = ( +/obj/machinery/camera/north_mount, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/civ_checkpoint) +"Yu" = ( +/obj/machinery/door/airlock/vault{ + name = "Virology Containment Cells"; + req_one_access = list(39) + }, +/obj/structure/atmospheric_retention_field, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_virology_lab) +"Yv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Yw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Yx" = ( +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Yy" = ( +/obj/effect/floor_decal/corner/lightorange/border{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/folder/white{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/folder/white{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/folder/white, +/obj/item/folder/white{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/item/paper{ + info = "Stop forgetting the spaceacillin recipe. Seriously. Master that, THEN learn rezadone or whatever."; + name = "Spaceacillin Recipe" + }, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) +"Yz" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/shield/riot, +/obj/item/shield/riot{ + pixel_x = -3 + }, +/obj/item/shield/riot{ + pixel_x = 4 + }, +/obj/item/shield/riot, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"YB" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"YD" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_holding_cells) +"YE" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"YG" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"YH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"YI" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"YJ" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/sci_upper_checkpoint) +"YK" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/mob/living/simple_mob/mechanical/combat_drone, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_armory) +"YL" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/bluegrid, +/area/admin_planet/croatoan/sci_lower_checkpoint) +"YM" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"YN" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted, +/area/admin_planet/croatoan/civilian/dorms) +"YO" = ( +/turf/simulated/wall/r_wall/prepainted/security, +/area/admin_planet/croatoan/sec_holding_cells) +"YR" = ( +/obj/machinery/optable, +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_morgue) +"YS" = ( +/obj/structure/closet/secure_closet/hos, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"YT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel, +/area/admin_planet/croatoan/civ_hydro) +"YV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"YY" = ( +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"YZ" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_canister_storage) +"Zb" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/old_tile/white, +/area/admin_planet/croatoan/sci_rnd_lab) +"Ze" = ( +/turf/simulated/floor/carpet/bcarpet, +/area/admin_planet/croatoan/civilian/dorms) +"Zf" = ( +/obj/machinery/computer/robotics{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/admin_planet/croatoan/sci_robotics_lab) +"Zg" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/admin_planet/croatoan/med_treatment) +"Zh" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_entrance_hallway) +"Zi" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_entrance) +"Zj" = ( +/obj/structure/table/borosilicate, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/effect/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"Zk" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_containment_cells) +"Zl" = ( +/turf/simulated/floor/outdoors/snow/classp/no_tree, +/area/admin_planet/croatoan/landing_pad) +"Zm" = ( +/obj/machinery/door/airlock{ + id_tag = "dorm1"; + name = "Dormitory Lobby" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"Zn" = ( +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Zo" = ( +/obj/structure/closet/secure_closet/security, +/obj/structure/window/phoronreinforced{ + dir = 8 + }, +/obj/item/holowarrant, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_operations_center) +"Zp" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/simulated/wall/r_wall/prepainted/medical, +/area/admin_planet/croatoan/med_treatment) +"Zq" = ( +/obj/structure/salvageable/console_os, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_control_center) +"Zr" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"Zu" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Zv" = ( +/obj/structure/fake_stairs/north/bottom{ + _stair_tag = 7; + dir = 2 + }, +/turf/simulated/floor/durasteel, +/area/admin_planet/croatoan/high_sec_science_lower_checkpoint) +"Zx" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"Zy" = ( +/obj/structure/railing, +/turf/simulated/floor/tiled/techfloor/grid, +/area/admin_planet/croatoan/med_checkpoint_lower) +"ZA" = ( +/obj/effect/floor_decal/corner/blue/diagonal, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_cmo_office) +"ZC" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/bio_hood/anomaly, +/obj/item/clothing/head/bio_hood/anomaly, +/obj/item/clothing/head/bio_hood/anomaly, +/obj/item/clothing/suit/bio_suit/anomaly, +/obj/item/clothing/suit/bio_suit/anomaly, +/obj/item/clothing/suit/bio_suit/anomaly, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ZD" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sci_cargo_shuttle_pad) +"ZF" = ( +/obj/structure/kitchenspike, +/obj/machinery/light/small/flicker, +/turf/simulated/floor/tiled/freezer/cold, +/area/admin_planet/croatoan/civ_kitchen) +"ZH" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile/blue, +/area/admin_planet/croatoan/med_lobby) +"ZI" = ( +/obj/effect/floor_decal/borderfloorblack{ + alpha = 255; + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/extreme_security_containment_facilities) +"ZK" = ( +/obj/effect/floor_decal/corner_techfloor_grid/diagonal, +/turf/simulated/floor/tiled/dark, +/area/admin_planet/croatoan/med_storage) +"ZL" = ( +/obj/spawner/corpse/solarpeacekeeper, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_equipment_storage) +"ZN" = ( +/obj/machinery/door/airlock{ + id_tag = "dorm1"; + name = "Dormitory" + }, +/turf/unsimulated/wall/planetary/lythios43c{ + desc = "Glacial permafrost, compacted harder than stone."; + icon_state = "icerock-dark"; + icon = 'icons/turf/walls.dmi' + }, +/area/admin_planet/croatoan/civilian/dorms) +"ZO" = ( +/obj/machinery/porta_turret{ + emagged = 1 + }, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/admin_planet/croatoan/sec_armory) +"ZQ" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/shovel/spade, +/obj/item/shovel/spade, +/obj/item/material/minihoe, +/obj/item/material/minihoe, +/obj/item/tool/wirecutters/clippers/trimmers, +/obj/item/tool/wirecutters/clippers/trimmers, +/obj/item/plant_analyzer, +/obj/item/plant_analyzer, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/clothing/gloves/botanic_leather, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/plantbgone, +/turf/simulated/floor/grass, +/area/admin_planet/croatoan/sci_xenoflora_lab) +"ZT" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/cosmos, +/turf/simulated/floor/wood/classp, +/area/admin_planet/croatoan/civilian/dorms) +"ZV" = ( +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/admin_planet/croatoan/med_checkpoint_lower) +"ZW" = ( +/obj/structure/table/borosilicate, +/obj/random/alcohol, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/obj/item/paper{ + name = "Spare ID Card"; + info = "My spare ID card is in the bottom most officer locker, incase any of you need it for an emergency." + }, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/admin_planet/croatoan/sec_hos_office) +"ZY" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted/civilian, +/area/admin_planet/croatoan/civ_kitchen) +"ZZ" = ( +/obj/effect/floor_decal/corner/lightorange/border, +/obj/structure/table/reinforced, +/obj/item/gun/launcher/syringe, +/obj/item/storage/box/syringes{ + pixel_x = -8 + }, +/obj/item/storage/box/syringes{ + pixel_y = 9 + }, +/obj/machinery/light/flicker, +/turf/simulated/floor/tiled/monowhite, +/area/admin_planet/croatoan/med_chemistry) + +(1,1,1) = {" +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +"} +(2,1,1) = {" +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +"} +(3,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(4,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +xD +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(5,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +xD +xD +xD +xD +Zl +Zl +Zl +xD +Zl +Zl +Zl +Zl +Zl +xD +xD +xD +xD +lM +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(6,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(7,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(8,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(9,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +QA +QA +rb +rb +rb +rb +rb +rb +rb +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +Ur +Ur +"} +(10,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +QA +QA +Vn +ON +rO +An +rO +zV +Eg +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +OS +EC +Rq +lx +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +OS +kb +Rq +lx +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +Ur +Ur +"} +(11,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +QA +QA +rb +bT +rO +rO +rO +OV +Eg +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +Rq +CX +Rq +nk +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +Rq +hJ +Rq +nk +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +LZ +ei +Rq +hu +lF +lF +lW +Ur +Ur +"} +(12,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +QA +QA +rb +bT +rO +Hc +gZ +gZ +Ib +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +Rq +mn +mn +Rq +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +Rq +mn +mn +Rq +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +mY +rB +Rq +Rq +lF +lF +lW +Ur +Ur +"} +(13,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +QA +QA +rb +bT +rO +nb +cp +cp +lo +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +pp +FA +FA +Rq +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +Rq +FA +FA +Rq +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +Rq +mn +mn +Rq +lF +lF +lW +Ur +Ur +"} +(14,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +QA +QA +rb +Gt +rO +uG +cp +cp +wS +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +mY +DP +Rq +Rq +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +mY +Pn +Rq +Rq +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +Rq +FA +FA +Rq +lF +lF +lW +Ur +Ur +"} +(15,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +QA +QA +rb +bT +rO +uG +cp +cp +lo +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +LZ +pT +Rq +hu +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +LZ +sF +Rq +hu +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +Rq +Zv +Rq +nk +lF +lF +lW +Ur +Ur +"} +(16,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +Ur +Ur +Ur +Ur +Ur +Ur +QA +QA +rb +bT +rO +Ir +cp +cp +lo +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +OS +wo +Rq +lx +lF +lF +lW +Ur +Ur +"} +(17,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +QA +QA +QA +QA +rb +bT +rO +cb +mh +UG +VE +rb +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +Ur +Ur +"} +(18,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +QA +dE +dE +dE +QX +bT +fy +QX +QX +QX +QX +ur +ur +ur +ur +ur +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lF +lF +lF +lF +lF +lF +lF +lF +lW +Ur +Ur +"} +(19,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +dE +dE +vW +Sn +QX +AV +NY +qw +Ea +ZH +tH +xh +oE +nI +nW +ur +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(20,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +JD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +vW +vW +vW +vW +QX +EO +qw +Ea +Ea +Ea +cY +Vz +rz +sc +Mk +IM +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(21,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +IP +Sn +Sn +Sn +QX +kM +Ea +Ea +Ea +PM +tH +nQ +uy +Su +QO +ur +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(22,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +Sn +vW +Sn +Sn +JY +jX +Ea +Ea +Ea +ZH +tH +nQ +HR +sN +ZZ +ur +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(23,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +dE +vW +vW +vW +vW +QX +jX +Ea +Nq +ju +gp +QX +Vz +zv +oH +SM +ur +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(24,1,1) = {" +Ur +Ur +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +dE +Vh +vW +vW +vW +QX +uD +Im +Wr +mJ +hX +QX +KD +Yy +ug +ay +ur +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +"} +(25,1,1) = {" +Ur +Ur +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +oy +AS +AS +Zl +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +dE +dE +dE +vW +ed +QX +HO +Qj +QX +Vx +QX +cY +LF +ur +ur +ur +ur +sq +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(26,1,1) = {" +Ur +Ur +xD +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +AS +AS +AS +AS +AS +Zl +AS +AS +AS +AS +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +QA +dE +dE +ed +nN +oo +HZ +LW +eG +zn +sZ +Rf +sq +GG +tF +QB +oq +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(27,1,1) = {" +Ur +Ur +xD +xD +xD +xD +xD +Zl +AS +AS +AS +AS +AS +Zl +AS +AS +AS +Zl +AS +AS +AS +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +QA +QA +QA +QA +QA +QA +QA +ed +FL +HO +Zg +FC +dS +FC +bp +VK +UD +zR +ZK +ZK +uu +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(28,1,1) = {" +Ur +Ur +xD +xD +xD +xD +xD +Zl +AS +Zl +Zl +Zl +oy +Zl +AS +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +Ur +Ur +Ur +Ur +Ur +Ur +Ur +QA +mk +CI +Vo +Zg +Jz +dS +Jz +px +Uu +sq +Uy +iR +ZK +tY +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(29,1,1) = {" +Ur +Ur +xD +xD +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +Ur +QA +Zp +dN +mU +xI +XS +ox +Qa +qx +Hm +sq +Uy +Tt +ZK +th +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(30,1,1) = {" +Ur +Ur +xD +xD +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +Ur +QA +ed +op +YY +dX +ra +cR +Fj +px +in +sq +Uy +Lh +ZK +tY +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(31,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +Ur +QA +ed +Sv +YY +dX +lI +cR +kq +px +Jm +sq +iZ +Qw +SW +jp +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(32,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +oy +Zl +AS +Zl +oy +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +Ur +QA +ed +sU +Vq +tU +iJ +oK +WS +Vo +BW +sq +sq +PQ +KL +sq +sq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(33,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +Ur +QA +Pz +Pz +Qt +Rn +Qt +Pz +Pz +Hi +mK +PK +ix +WU +Bj +WH +PK +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(34,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +QA +Pz +BA +cB +ZA +Nx +jc +Pz +si +mK +PK +ix +WU +Bj +WH +PK +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(35,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +Qy +cB +cB +QQ +cB +cB +Cq +Hi +mK +PK +ix +WU +Bj +dn +PK +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(36,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +nc +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +Pz +cB +vm +BJ +Zj +wW +Cq +Hi +mK +PK +ix +WU +Bj +WH +PK +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(37,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +uk +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +Pz +cB +hh +fs +jg +cB +Cq +wH +dg +PK +ix +YI +Ms +is +PK +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(38,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +Pz +cB +cB +cB +cB +cB +Pz +Fw +vX +PK +WU +ta +YR +dr +PK +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(39,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +Pz +Pz +Pz +cV +Pz +Pz +Pz +OA +SG +PK +PK +dh +PK +PK +PK +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(40,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +XO +XO +XO +XO +XO +vR +qO +yQ +cG +qO +vR +Ur +Ur +Ur +Ur +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(41,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +oy +Zl +AS +AS +oy +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +vR +qO +pl +Dj +qO +vR +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(42,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +vR +qO +Fk +LC +qO +vR +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(43,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +vR +bW +pl +Dj +qO +vR +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(44,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +vR +vR +qO +zw +sg +qO +vR +vR +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(45,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +qO +qO +PY +rC +qO +qO +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(46,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +mW +Mp +tB +xx +xx +mW +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(47,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +xx +Ah +PY +kU +kE +xx +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +VY +LV +Sc +Eq +LV +FM +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(48,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +qR +yC +kT +YL +YB +OX +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +Rc +LV +LV +Gv +LV +kt +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(49,1,1) = {" +Ur +Ur +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +AS +AS +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +xD +Zl +Zl +Zl +Zl +Zl +Zl +Zl +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +xx +Lo +kE +kE +mN +Qc +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +Sc +LV +LV +LV +LV +Sc +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(50,1,1) = {" +Ur +Ur +Zl +HF +Zl +HF +HF +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Dn +Jj +Ia +Ia +Jj +Dn +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +Zl +xD +xD +Zl +Zl +Zl +Zl +Zl +Zl +xD +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +qR +Lo +sn +mm +Tq +OX +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +Qo +Qo +ka +Py +Qo +Qo +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(51,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ki +vG +vG +Ki +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +xx +XA +tE +yr +DE +xx +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +cS +hH +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(52,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +at +at +at +bC +bC +at +at +at +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +mW +Pt +bF +xv +gP +mW +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +ZI +hH +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(53,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +at +fK +bC +bC +bC +bC +Dv +at +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +qO +qO +qO +qO +qO +qO +qO +qO +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Qo +ZI +hH +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Qo +Qo +Qo +Qo +Qo +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(54,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Av +ot +sX +bC +bC +bC +ew +at +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vR +vR +vR +vR +vR +vR +vR +vR +vR +vR +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +en +en +Qo +Qo +Qo +en +Qo +Qo +Qo +en +en +en +en +Qo +Qo +Qo +Cd +Db +Qo +Qo +Qo +lW +lW +lW +lW +lW +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +lW +lW +lW +Qo +dA +hZ +dA +dA +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(55,1,1) = {" +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +rM +Yt +Na +bC +bC +bC +ew +rM +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +Qo +dA +Qo +Qo +Qo +dA +Qo +Qo +Qo +Qo +Qo +Qo +kP +ln +dA +dA +WL +hG +Qo +Ur +Ur +Ur +Ur +Ur +Qo +do +WL +sY +WL +WL +HS +Qo +Qo +Qo +Qo +Qo +dA +dA +dA +dA +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(56,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +at +fK +Na +bC +bC +bC +Dv +at +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +Qo +dA +dA +hZ +dA +dA +dA +ka +an +WL +WL +iY +dA +dA +dA +dA +dA +hH +Qo +en +en +en +en +en +Qo +ZI +dA +dA +dA +dA +dA +iQ +WL +sY +LG +qk +dA +dA +dA +IJ +Qo +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(57,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +at +Pr +Na +bC +bC +bC +Pr +at +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +en +en +en +en +Qo +kj +dA +dA +dA +dA +dA +Py +dA +dA +dA +Qo +dA +dA +dA +dA +dA +gU +Qo +en +en +en +en +en +Qo +ZI +dA +dA +dA +dA +hH +Qo +ZI +dA +dA +iQ +dA +dA +dA +dA +Qo +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(58,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Lb +Lb +Lb +Lb +at +Gz +at +at +vG +wO +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +Qo +dA +dA +eI +dA +dA +dA +ka +bv +pM +pM +Jn +dA +dA +dA +dA +dA +hH +Qo +en +en +en +en +en +Qo +ZI +dA +dA +dA +dA +hH +Qo +ZI +dA +dA +iQ +dA +dA +dA +dA +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(59,1,1) = {" +Ur +Ur +QA +QA +QA +he +he +he +he +he +Hn +QA +QA +QA +Lb +Lb +Lb +Lb +Rr +ut +wd +CW +Nz +Nz +Rr +Lb +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +Qo +dA +Qo +Qo +Qo +dA +Qo +Qo +Qo +Qo +Qo +Qo +uA +QV +dA +dA +pM +wq +Qo +en +en +en +en +en +Qo +ZI +dA +dA +dA +dA +dA +iQ +pM +QV +km +qk +dA +dA +dA +IJ +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(60,1,1) = {" +Ur +Ur +QA +QA +he +he +Rp +Rp +he +he +he +cW +QA +QA +Lb +Lb +Lb +eo +Rr +Rr +gY +ej +HK +gY +gY +eo +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +Qo +Qo +Qo +en +Qo +Qo +Qo +en +en +en +en +Qo +Qo +Qo +Cd +Db +Qo +Qo +Qo +en +en +en +en +en +Qo +dk +pM +dA +dA +pM +cJ +Qo +Qo +Qo +Qo +Qo +dA +dA +dA +dA +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(61,1,1) = {" +Ur +Ur +QA +Hn +he +he +he +Rp +gY +gY +gY +Rr +Lb +Lb +Lb +Lb +Lb +Rr +gY +Rr +Rr +ej +HK +gY +gY +gY +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +ZI +zN +Qo +en +en +en +en +en +en +en +Qo +Qo +Qo +Cd +Db +Qo +Qo +Qo +en +en +en +Qo +dA +eI +dA +dA +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(62,1,1) = {" +Ur +Ur +QA +QA +Rp +he +QA +Rp +ml +gY +gY +gY +Rr +Rr +Rr +Rr +Rr +gY +Rr +gY +gY +ej +HK +gY +gY +gY +Lb +Lb +Lb +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +oO +hH +Qo +en +en +en +en +en +en +en +en +en +Qo +ZI +hH +Qo +en +en +en +en +en +Qo +Qo +Qo +Qo +Qo +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(63,1,1) = {" +Ur +Ur +QA +QA +he +QA +QA +Rp +LI +gY +gY +BL +gY +Rr +HK +HK +HK +HK +HK +HK +HK +ej +HK +gY +gY +gY +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +rW +hH +Qo +en +en +en +en +en +en +en +en +en +Qo +ZI +gU +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(64,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +Rp +gt +gY +gY +gY +gY +gY +HK +HK +HK +HK +HK +HK +HK +ej +HK +gY +gY +gY +Lb +gY +BL +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +Qo +Qo +Qo +Qo +en +en +en +en +en +Qo +ZI +hH +Qo +en +en +en +en +en +en +en +en +en +Qo +ZI +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(65,1,1) = {" +Ur +Ur +tr +tr +Dm +tr +tr +tr +jt +LA +tr +tr +tr +tr +Qi +Qi +aH +ml +ml +ml +ml +ej +HK +gY +gY +Ok +gY +gY +gY +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +Qo +Qo +dA +Qo +Qo +Qo +en +en +en +Qo +Qo +Cd +Db +Qo +Qo +Qo +en +en +en +en +en +en +en +Qo +ZI +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(66,1,1) = {" +Ur +Ur +tr +CS +Fz +CE +hR +sL +tw +Fz +sL +hR +Sw +Cj +ax +ax +lp +MC +ma +ml +ml +ej +HK +gY +gY +gY +gY +gY +gY +QA +QA +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +Qo +Qo +hZ +dA +ka +hZ +Qo +Qo +Qo +Qo +Qo +Xh +dA +dA +RQ +WY +Qo +en +en +en +en +en +Qo +Qo +Qo +Cd +Db +Qo +Qo +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(67,1,1) = {" +Ur +Ur +tr +ce +Fz +CU +hR +Fz +Fz +gq +Fz +gq +Sw +Hb +Hb +Dt +wR +PE +ma +ml +ml +ej +HK +ml +vp +Rr +gY +gY +Lb +QA +QA +qp +jW +EA +jW +qp +wE +EA +wE +qp +ZT +EA +ZT +qp +qu +EA +qu +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +Qo +Gj +dA +dA +ka +dA +ka +pa +WL +WL +Qo +yN +dA +dA +dA +LX +Qo +Qo +Qo +Qo +Qo +Qo +Qo +gv +WL +dA +dA +WL +rZ +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(68,1,1) = {" +Ur +Ur +tr +ba +Fz +sf +Wx +Fz +Fz +hR +Fz +hR +Sw +Hb +Hb +wV +GU +dW +di +gY +gY +ej +HK +gY +Hz +Rr +gY +gY +Lb +QA +QA +qp +FU +FU +FU +qp +FU +FU +FU +qp +FU +FU +FU +qp +FU +FU +FU +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +Qo +ol +dA +dA +Py +dA +Py +dA +dA +dA +Py +dA +dA +dA +dA +dA +NR +WL +WL +UN +WL +WL +NR +dA +dA +dA +dA +dA +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(69,1,1) = {" +Ur +Ur +tr +cu +Fz +Wg +hR +Fz +Fz +Fz +Fz +Fz +Sw +Hb +Hb +iD +Hb +to +di +gY +gY +ej +HK +gY +gY +gY +gY +gY +Lb +QA +QA +qp +bR +FU +FU +qp +FU +FU +bR +qp +bR +FU +FU +qp +FU +FU +WC +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +Qo +BF +dA +dA +Py +dA +Py +dA +dA +dA +Py +dA +dA +Sm +dA +dA +CA +pM +pM +QV +pM +pM +CA +dA +dA +dA +dA +dA +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(70,1,1) = {" +Ur +Ur +TT +Fz +Fz +CU +hR +Fz +Fz +hR +Fz +Fz +tr +xw +lZ +vY +Hb +Bp +di +gY +gY +ej +HK +gY +gY +gY +gY +gY +Lb +qp +qp +qp +YN +qp +Fc +qp +Fc +qp +qp +qp +qp +qp +Fc +qp +Fc +qp +qp +qp +qp +qp +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +Qo +kr +dA +dA +ka +dA +ka +iL +pM +pM +Qo +yN +dA +dA +dA +LX +Qo +Qo +Qo +Qo +Qo +Qo +Qo +au +pM +dA +dA +pM +pB +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(71,1,1) = {" +Ur +Ur +tr +PD +Ag +iK +Fz +Fz +hR +gq +Fz +iy +LA +Vj +XN +Sw +Hb +Bp +ma +ml +ml +ej +HK +Rr +Rr +Rr +gY +gY +Lb +qp +RB +EA +FU +qp +FU +EA +FU +Fc +FU +FU +lO +qp +FU +EA +FU +Fc +FU +FU +hj +qp +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +Qo +Qo +eI +dA +ka +eI +Qo +Qo +Qo +Qo +Qo +jm +dA +pM +dA +nx +Qo +en +en +en +en +en +Qo +Qo +Qo +ZI +hH +Qo +Qo +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(72,1,1) = {" +Ur +Ur +tr +Ff +Tk +xz +xz +xz +xz +xz +gS +Fz +yP +XN +XN +gu +Hb +Bp +ma +ml +ml +ej +HK +Rr +gY +Rr +HM +aZ +aZ +qp +Cl +Cl +FU +YN +cT +Sj +as +qp +FU +FU +Ph +YN +cT +Sj +as +qp +FU +FU +Ph +qp +qp +qp +qp +qp +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +Qo +Qo +dA +Qo +Qo +Qo +en +en +en +Qo +Qo +bN +Qo +HY +Qo +Ur +en +en +en +en +en +en +en +Qo +ZI +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(73,1,1) = {" +Ur +Ur +tr +Fz +Mx +OT +gw +gw +gw +ht +SY +Fz +xw +XN +XN +gu +Hb +Bp +ma +ml +gY +ej +HK +Rr +gY +Rr +WR +Us +Us +qp +RB +FU +FU +qp +Xi +Sj +Rv +qp +bR +FU +lO +qp +Xi +Sj +Rv +qp +bR +FU +hj +qp +RE +ja +ja +ja +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +Qo +Qo +Qo +Qo +en +en +en +en +en +Qo +ZI +RQ +hH +Qo +en +en +en +en +en +en +en +en +Qo +rW +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(74,1,1) = {" +Ur +BC +tr +Lc +tr +co +XR +XR +XR +Rh +BI +BI +BI +gu +gu +TT +VT +Bp +ma +gY +gY +ej +HK +Rr +Rr +Rr +Ex +Us +Us +qp +FU +Op +po +qp +qp +Fc +qp +qp +qp +qp +qp +qp +qp +Fc +qp +qp +qp +qp +qp +qp +KH +RE +RE +jI +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +rW +dA +hH +Qo +en +en +en +en +en +en +en +en +Qo +ZI +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(75,1,1) = {" +Ur +BC +kQ +RV +tr +Hf +rK +rK +rK +rK +Rh +yU +yx +vc +Pf +mw +Hb +Bp +ma +ml +ml +ej +HK +HK +HK +HK +Kz +Us +Us +st +Ze +hF +Ze +ZN +Ze +Ze +Ze +bn +Ze +Ze +Ze +Ze +Ze +Ze +bn +wJ +Ze +Ze +Ze +Ec +RE +nY +nY +nY +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +WZ +dA +Yc +Qo +en +en +en +en +en +en +en +en +Qo +aR +Am +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(76,1,1) = {" +Ur +KX +tp +uM +Lc +Se +gf +Vd +lV +rK +xg +Wb +rK +PT +Hb +Hb +Hb +Bp +uQ +ml +ml +ej +HK +HK +HK +HK +Kz +Us +KC +qp +tN +hF +TL +qp +Ze +Ze +Ze +Ze +Ze +Ze +Ze +Ze +Ze +Ze +Ze +Ze +Ze +Ze +zr +qp +qp +qp +qp +qp +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +Qo +Qo +ka +Py +ka +Qo +Qo +Qo +Qo +Qo +Qo +Qo +en +Qo +Qo +ZI +hH +Qo +Qo +en +Qo +Qo +Qo +Qo +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(77,1,1) = {" +Ur +BC +bj +IF +tr +yd +GA +Fm +Qz +rK +xg +Wb +rK +PT +Hb +Dt +wR +Bp +NQ +HK +HK +ob +yg +yg +yg +yg +rI +iI +iI +Zm +JE +aQ +Ze +KM +Ze +Ze +Ze +ic +Ze +EH +Ze +Ze +Ze +Ze +ic +Ze +Ze +Ze +Ze +Ec +rc +MX +Ec +tO +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +hO +wQ +hO +hO +hO +wQ +Qo +Qo +Ns +hZ +ZC +Qo +Qo +Qo +Dw +dA +dA +tu +Qo +Qo +Qo +Kb +tW +tW +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(78,1,1) = {" +Ur +BC +tr +tr +tr +sa +Vy +Gw +JJ +rK +xg +Wb +rK +yy +FO +TU +Tw +Gs +wr +yg +yg +Vm +HK +gY +gY +gY +FI +Us +Us +qp +eF +FU +hd +qp +qp +GH +qp +qp +qp +qp +qp +qp +qp +Fc +qp +qp +qp +qp +YN +qp +KH +RE +qp +qp +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +hO +hO +hO +hO +hO +hO +Qo +Qo +hA +dA +dA +dA +Vr +WL +dA +dA +dA +dA +WL +sy +dA +aK +NF +NF +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(79,1,1) = {" +Ur +Ur +QA +QA +BI +by +Vy +Fm +rK +rK +xg +Wb +Tl +Vt +xU +xU +xU +Je +Ow +ml +ml +ej +HK +gY +Rr +gY +WR +Us +Us +YN +eF +FU +MQ +qp +Xi +Sj +as +qp +bR +FU +NB +qp +Xi +Sj +as +qp +bR +FU +UV +qp +RE +RE +Ec +gW +qp +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Qo +ih +yZ +hO +hO +hO +Xq +Qo +Qo +lT +dA +eY +dA +Qo +if +dA +dA +Ao +dA +dA +Qo +dA +bx +qy +qy +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(80,1,1) = {" +Ur +Ur +QA +QA +BI +zX +Vy +oB +rK +WK +ZY +EW +iS +zF +Sx +rv +NH +NH +Sb +ml +ml +ej +HK +gY +gY +Rr +fA +VV +VV +qp +eF +FU +hd +YN +tn +Sj +Rv +qp +FU +FU +Ph +YN +cT +Sj +Rv +qp +FU +FU +Ph +qp +yJ +yJ +qp +qp +qp +QA +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Qo +Si +yZ +hO +hO +hO +hO +Qo +Qo +RK +dA +dA +dA +Vr +pM +dA +dA +Cw +ux +FN +Pm +ux +wP +Gl +Gl +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(81,1,1) = {" +Ur +Ur +QA +QA +BI +zX +Vk +hy +Aa +hy +cs +ft +YT +QP +YT +Qf +Ln +NH +ml +ml +gY +ej +HK +Rr +Rr +Rr +Lb +Lb +Lb +qp +JP +Re +ey +qp +FU +Xk +FU +Fc +FU +FU +NB +qp +FU +Xk +FU +Fc +FU +FU +UV +qp +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +kN +dA +kW +Qo +Qo +Qo +qi +Cw +Dx +jq +Qo +Qo +Qo +Qn +Ro +Ro +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(82,1,1) = {" +Ur +Ur +QA +QA +BI +BI +dQ +BI +BI +rE +BI +bf +Ax +Ax +Ax +Ax +xm +Oy +ml +ml +gY +ej +HK +Rr +gY +gY +Lb +Lb +Lb +qp +qp +qp +qp +qp +Fc +qp +Fc +qp +qp +qp +qp +qp +Fc +qp +Fc +qp +qp +qp +qp +qp +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +Qo +en +Qo +Qo +vr +hH +Qo +Qo +en +Qo +Qo +Qo +Qo +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(83,1,1) = {" +Ur +Ur +QA +QA +BI +FS +eP +Nv +MK +yW +BI +eN +Vb +Ng +Mz +hY +Ps +Oy +gY +ml +ml +ej +HK +Rr +gY +gY +Rr +Lb +Lb +QA +QA +qp +bR +FU +FU +qp +FU +FU +bR +qp +bR +FU +FU +qp +FU +FU +bR +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Qo +Fp +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(84,1,1) = {" +Ur +Ur +QA +QA +BI +oC +yV +Hw +Bc +ZF +BI +It +Vb +DK +Ft +hY +BU +Oy +gY +nv +ml +ej +HK +Rr +Rr +Rr +Rr +Lb +Lb +QA +QA +qp +FU +FU +FU +qp +FU +FU +FU +qp +FU +FU +FU +qp +FU +FU +FU +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Qo +vr +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +VG +Ur +"} +(85,1,1) = {" +Ur +Ur +QA +QA +BI +Mh +CY +RM +yV +wG +BI +BU +Vb +Ax +Ax +pN +BU +Oy +gY +vp +ml +ej +HK +gY +gY +Rr +Rr +Lb +Lb +QA +QA +qp +UU +Xk +UU +qp +sG +Xk +sG +qp +DQ +Xk +DQ +qp +ii +Xk +ii +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Qo +vr +hH +Qo +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(86,1,1) = {" +Ur +Ur +QA +QA +BI +BI +tP +BI +BI +BI +BI +eN +Ba +cC +Qq +Th +Ps +Oy +gY +ml +ml +ej +HK +gY +gY +Rr +Rr +Rr +Lb +QA +QA +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +qp +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Ad +qS +hp +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(87,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +NH +NH +NH +NH +NH +NH +eL +NH +gY +gY +gY +ej +HK +gY +Rr +Rr +Rr +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Ad +vr +hH +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(88,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Lb +Lb +Lb +Lb +gY +gY +gY +ej +HK +ml +Rr +Rr +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Ad +vr +hH +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(89,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +he +QA +QA +he +he +gY +gY +nC +ml +ml +gY +gY +ej +HK +ml +gY +gY +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Ad +vr +hH +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(90,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +he +he +he +he +he +gY +gY +gY +ml +gY +gY +gY +ej +HK +gY +gY +gY +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Ad +Fp +hH +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(91,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +he +he +he +QA +he +gt +gY +ml +ml +HK +Lz +yg +ty +HK +Rr +gY +gY +ml +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Ad +vr +hH +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(92,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +Hn +he +he +he +he +Pp +ml +Lb +Ak +HK +ej +HK +HK +HK +Rr +gY +gY +ml +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +en +en +en +Ad +vr +hH +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(93,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +he +he +QA +Hn +Lb +Lb +Lb +Mo +yv +bu +SX +nV +lG +tM +kI +Rr +ml +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +en +en +en +en +en +en +hN +hN +hN +Ad +vr +hH +Ad +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(94,1,1) = {" +Ur +Ur +QA +QA +QA +QA +QA +QA +QA +QA +he +he +QA +QA +Lb +Lb +Lb +Iz +jv +ag +yo +go +cH +jv +Iz +Lb +Lb +Lb +Lb +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +Ee +Ee +Ee +Ee +Ee +hN +hN +PN +hN +hN +fu +nK +hN +hN +NC +NC +NC +hN +hN +hN +hN +NC +NC +NC +hN +hN +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(95,1,1) = {" +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ix +Ix +Lb +go +go +nw +QT +lc +RA +go +go +Ix +Ix +Ix +Ix +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ur +Ee +AQ +la +la +IW +Df +mA +Df +Df +Df +Sz +MN +mA +UE +Df +Df +Df +mA +AF +Df +Df +Df +Df +Df +io +hN +hN +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(96,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Pb +Ix +Lb +Ss +wb +EX +ZV +ZV +Bq +WA +Ss +Pb +Ix +Pb +Pb +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +FE +zT +SV +NZ +Es +Es +Es +Es +Es +fM +aj +Es +KK +Es +Es +Es +Es +SP +Es +Es +Es +Es +xb +GV +PN +hN +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(97,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Pb +Ix +Lb +go +Vu +dO +eH +eH +zG +Qm +go +Pb +Ix +Pb +Pb +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +fo +aa +MV +Id +iA +iA +iA +iA +iA +iA +Cg +uq +iA +iA +iA +iA +iA +iA +hN +hN +hN +hN +hN +Ob +GV +hN +hN +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(98,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Pb +Ix +Lb +go +JT +JT +JT +sh +dF +Qm +go +Pb +Ix +Pb +Pb +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +lL +MV +mq +Tu +yA +yY +cv +Tu +rX +nJ +iO +bO +Tu +Gx +Gx +Ic +pG +en +en +en +en +hN +Ob +Bu +hN +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(99,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Pb +Ix +Lb +go +uT +uT +uT +Zy +SD +Qm +go +Pb +Ix +Pb +Pb +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +Ck +XU +Lm +Tu +pH +fB +oQ +TM +SK +nJ +yn +xf +TM +Gx +Wu +eu +pG +en +en +en +en +hN +Ob +FZ +hN +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(100,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Pb +Ix +Lb +LU +Ez +uT +uT +uT +dF +Un +LU +Pb +Ix +Pb +Pb +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +TR +cg +hE +Tu +xq +AE +gh +Tu +os +nJ +iO +Lr +Tu +Gx +ha +ua +pG +en +en +en +en +hN +Ob +GV +hN +en +en +en +en +en +en +vn +vn +vn +vn +vn +vn +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(101,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +go +uN +uT +uT +uT +dF +yl +go +Pb +Ix +Pb +Pb +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +Ck +Wq +cZ +iA +iA +iA +iA +iA +dq +EU +Bv +iB +iA +iA +iA +iA +iA +en +en +Yp +Yp +Yp +hD +dc +Yp +Yp +Yp +Yp +en +en +vn +en +vn +VW +lX +MD +vn +vn +en +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(102,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +go +uT +uT +uT +Zy +xs +Qm +go +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +XE +Ck +Wq +kZ +Tu +vo +Yx +qF +Tu +jR +nJ +iO +oD +Tu +Gx +Zk +Ic +pG +en +en +XK +RS +im +Fy +SR +Kd +sk +Ii +Yp +en +vn +en +en +vn +Xm +pd +kx +vn +en +vn +en +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(103,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +go +uT +tL +tL +MY +dF +Qm +go +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +Ck +Os +Lm +Tu +vo +Ja +Gx +TM +br +nm +iO +DL +TM +Gx +Wu +eu +pG +en +en +XK +KS +vk +tG +SR +KS +vk +EY +Yp +vn +en +en +en +vn +lA +hW +zc +vn +en +en +vn +en +en +en +en +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(104,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +go +hB +Yg +zq +zq +JB +Qm +go +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +lL +Wq +bm +Tu +id +Yx +Bw +Tu +Cx +nJ +iO +Lr +Tu +Gx +Gx +ua +pG +en +en +XK +KS +eD +tG +SR +Zq +vk +Fq +Yp +en +en +en +en +vn +OY +hW +xl +vn +en +en +rN +wL +wL +wL +rN +en +en +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(105,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +Ss +hB +EI +eH +ub +eH +ah +Ss +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +Ck +Wq +cZ +iA +iA +iA +iA +iA +dq +EU +Bv +iB +iA +iA +iA +iA +iA +en +en +XK +KS +vk +tG +SR +Zq +vk +Fq +Yp +en +en +vn +vn +vn +vn +Po +vn +vn +en +rN +rN +aL +ff +Fv +rN +rN +rN +en +en +en +en +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(106,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +go +go +go +go +go +go +go +go +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +aa +Wq +of +Tu +RZ +zb +oY +Tu +jR +nJ +iO +fz +Tu +Gx +Zk +Ic +pG +en +en +XK +pA +SR +tG +SR +SR +SR +nG +Yp +Yp +Yp +vn +gs +hV +hV +hW +At +vn +vn +rN +Qu +Ik +iM +XW +OF +Kg +rN +rN +rN +rN +rN +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(107,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +fo +Ck +Os +Lm +Tu +tg +Wi +Wi +TM +av +nJ +yn +LH +TM +Gx +Wu +eu +pG +en +en +XK +Zq +vk +tG +SR +SR +SR +rH +Tb +bb +UK +hV +hM +hW +hW +Ju +XQ +jb +NO +SN +aX +vt +vt +vt +vt +aN +Lw +Dk +Dk +Dl +wL +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(108,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +Ck +Wq +cP +Tu +lJ +zf +Dg +Tu +UO +nJ +iO +Lr +Tu +Gx +ha +ua +pG +en +en +XK +Zq +vk +Fg +YH +YH +YH +dJ +Ru +IX +ds +rg +WP +CT +CT +CT +Ya +zk +oP +TN +zK +zK +zK +zK +zK +dD +dL +Zi +bc +XB +wL +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(109,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +lL +Wq +Jh +iA +iA +iA +iA +iA +dq +EU +Bv +iB +iA +iA +iA +iA +iA +en +en +XK +pA +SR +SR +SR +SR +SR +Fq +Yp +Yp +Yp +vn +vw +SA +SA +hW +FD +KY +JS +rN +Vp +KE +xA +JW +lv +WG +rN +rN +Vf +XB +wL +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(110,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +Ck +hb +jH +Tu +Oz +yK +wj +Tu +jR +nJ +iO +CB +Tu +Gx +Zk +Ic +pG +en +en +XK +KS +vk +SR +SR +KS +vk +Fq +Yp +lW +lW +vn +vn +KY +Xx +vQ +Xx +KY +LE +rN +rN +sl +OK +xn +rN +rN +rN +rN +SZ +UB +wL +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(111,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +Ck +Os +Lm +Tu +wl +Gx +Gx +TM +Hl +nJ +iO +QS +TM +Gx +Wu +eu +pG +en +en +XK +Zq +vk +SR +SR +KS +vk +EY +Yp +lW +lW +lW +lW +KY +AX +yL +XJ +KY +LE +vn +rN +wL +wL +wL +rN +lW +lW +wL +Vf +XB +wL +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(112,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +fo +Ck +Wq +GF +Tu +uv +rt +Ww +Tu +fl +nJ +iO +Lr +Tu +Gx +ha +ua +pG +en +en +XK +Zq +vk +SR +SR +Zq +vk +Fq +Yp +lW +lW +lW +lW +KY +dt +CT +CT +qW +Qh +vn +lW +lW +lW +lW +lW +lW +lW +wL +mR +Pv +wL +en +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(113,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +Ck +Wq +Jh +iA +iA +iA +iA +iA +dq +EU +Bv +iB +iA +iA +iA +iA +iA +en +en +XK +dw +Ts +SR +SR +Ts +Wc +fd +Yp +lW +lW +lW +lW +KY +rS +wC +qE +KY +hW +vn +lW +lW +lW +lW +lW +lW +rN +rN +QR +nT +rN +rN +en +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(114,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +Ck +Wq +KF +Tu +Mv +cF +yH +Tu +jR +nJ +FQ +oD +Tu +Gx +Zk +Ic +pG +en +en +Yp +Yp +Yp +OQ +QH +Yp +Yp +Yp +Yp +lW +lW +lW +lW +KY +KY +KY +KY +KY +vn +vn +lW +lW +lW +lW +lW +rN +rN +rN +vy +XB +rN +rN +rN +en +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(115,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +lL +Os +Lm +Tu +bq +QJ +QJ +TM +Ep +nJ +yn +bi +TM +Gx +qh +eu +pG +en +en +en +en +hN +zg +GV +hN +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +rN +rN +rN +rw +YM +vt +Pu +rN +rN +rN +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(116,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +lK +xO +xO +iV +iV +iV +iV +iV +iV +iV +iV +iV +iV +iV +xO +iV +iV +iV +iV +xO +xO +lK +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +Ck +Wq +hE +Tu +KU +xZ +OG +Tu +vj +nJ +iO +Lr +Tu +Gx +ha +ua +pG +en +en +en +en +hN +zg +GV +hN +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +rN +rN +NA +ck +vt +vt +Uz +fG +rN +rN +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(117,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +xO +xO +xO +xO +xO +iV +iV +iV +iV +xO +xO +xO +xO +xO +xO +iV +iV +xO +xO +xO +xO +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +XE +Ck +Wq +Id +iA +iA +iA +iA +iA +WN +mP +jn +uK +iA +iA +iA +iA +iA +en +en +en +en +hN +zg +GV +hN +hN +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +rN +rN +OO +yB +SI +SI +YG +rn +rN +rN +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(118,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +Ee +Ee +aa +Wq +pv +iA +iA +FJ +iA +iA +iA +Cg +uq +iA +iA +iA +iA +iA +iA +hN +hN +hN +hN +hN +zg +GV +PN +hN +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +rN +rN +rN +cl +Yr +Yr +cn +rN +rN +rN +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(119,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +iV +xO +xO +xO +xO +lK +Da +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +js +lK +xO +xO +xO +xO +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +FE +Wq +Wq +Uc +Df +Df +Df +Df +Df +MN +Sz +Df +Df +Df +Df +Df +Df +AF +Df +Df +Df +Df +Bi +Bu +hN +hN +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +rN +rN +rN +xA +xA +rN +rN +rN +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(120,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +iV +xO +xO +xO +xO +Da +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +IN +xO +xO +xO +xO +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +Ee +xj +IO +fb +gE +mL +mL +fm +mL +mL +MN +Sz +mL +mL +fm +mL +mL +mL +GE +mL +fm +mL +mL +mL +tv +hN +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ye +hx +aF +aF +hx +ye +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(121,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +xO +xO +xO +xO +Da +Ld +Ld +aw +Ld +Ld +Ld +Ld +Ld +Ld +cX +Ld +Ld +js +xO +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +La +Cz +La +La +La +La +La +La +La +Nt +uj +NS +NS +NS +hv +NS +NS +NS +NS +NS +hN +hN +eM +eM +hN +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +hx +vt +vt +vt +vt +hx +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(122,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +xO +xO +xO +Da +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +zd +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +qJ +ik +Vw +Bb +ik +wy +hf +WT +La +oM +Ux +NS +dT +fQ +nu +Js +Kp +VR +pj +NS +QA +XO +vW +vW +XO +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +hx +vt +vt +vt +MG +hx +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(123,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +iV +xO +xO +Gh +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +kn +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +mC +Jx +DA +ws +ni +La +La +La +La +NW +Ux +NS +Pc +EM +GJ +Js +Bs +vH +BO +NS +QA +XO +vW +vW +XO +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +hx +vt +vt +vt +vt +hx +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(124,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +iV +xO +xO +IK +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Ld +Di +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +Jl +ik +QE +ik +CN +Nr +eV +nZ +La +oM +Ux +hv +jz +zt +nZ +hv +nZ +TX +Nj +NS +QA +XO +vW +az +XO +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ye +hx +hx +hx +hx +ye +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(125,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +iV +xO +xO +xO +IK +Ld +Ld +Ko +Ld +Ld +Ld +Ld +Ld +Ld +xX +Ld +Ld +nt +xO +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +qT +KN +me +ik +BT +ph +wp +wp +bd +wp +Ch +Yu +wp +zU +nZ +gm +nZ +nZ +hk +NS +QA +XO +az +az +XO +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(126,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +xO +xO +xO +xO +xO +xO +IK +Ld +Ld +Ld +fx +Ld +Ld +Ld +Ld +Ld +Ld +nt +xO +xO +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +Jl +ik +QE +ik +ik +Nr +XC +nZ +La +oM +sx +hv +Lg +nZ +nZ +hv +Wn +nZ +nZ +NS +QA +QA +vW +vW +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(127,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +xO +xO +xO +xO +xO +xO +lK +xL +mz +mz +mz +Ld +Ld +mz +mz +mz +nt +lK +xO +xO +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +mC +Jx +qg +ws +ik +La +La +La +La +oM +sx +NS +nZ +pW +GJ +Js +nZ +zu +nZ +NS +QA +QA +QA +ao +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(128,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +xO +Gh +kn +xO +xO +xO +xO +xO +xO +xO +xO +iV +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +qJ +ik +Ks +Bb +ik +wy +hf +WT +La +TY +mH +NS +rT +vM +nu +Js +nZ +kY +nZ +NS +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(129,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +xO +iV +xO +iV +xO +xO +xO +xO +xO +xO +lK +Gh +kn +lK +xO +xO +xO +xO +xO +xO +xO +xO +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +La +Xt +yj +La +La +La +La +La +La +La +La +La +NS +NS +NS +NS +NS +NS +NS +NS +NS +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(130,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +iV +iV +iV +iV +iV +iV +iV +iV +xO +xO +xO +Gh +kn +xO +xO +xO +lg +lg +lg +lg +xO +lK +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(131,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Um +Um +Qb +Kq +Um +Um +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(132,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Um +gJ +Ld +Ld +UC +Um +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(133,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Um +Um +JH +Ld +Ld +Lt +Um +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(134,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +QA +Um +oN +oR +YV +Zx +GT +Um +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(135,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Um +Um +lw +Ld +ME +Me +Um +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(136,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +Um +Kq +Kc +Um +Um +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(137,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +ld +bE +Um +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(138,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +ld +bE +Um +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(139,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +tD +ep +Um +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(140,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +YO +YO +YO +YO +YO +YO +YO +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +ld +bE +Um +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(141,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +YO +kR +MF +YO +MF +kR +YO +lW +lW +lW +lW +Lx +Lx +Lx +Lx +Lx +Lx +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +ld +bE +Um +lW +lW +lW +lW +lW +lW +lW +lW +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(142,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +YO +eQ +eQ +FG +eQ +eQ +YO +lW +lW +lW +Lx +Lx +dR +Zo +Zo +Pg +Lx +Lx +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +ld +bE +Um +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(143,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +um +um +um +lW +lW +lW +lW +lW +lW +lW +YO +eQ +xu +YO +xu +eQ +YO +lW +lW +Lx +Lx +xC +EV +Lj +Lj +vq +dx +Lx +Lx +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Um +ke +Vs +Um +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(144,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +um +um +pf +um +um +um +rJ +rJ +YO +YO +YO +AN +Dr +LK +YO +LK +pE +YO +YO +Lx +Lx +Mg +LB +jx +KB +na +jx +ch +nX +Tz +Lx +lW +lW +lW +lW +lW +lW +HH +HH +HH +HH +HH +HH +HH +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(145,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +um +ym +PX +vh +EP +um +hS +OL +YO +wi +pJ +lY +lY +pJ +jM +pJ +pJ +pJ +pJ +IB +Ly +OP +OP +OP +jx +na +jx +jx +Tc +pq +Lx +lW +lW +lW +lW +lW +lW +HH +Qp +RP +qc +qc +oX +HH +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Yq +Yq +Yq +Yq +Yq +Yq +Yq +Yq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(146,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +um +GO +VO +oe +ZL +Ji +cf +lu +JC +yi +YD +uJ +uJ +uJ +Te +Te +Te +Te +Te +Lx +zO +dp +dp +jx +KB +na +jx +jx +jD +qD +Lx +lW +lW +lW +lW +lW +lW +HH +HH +HH +tS +qc +AT +HH +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Yq +mD +dM +Cp +nA +xe +MS +Yq +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(147,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +lW +lW +rF +rF +rF +rF +rF +rF +rF +Rt +ND +ne +mS +Ql +Ds +tf +sJ +YO +Mq +vC +Ym +UX +UX +Ed +Ym +Ym +Ym +Ip +dZ +UI +Pd +dK +dK +Yv +FR +jx +jx +Tc +WW +Lx +lW +lW +lW +lW +lW +lW +HH +Qp +RP +EG +qc +xW +HH +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Yq +FP +Aj +Li +Nw +iX +eg +Yq +XH +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(148,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +lW +rF +rF +Rt +jC +Rt +Le +Rt +Rt +Rt +xp +hI +hI +hI +Ji +fj +ie +YO +YO +YO +QZ +vI +LK +YO +LK +Mc +YO +YO +Lx +Lx +FB +Nm +vq +KB +uH +Yv +Yv +RI +Lx +Lx +lW +lW +lW +lW +lW +lW +HH +HH +HH +qq +mg +mg +jT +yG +Qv +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +su +kh +kh +kh +kh +kh +kh +MP +Yq +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(149,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +rF +rF +Rt +uL +qe +MI +sR +fp +af +Rt +cr +ZL +uR +lz +um +fj +ie +rJ +rJ +QA +YO +eQ +xu +YO +xu +eQ +YO +QA +QA +Lx +Lx +cK +DC +KB +zi +jx +KZ +Lx +Lx +lW +lW +lW +lW +lW +lW +lW +HH +Qp +RP +qc +qc +xW +HH +PR +IS +Ku +lW +HJ +HJ +HJ +HJ +HJ +HJ +HJ +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Yq +YZ +TC +TC +nr +ap +eZ +Is +Yq +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(150,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +Rt +Rt +Rt +QU +yu +MM +MM +MM +cm +Rt +um +hi +um +um +um +Wv +ie +rJ +rJ +QA +YO +eQ +eQ +FG +fT +eQ +YO +QA +QA +QA +Lx +Lx +BR +KB +zi +Xg +Lx +Lx +lW +lW +lW +lW +lW +lW +lW +lW +HH +HH +HH +Ri +uS +uS +SL +PR +IS +Ku +lW +HJ +TG +Zf +hz +Jo +bK +HJ +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Yq +fD +PI +yt +ap +sz +UQ +wm +Yq +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(151,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +Rt +gb +MM +MM +yu +tI +sS +MM +MM +TF +YK +oI +Xp +oI +TQ +fj +ie +zS +rJ +QA +YO +SF +oU +YO +oU +SF +YO +QA +QA +QA +lW +Lx +Lx +ak +IH +Lx +Lx +lW +lW +lW +lW +lW +lW +lW +lW +lW +HH +Qp +RP +qc +qc +ys +HH +PR +IS +Ku +lW +HJ +kH +RO +FX +Ma +bY +HJ +lW +lW +lW +lW +lW +lW +Ur +lW +lW +Yq +Yq +Yq +pP +Xa +Yq +Yq +Yq +Yq +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(152,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +Rt +Uf +MM +MM +ig +gH +Yz +Pl +Pl +Qg +nU +kv +kv +kv +Ny +uC +EQ +rJ +rJ +QA +YO +YO +YO +YO +YO +YO +YO +QA +QA +QA +lW +lW +kw +ny +Bf +kw +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +HH +HH +HH +HH +HH +HH +HH +PR +IS +Ku +lW +HJ +yE +mt +Fa +CL +ad +HJ +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +Yq +zp +VQ +Yq +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(153,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +Rt +Rt +Rt +HG +MM +MM +MM +MM +cm +Rt +Dp +Dp +Dp +Dp +Dp +Wv +ie +pc +pc +pc +pc +pc +pc +pc +pc +QA +QA +QA +QA +QA +QA +kw +kw +wA +Ys +kw +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +GZ +PR +IS +Ku +lW +HJ +XL +mt +Fa +CL +wv +HJ +vv +vv +vv +vv +vv +lW +Ur +lW +lW +lW +lW +Yq +el +ae +Yq +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(154,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +rF +rF +Rt +Rt +pL +Oo +xR +le +gn +Rt +Dp +CM +QF +kc +Dp +fj +ie +pc +tK +yM +rR +ZW +Yn +RD +pc +pc +QA +QA +QA +QA +QA +kw +kw +wA +Ys +kw +lW +lW +lW +lW +lW +kw +kw +kw +kw +kw +kw +lW +lW +lW +lW +lW +GZ +PR +Fb +Ku +Ku +HJ +fH +Ma +Kl +Ma +HP +QG +ko +Jk +ko +ko +vv +lW +Ur +lW +lW +lW +lW +Yq +el +Xa +Yq +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(155,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +lW +rF +rF +Rt +QC +Rt +ZO +Rt +Rt +Rt +ID +Bm +Bm +Bm +Dp +fj +ie +wN +pS +Or +pS +pS +pS +pS +OR +pc +QA +QA +QA +QA +QA +kw +bo +wA +Ys +kw +kw +kw +kw +kw +kw +kw +Eh +fh +qo +ww +kw +kw +kw +kw +kw +kw +GZ +FW +eU +Ku +bB +HJ +HJ +VX +va +VX +HJ +HJ +Eu +Eu +xV +xV +vv +vv +vv +vv +vv +vv +vv +gk +iG +VQ +vv +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(156,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +lW +lW +rF +rF +rF +rF +rF +rF +rF +Rt +Tm +Bm +gc +ST +Bz +Xw +EQ +wN +pS +Or +pS +ti +NI +pS +pc +pc +QA +QA +QA +QA +QA +kw +kw +gK +Yw +jN +jN +Zh +jN +jN +kp +Ua +nS +nS +nS +Yw +jN +jN +In +zA +Rz +tX +EL +RN +ee +qZ +ee +RN +RN +RN +Ul +cO +cO +nR +da +da +DW +DW +bZ +DW +DW +jj +DW +Jy +DW +fP +yc +Et +vv +AU +AU +AU +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(157,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +Dp +ID +Bm +Bm +oa +Dp +fj +Xe +Ot +qb +Jc +wz +Uo +WF +pw +IE +pc +QA +QA +QA +QA +QA +kw +kw +Jf +OB +Iw +Iw +Iw +Iw +Iw +TK +qf +xk +xk +xk +rm +Iw +Iw +or +ES +tJ +du +gd +Io +pF +hU +ex +Io +lm +Io +OW +hl +hl +Ab +Tf +kK +kK +Oc +LO +oZ +kK +OC +kK +kK +kK +WX +Ej +aA +vv +az +vW +rj +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(158,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Dp +Dp +lH +Ek +OJ +Dp +uV +am +wN +pS +pS +pS +BH +sQ +pS +pc +pc +QA +QA +QA +QA +QA +lW +kw +kw +EK +kw +kw +kw +hq +kw +kw +kw +PL +Bo +Bo +NX +kw +kw +kw +UJ +kw +kw +GZ +FW +eU +Ku +Ku +nP +nP +so +lh +so +nP +nP +Eu +sB +xV +ai +vv +vv +vv +vv +vv +vv +vv +vv +ER +LD +aO +vW +vW +vW +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(159,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Dp +Dp +Dp +Dp +Dp +fC +mV +wN +pS +pS +pS +pS +pS +pS +OR +pc +QA +QA +QA +QA +QA +lW +zx +oL +vW +vW +Ar +kw +nS +kw +Kf +kw +zs +qK +zs +kw +kw +lW +lW +lW +lW +lW +GZ +PR +IS +Ku +lW +nP +Wh +Zb +hK +uP +aV +lN +Ue +Wf +Ue +ij +vv +Ur +lW +lW +lW +lW +AU +Tp +ER +LD +HI +vW +vW +vW +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(160,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +Jb +PO +lF +YS +Cc +RL +Wl +vf +Fi +pc +pc +QA +QA +QA +QA +QA +lW +zx +rj +zM +vW +SO +kw +KR +kw +kw +kw +AZ +ri +RX +kw +lW +lW +lW +lW +lW +lW +GZ +PR +IS +Ku +lW +nP +AA +oS +Nb +sA +fR +nP +vv +vv +vv +vv +vv +Ur +lW +lW +lW +lW +AU +vv +iq +kD +vv +vW +vW +vW +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(161,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +fa +AC +Yi +fa +pc +pc +pc +pc +pc +pc +pc +QA +QA +QA +QA +QA +lW +lW +zx +jL +vW +oL +oL +kw +nS +nS +Uv +rG +nS +nS +xF +kw +ze +ze +ze +ze +ze +ze +ze +PR +IS +Ku +lW +nP +UT +JN +nq +sA +Bx +nP +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +vv +iq +Xl +vv +qt +vW +az +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(162,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +lF +lF +yh +Xv +lF +lF +lF +lF +QA +QA +QA +QA +QA +QA +QA +QA +QA +lW +lW +zx +zx +zx +zx +zx +kw +kw +kw +kw +kw +sb +lt +ro +kw +ze +vd +eA +Ci +BN +Zn +ze +PR +IS +Ku +lW +nP +Nu +GY +Eo +rP +fr +nP +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +vv +iq +kD +vv +AU +AU +AU +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(163,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +lF +lF +Sd +DT +lF +lF +lF +lF +QA +QA +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +kw +kw +kw +kw +kw +ze +ZQ +vV +gX +nn +tQ +fi +PR +IS +Ku +lW +nP +nP +IR +jZ +Va +cQ +nP +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +vv +iq +kD +vv +QA +QA +QA +QA +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(164,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +cU +Rj +pe +EE +HD +DH +lF +lF +QA +QA +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ze +eA +BB +cA +kd +RU +Nk +PR +IS +Ku +lW +lW +nP +nP +nP +nP +nP +nP +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +vv +iq +kD +vv +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(165,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +kB +NN +Ga +Kw +HA +ql +lF +lF +QA +QA +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ze +tz +eX +vB +En +Ij +Cr +yG +QI +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vv +vv +RJ +Kh +vv +vv +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(166,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +kB +Iy +Ga +Kw +jJ +ql +lF +lF +QA +QA +QA +QA +QA +QA +QA +QA +QA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ze +eA +BB +cA +kd +OE +Nk +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vv +Wp +kk +yF +Wp +vv +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +"} +(167,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +Ll +wT +bH +Be +bD +RG +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ze +JM +yS +Zr +YE +Ne +ze +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vv +hL +kk +yF +Pq +vv +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(168,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +lF +BS +Sd +DT +sE +lF +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ze +vd +eA +aB +fU +Iq +ze +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vv +On +kk +yF +je +vv +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(169,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +lF +lF +nF +Np +lF +lF +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +XX +lW +lW +lW +lW +lW +lW +lW +lW +ze +ze +ze +ze +ze +ze +ze +PR +IS +Ku +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vv +VP +kk +yF +Pq +vv +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(170,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ez +ez +lF +lF +Wy +Gm +lF +lF +ez +ez +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lS +rL +we +lS +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +vv +Wp +kk +yF +Wp +vv +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(171,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +lF +lF +Fx +WV +lF +lF +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lS +lS +lS +Wj +CR +lS +lS +lS +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +Gd +PH +AW +Gd +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(172,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +lF +fa +nz +LY +fa +lF +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lS +GN +Wj +Wj +CR +BG +un +lS +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +St +St +AB +St +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(173,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +eE +Hu +Mf +XZ +qj +nj +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lS +Ge +Yh +Wj +et +MT +Ge +lS +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +St +St +AB +St +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(174,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +Ga +Ka +Ga +Ga +wx +Ga +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lS +Mj +Yj +Pw +TI +QK +lQ +lS +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +Em +Fs +YJ +JR +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(175,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +Ga +Ka +vF +uZ +wx +Ga +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lS +lS +lS +lS +lS +lS +lS +lS +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +Ky +St +St +Fu +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(176,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lF +lF +JI +jy +Zu +Zu +UH +Fr +lF +lF +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +Ky +JV +Ap +Fu +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(177,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +XO +XO +lF +fa +Ga +Ga +fa +lF +XO +XO +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +Jw +RY +RY +St +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(178,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +XO +XO +KT +US +LQ +LQ +US +KT +XO +XO +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +sV +sV +sV +sV +sV +sV +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(179,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +US +Ga +Ga +Ga +Ga +US +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(180,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +ga +Ga +Ga +Ga +Ga +US +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(181,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +US +Ga +Ga +Ga +Ga +US +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(182,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +KT +US +US +US +US +KT +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(183,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(184,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(185,1,1) = {" +Ur +Ur +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(186,1,1) = {" +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(187,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(188,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(189,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(190,1,1) = {" +Ur +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +Ur +Ur +"} +(191,1,1) = {" +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +"} +(192,1,1) = {" +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +Ur +"} diff --git a/maps/sectors/gaia_192/levels/gaia_192.dmm b/maps/sectors/gaia_192/levels/gaia_192.dmm index 03319d06578..6e597c2621e 100644 --- a/maps/sectors/gaia_192/levels/gaia_192.dmm +++ b/maps/sectors/gaia_192/levels/gaia_192.dmm @@ -4340,6 +4340,13 @@ "xy" = ( /turf/simulated/wall/wood, /area/class_m/inside/cabin) +"xz" = ( +/obj/effect/floor_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/vending/food, +/turf/simulated/floor/tiled/monotile/classm, +/area/class_m/inside/main) "xB" = ( /obj/structure/railing{ dir = 8 @@ -27235,7 +27242,7 @@ lC Hw pI DU -iG +xz iG zO pI diff --git a/maps/tether/levels/surface3.dmm b/maps/tether/levels/surface3.dmm index 68da32a3376..4e18771f12c 100644 --- a/maps/tether/levels/surface3.dmm +++ b/maps/tether/levels/surface3.dmm @@ -4804,10 +4804,10 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/tourbus/general) "cAr" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/structure/disposalpipe/trunk{ + dir = 8 }, +/obj/machinery/disposal, /turf/simulated/floor/wood, /area/crew_quarters/bar) "cAv" = ( @@ -7837,25 +7837,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora_storage) -"evU" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/glass, -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "kitchen"; - name = "Kitchen Shutters" - }, -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) "ewg" = ( /obj/machinery/photocopier, /turf/simulated/floor/wood, @@ -17250,9 +17231,6 @@ /obj/effect/floor_decal/corner/red/border, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/upperhall) -"kfH" = ( -/turf/simulated/floor/lino, -/area/tether/surfacebase/entertainment/stage) "khE" = ( /turf/simulated/wall/r_wall/prepainted/command, /area/tether/surfacebase/surface_three_hall) @@ -19533,11 +19511,9 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/robotics) "lGM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/rnd/robotics) +/obj/machinery/vending/mre, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "lGR" = ( /obj/machinery/door/airlock{ name = "Unit 3" @@ -19970,7 +19946,6 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "lUU" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/computer/arcade/orion_trail{ dir = 4 }, @@ -32783,8 +32758,6 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "tjn" = ( @@ -36426,6 +36399,12 @@ dir = 1 }, /obj/structure/table/reinforced, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "viJ" = ( @@ -64389,7 +64368,7 @@ yaQ uBR qGF pHO -lGM +qyH bLy enf vnI @@ -69418,7 +69397,7 @@ oRD bnI uzF vzE -kfH +suh gYg ihh qEy @@ -71935,8 +71914,8 @@ ekY mHw ekY ajq -evU -ltI +lqw +lGM bnz eEc eEc diff --git a/maps/triumph/levels/deck2.dmm b/maps/triumph/levels/deck2.dmm index 2fbe8a22150..be1a3c30623 100644 --- a/maps/triumph/levels/deck2.dmm +++ b/maps/triumph/levels/deck2.dmm @@ -14963,10 +14963,10 @@ /turf/simulated/floor/plating, /area/maintenance/cargo) "Tw" = ( -/obj/structure/flora/pottedplant/orientaltree, /obj/machinery/computer/security/telescreen{ pixel_x = 32 }, +/obj/machinery/vending/mre, /turf/simulated/floor/wood, /area/crew_quarters/bar) "Ty" = ( diff --git a/tgui/docs/migration-to-v4-from-v3.md b/tgui/docs/migration-to-v4-from-v3.md deleted file mode 100644 index 6f047a6cc7e..00000000000 --- a/tgui/docs/migration-to-v4-from-v3.md +++ /dev/null @@ -1,91 +0,0 @@ -# tgui Migration Guide to v4 from v3 - -## The Easy Part - -- Copy and replace the following files in bulk: - - `code/__DEFINES/tgui.dm` - - `code/controllers/subsystem/tgui.dm` - - `code/modules/tgui/**` - - `tgui/**` - - Except: `tgui/packages/tgui/interfaces` - - Manually resolve conflicts for files that were touched outside the - `interfaces` folder. -- Copy the updated `log_tgui` proc from: - - `code/__HELPERS/_logging.dm` - -If you have a dual nano/tgui setup, then make sure to rename all ui procs -on `/datum`, such as `ui_interact` to `tgui_interact`, to avoid namespace -clashing. Usual stuff. - -## Update `ui_interact` proc signatures - -First of all, tgui states need to move from `ui_interact` to `ui_state`. - -One way of doing it, is to just cherry pick those procs from upstream. - -If you want to search and replace manually, search for `state = GLOB`, and -extract those things into `ui_state` procs like so: - -```dm -.../ui_state(mob/user) - return GLOB.default_state -``` - -Then reduce `ui_interact` until you finish with something like this: - -```dm -.../ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "FooBar", "Foo Bar UI", 600, 400) - ui.open() -``` - -## Update asset delivery code - -Remove all asset code that injects stylesheets by modifying tgui's `basehtml`. -You no longer need to do that. - -Find all occurences of `asset.send(user)` in `ui_interact`, and refactor those -snippets to the following proc: - -```dm -.../ui_assets(mob/user) - return list( - get_asset_datum(/datum/asset/simple/foobar), - ) -``` - -## Check `ui_act` for new bugs - -Code behind `ui_act` was recently refactored to use JSON-encoded payloads -instead of just strings. Since it can now carry numbers and other complex -types, you should check that the code is type agnostic and does not break -due to an assumption that every parameter is a string. - -One of such offenders is the personal crafting interface, where it needlessly -compares parameters to `""` and `"0"`. You can now replace this code with -simple assignments, because an empty category will now be properly `null` -instead of an empty string. - -## Backend data changes - -Interfaces that relied on `config.window.id`, must now use -`window.__windowId__`, which is a global constant unique for the page -the script is running on (so you can be sure it never changes). - -In case of `ByondUi`, this parameter can be completely omitted, because -parent will always default to the current window id. - -Affected interfaces: - -- `CameraConsole` -- Any interface that uses the `ByondUi` component - ---- - -That's all folks! - -There is a lot of stuff that was refactored under the hood, but normal UI -stuff wouldn't and shouldn't touch it, so you should be good with just -going through the checklist above. diff --git a/tgui/packages/common/keyboard.ts b/tgui/packages/common/keyboard.ts new file mode 100644 index 00000000000..6ee810623f1 --- /dev/null +++ b/tgui/packages/common/keyboard.ts @@ -0,0 +1,354 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 silicons *// + +/** + * IE lacks these defines so we have to package it ourselves + * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/location + * this is event.location on a KeyboardEvent + */ +export enum IEKeyboardEventLocation { + Standard = 0, + Left = 1, + Right = 2, + Numpad = 3, +} + +export enum IEKeyboardEventKeycode { + BACKSPACE = 8, + TAB = 9, + ENTER = 13, + SHIFT = 16, + CTRL = 17, + ALT = 18, + PAUSE = 19, + CAPSLOCK = 20, + ESCAPE = 27, + SPACE = 32, + PAGEUP = 33, + PAGEDOWN = 34, + END = 35, + HOME = 36, + LEFT = 37, + UP = 38, + RIGHT = 39, + DOWN = 40, + INSERT = 45, + DELETE = 46, + KEY_0 = 48, + KEY_1 = 49, + KEY_2 = 50, + KEY_3 = 51, + KEY_4 = 52, + KEY_5 = 53, + KEY_6 = 54, + KEY_7 = 55, + KEY_8 = 56, + KEY_9 = 57, + KEY_A = 65, + KEY_B = 66, + KEY_C = 67, + KEY_D = 68, + KEY_E = 69, + KEY_F = 70, + KEY_G = 71, + KEY_H = 72, + KEY_I = 73, + KEY_J = 74, + KEY_K = 75, + KEY_L = 76, + KEY_M = 77, + KEY_N = 78, + KEY_O = 79, + KEY_P = 80, + KEY_Q = 81, + KEY_R = 82, + KEY_S = 83, + KEY_T = 84, + KEY_U = 85, + KEY_V = 86, + KEY_W = 87, + KEY_X = 88, + KEY_Y = 89, + KEY_Z = 90, + F1 = 112, + F2 = 113, + F3 = 114, + F4 = 115, + F5 = 116, + F6 = 117, + F7 = 118, + F8 = 119, + F9 = 120, + F10 = 121, + F11 = 122, + F12 = 123, + SEMICOLON = 186, + EQUAL = 187, + COMMA = 188, + MINUS = 189, + PERIOD = 190, + SLASH = 191, + LEFT_BRACKET = 219, + BACKSLASH = 220, + RIGHT_BRACKET = 221, + QUOTE = 222, +} + +export const IEKeyboardEventKeycodeToBYOND = [ + "", // [0] + "", // [1] + "", // [2] + "", // [3] + "", // [4] + "", // [5] + "", // [6] + "", // [7] + "Back", // [8] + "Tab", // [9] + "", // [10] + "", // [11] + "", // [12] + "Return", // [13] + "", // [14] + "", // [15] + "Shift", // [16] + "Ctrl", // [17] + "Alt", // [18] + "", // [19] + "Capslock", // [20] + "", // [21] + "", // [22] + "", // [23] + "", // [24] + "", // [25] + "", // [26] + "Escape", // [27] + "", // [28] + "", // [29] + "", // [30] + "", // [31] + "Space", // [32] + "Northeast", // [33] + "Southeast", // [34] + "Southwest", // [35] + "Northwest", // [36] + "West", // [37] + "North", // [38] + "East", // [39] + "South", // [40] + "", // [41] + "", // [42] + "", // [43] + "", // [44] - PRINTSCREEN + "Insert", // [45] + "Delete", // [46] + "", // [47] + "0", // [48] + "1", // [49] + "2", // [50] + "3", // [51] + "4", // [52] + "5", // [53] + "6", // [54] + "7", // [55] + "8", // [56] + "9", // [57] + "", // [58] + "", // [59] + "", // [60] + "", // [61] + "", // [62] + "", // [63] + "", // [64] + "A", // [65] + "B", // [66] + "C", // [67] + "D", // [68] + "E", // [69] + "F", // [70] + "G", // [71] + "H", // [72] + "I", // [73] + "J", // [74] + "K", // [75] + "L", // [76] + "M", // [77] + "N", // [78] + "O", // [79] + "P", // [80] + "Q", // [81] + "R", // [82] + "S", // [83] + "T", // [84] + "U", // [85] + "V", // [86] + "W", // [87] + "X", // [88] + "Y", // [89] + "Z", // [90] + "", // [91] Windows Key (Windows) or Command Key (Mac) + "", // [92] + "", // [93] + "", // [94] + "", // [95] + "", // [96] + "", // [97] + "", // [98] + "", // [99] + "", // [100] + "", // [101] + "", // [102] + "", // [103] + "", // [104] + "", // [105] + "", // [106] + "", // [107] + "", // [108] + "", // [109] + "", // [110] + "", // [111] + "F1", // [112] + "F2", // [113] + "F3", // [114] + "F4", // [115] + "F5", // [116] + "F6", // [117] + "F7", // [118] + "F8", // [119] + "F9", // [120] + "F10", // [121] + "F11", // [122] + "F12", // [123] + "", // [124] + "", // [125] + "", // [126] + "", // [127] + "", // [128] + "", // [129] + "", // [130] + "", // [131] + "", // [132] + "", // [133] + "", // [134] + "", // [135] + "", // [136] + "", // [137] + "", // [138] + "", // [139] + "", // [140] + "", // [141] + "", // [142] + "", // [143] + "", // [144] + "", // [145] + "", // [146] + "", // [147] + "", // [148] + "", // [149] + "", // [150] + "", // [151] + "", // [152] + "", // [153] + "", // [154] + "", // [155] + "", // [156] + "", // [157] + "", // [158] + "", // [159] + "", // [160] + "", // [161] + "", // [162] + "", // [163] + "", // [164] + "", // [165] + "", // [166] + "", // [167] + "", // [168] + "", // [169] + "", // [170] + "", // [171] + "", // [172] + "", // [173] + "", // [174] + "", // [175] + "", // [176] + "", // [177] + "", // [178] + "", // [179] + "", // [180] + "", // [181] + "", // [182] + "", // [183] + "", // [184] + "", // [185] + ";", // [186] + "=", // [187] + ",", // [188] + "-", // [189] + ".", // [190] + "/", // [191] + "", // [192] + "", // [193] + "", // [194] + "", // [195] + "", // [196] + "", // [197] + "", // [198] + "", // [199] + "", // [200] + "", // [201] + "", // [202] + "", // [203] + "", // [204] + "", // [205] + "", // [206] + "", // [207] + "", // [208] + "", // [209] + "", // [210] + "", // [211] + "", // [212] + "", // [213] + "", // [214] + "", // [215] + "", // [216] + "", // [217] + "", // [218] + "[", // [219] + "\\", // [220] + "]", // [221] + "'", // [222] + "", // [223] + "", // [224] + "", // [225] + "", // [226] + "", // [227] + "", // [228] + "", // [229] + "", // [230] + "", // [231] + "", // [232] + "", // [233] + "", // [234] + "", // [235] + "", // [236] + "", // [237] + "", // [238] + "", // [239] + "", // [240] + "", // [241] + "", // [242] + "", // [243] + "", // [244] + "", // [245] + "", // [246] + "", // [247] + "", // [248] + "", // [249] + "", // [250] + "", // [251] + "", // [252] + "", // [253] + "", // [254] + "", // [255] +]; diff --git a/tgui/packages/tgui-panel/themes.js b/tgui/packages/tgui-panel/themes.js index 8306ecb39a6..fbb2172fed0 100644 --- a/tgui/packages/tgui-panel/themes.js +++ b/tgui/packages/tgui-panel/themes.js @@ -38,7 +38,9 @@ export const setClientTheme = name => { // the race against statbrowser init. let stat_theme = name === "light"? "light" : "dark"; clearTimeout(setClientThemeTimer); - Byond.command(`.output statbrowser:set_theme ${stat_theme}`); + setTimeout(() => { + Byond.command(`.output statbrowser:set_theme ${stat_theme}`); + }, 500); setClientThemeTimer = setTimeout(() => { Byond.command(`.output statbrowser:set_theme ${stat_theme}`); }, 5000); diff --git a/tgui/packages/tgui-polyfill/10-misc.js b/tgui/packages/tgui-polyfill/10-misc.js index 5a1849e1355..4a72f8482fb 100644 --- a/tgui/packages/tgui-polyfill/10-misc.js +++ b/tgui/packages/tgui-polyfill/10-misc.js @@ -53,6 +53,20 @@ }; } + if(!Array.prototype['at']) { + Array.prototype.at = function(index) { + if((index >= this.length) || (index < (-this.length))) { + return undefined; + } + if(index >= 0){ + return this[index]; + } + else { + return this[this.length + index]; + } + } + } + // Inferno needs Int32Array, and it is not covered by core-js. if (!window.Int32Array) { window.Int32Array = Array; diff --git a/tgui/packages/tgui/backend.ts b/tgui/packages/tgui/backend.ts index 83a76d0f89b..a9048379bd0 100644 --- a/tgui/packages/tgui/backend.ts +++ b/tgui/packages/tgui/backend.ts @@ -60,7 +60,6 @@ export const backendReducer = (state = initialState, action) => { ...payload.static, ...payload.data, }; - // Merge module data // Merge modules const modules = { ...state.modules, @@ -118,11 +117,10 @@ export const backendReducer = (state = initialState, action) => { }; for (let id of Object.keys(payload)) { const data = payload[id]; - const merged = { - ...modules[data], + modules[id] = { + ...modules[id], ...data, }; - modules[id] = merged; } // Return new state return { @@ -188,6 +186,7 @@ export const backendMiddleware = store => { if (type === 'modules') { store.dispatch(backendModuleData(payload)); + return; } if (type === 'suspend') { @@ -276,13 +275,20 @@ export const backendMiddleware = store => { }; }; -export type actFunctionType = (action: string, payload?: object) => void; +export type actFunctionType = (action: string, payload?: object, route_id?: string | null) => void; /** * Sends an action to `ui_act` on `src_object` that this tgui window * is associated with. + * + * todo: overhaul module system + * + * @params + * * action - action string + * * payload - payload object; this is the list/params byond-side + * * route_id - route via ui_route() with given id instead of ui_act() */ -export const sendAct: actFunctionType = (action: string, payload: object = {}) => { +export const sendAct: actFunctionType = (action: string, payload: object = {}, route_id?: string | null) => { // Validate that payload is an object const isObject = typeof payload === 'object' && payload !== null @@ -291,7 +297,10 @@ export const sendAct: actFunctionType = (action: string, payload: object = {}) = logger.error(`Payload for act() must be an object, got this:`, payload); return; } - Byond.sendMessage('act/' + action, payload); + if (route_id) { + payload['$m_id'] = route_id; + } + Byond.sendMessage((route_id? 'mod/' : 'act/') + action, payload); }; type BackendContext = { @@ -317,6 +326,7 @@ type BackendContext = { }, modules: Record, shared: Record, + computeCache: Record, suspending: boolean, suspended: boolean, }; @@ -394,6 +404,31 @@ export const useLocalState = ( ]; }; +/** + * Gets a computation, that should be cached. + * Used to do initial pre-processing of data. + * + * todo: rethink this when we go to react or otherwise rework tgui, this is shitcode-y + * todo: this is a bad idea. you know why? + * todo: yeah funny thing this persists across window reloads due to store/state + * todo: being global. fuck. + * todo: we need like a proper hook that doesn't persist. + */ +// export const useComputedOnce = ( +// context: any, key: string, valueClosure: () => T +// ): T => { +// const { store } = context; +// const state = selectBackend(store.getState()); +// if (state.computeCache?.[key]) { +// return state.computeCache[key]; +// } +// state.computeCache = { +// ...state.computeCache, +// }; +// state.computeCache[key] = valueClosure(); +// return state.computeCache[key]; +// }; + /** * Allocates state on Redux store, and **shares** it with other clients * in the game. @@ -511,3 +546,11 @@ export const constructModuleAct = (id: string, ref: string): actFunctionType => Byond.sendMessage('mod/' + action, sent); }; }; + +/** + * Extracts module data from context + */ +export const getModuleData = (context, id: string): TData => { + let backend = useBackend(context); + return backend.modules[id]; +}; diff --git a/tgui/packages/tgui/components/Box.tsx b/tgui/packages/tgui/components/Box.tsx index f5503e5482f..b1fa29e8499 100644 --- a/tgui/packages/tgui/components/Box.tsx +++ b/tgui/packages/tgui/components/Box.tsx @@ -1,4 +1,8 @@ /** + * Basic CSS box. + * This is the basic component used for formatting/whatnot. + * You should use this instead of
unless you're doing very low level work. + * * @file * @copyright 2020 Aleksej Komarov * @license MIT @@ -10,53 +14,72 @@ import { ChildFlags, VNodeFlags } from 'inferno-vnode-flags'; import { CSS_COLORS } from '../constants'; import { ComponentProps } from './Component'; +// a css value for a numerical unit, +// or a number to translate into units automatically, +export type BoxUnit = string | number; +// a box unit, or none to have the box automatically sized +// boolean is included so the pattern of '!!truthy && 5' can work; boolean values are simply ignored +export type BoxUnitProp = BoxUnit | null | undefined | boolean; +// a box string prop, so BoxUnit but without number +export type BoxStringProp = string | null | undefined | boolean; + +/** + * Box props basically have all the HTML / CSS props, thanks to being the base + * definition of, well, everything given this is a wrapper class. + * + * Things that use Box often can/should override/'augment' some of these, + * but all of this is here so typescript knows what is/isn't valid. + */ export type BoxProps = ComponentProps & { [key: string]: any; - as?: string; + as?: keyof InfernoHTML; className?: string | undefined; position?: string | BooleanLike; overflow?: string | BooleanLike; overflowX?: string | BooleanLike; overflowY?: string | BooleanLike; - top?: string | BooleanLike; - bottom?: string | BooleanLike; - left?: string | BooleanLike; - right?: string | BooleanLike; - width?: string | BooleanLike; - minWidth?: string | BooleanLike; - maxWidth?: string | BooleanLike; - height?: string | BooleanLike; - minHeight?: string | BooleanLike; - maxHeight?: string | BooleanLike; - fontSize?: string | BooleanLike; - fontFamily?: string; - lineHeight?: string | BooleanLike; + top?: BoxUnitProp; + bottom?: BoxUnitProp; + left?: BoxUnitProp; + right?: BoxUnitProp; + width?: BoxUnitProp; + minWidth?: BoxUnitProp; + maxWidth?: BoxUnitProp; + height?: BoxUnitProp; + minHeight?: BoxUnitProp; + maxHeight?: BoxUnitProp; + fontSize?: BoxUnitProp; + fontFamily?: string | null; + lineHeight?: BoxUnitProp; opacity?: number; - textAlign?: string | BooleanLike; - verticalAlign?: string | BooleanLike; + textAlign?: BoxStringProp; + verticalAlign?: string; inline?: BooleanLike; bold?: BooleanLike; italic?: BooleanLike; nowrap?: BooleanLike; preserveWhitespace?: BooleanLike; - m?: string | BooleanLike; - mx?: string | BooleanLike; - my?: string | BooleanLike; - mt?: string | BooleanLike; - mb?: string | BooleanLike; - ml?: string | BooleanLike; - mr?: string | BooleanLike; - p?: string | BooleanLike; - px?: string | BooleanLike; - py?: string | BooleanLike; - pt?: string | BooleanLike; - pb?: string | BooleanLike; - pl?: string | BooleanLike; - pr?: string | BooleanLike; - color?: string | BooleanLike; - textColor?: string | BooleanLike; - backgroundColor?: string | BooleanLike; + m?: BoxUnitProp; + mx?: BoxUnitProp; + my?: BoxUnitProp; + mt?: BoxUnitProp; + mb?: BoxUnitProp; + ml?: BoxUnitProp; + mr?: BoxUnitProp; + p?: BoxUnitProp; + px?: BoxUnitProp; + py?: BoxUnitProp; + pt?: BoxUnitProp; + pb?: BoxUnitProp; + pl?: BoxUnitProp; + pr?: BoxUnitProp; + color?: BoxStringProp; + textColor?: BoxStringProp; + backgroundColor?: BoxStringProp; fillPositionedParent?: BooleanLike; + //* baseline DOM / InfernoNode properties start *// + // anything put in here is directly injected into the element as a style + // this overrides provided style variables style?: CSSProperties; } diff --git a/tgui/packages/tgui/components/LabeledList.tsx b/tgui/packages/tgui/components/LabeledList.tsx index 4f47eab4334..e232e24090c 100644 --- a/tgui/packages/tgui/components/LabeledList.tsx +++ b/tgui/packages/tgui/components/LabeledList.tsx @@ -6,7 +6,7 @@ import { BooleanLike, classes, pureComponentHooks } from 'common/react'; import { InfernoNode } from 'inferno'; -import { Box, unit } from './Box'; +import { Box, BoxStringProp, unit } from './Box'; import { ComponentProps } from './Component'; import { Divider } from './Divider'; @@ -28,9 +28,9 @@ LabeledList.defaultHooks = pureComponentHooks; type LabeledListItemProps = { readonly className?: string | BooleanLike; readonly label?: string | InfernoNode | BooleanLike; - readonly labelColor?: string | BooleanLike; - readonly color?: string | BooleanLike; - readonly textAlign?: string | BooleanLike; + readonly labelColor?: BoxStringProp; + readonly color?: BoxStringProp; + readonly textAlign?: BoxStringProp; readonly buttons?: InfernoNode, /** @deprecated */ readonly content?: any, @@ -77,7 +77,7 @@ const LabeledListItem = (props: LabeledListItemProps) => { colSpan={buttons ? undefined : 2} verticalAlign={verticalAlign}> {content} - {children} + {children || null} {buttons && ( diff --git a/tgui/packages/tgui/components/Table.js b/tgui/packages/tgui/components/Table.tsx similarity index 68% rename from tgui/packages/tgui/components/Table.js rename to tgui/packages/tgui/components/Table.tsx index 545e26f5934..092a230bdfa 100644 --- a/tgui/packages/tgui/components/Table.js +++ b/tgui/packages/tgui/components/Table.tsx @@ -4,10 +4,14 @@ * @license MIT */ -import { classes, pureComponentHooks } from 'common/react'; -import { computeBoxClassName, computeBoxProps } from './Box'; +import { BooleanLike, classes, pureComponentHooks } from 'common/react'; +import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; -export const Table = props => { +interface TableProps extends BoxProps { + readonly collapsing?: BooleanLike; +} + +export const Table = (props: TableProps) => { const { className, collapsing, @@ -32,7 +36,11 @@ export const Table = props => { Table.defaultHooks = pureComponentHooks; -export const TableRow = props => { +interface TableRowProps extends BoxProps { + readonly header?: BooleanLike; +} + +export const TableRow = (props: TableRowProps) => { const { className, header, @@ -52,7 +60,12 @@ export const TableRow = props => { TableRow.defaultHooks = pureComponentHooks; -export const TableCell = props => { +interface TableCellProps extends BoxProps { + readonly header?: BooleanLike; + readonly collapsing?: BooleanLike; +} + +export const TableCell = (props: TableCellProps) => { const { className, collapsing, diff --git a/tgui/packages/tgui/components/index.js b/tgui/packages/tgui/components/index.js index 121d2bfa4e2..1cdb24ba67a 100644 --- a/tgui/packages/tgui/components/index.js +++ b/tgui/packages/tgui/components/index.js @@ -24,7 +24,7 @@ export { Grid } from './Grid'; export { Icon } from './Icon'; export { InfinitePlane } from './InfinitePlane'; export { Input } from './Input'; -export { KeyListener } from './KeyListener'; +export { KeyListener } from './keyboard/KeyListener'; export { Knob } from './Knob'; export { LabeledControls } from './LabeledControls'; export { LabeledList } from './LabeledList'; diff --git a/tgui/packages/tgui/components/KeyListener.tsx b/tgui/packages/tgui/components/keyboard/KeyListener.tsx similarity index 88% rename from tgui/packages/tgui/components/KeyListener.tsx rename to tgui/packages/tgui/components/keyboard/KeyListener.tsx index 46b52765365..b55b96f5891 100644 --- a/tgui/packages/tgui/components/KeyListener.tsx +++ b/tgui/packages/tgui/components/keyboard/KeyListener.tsx @@ -1,6 +1,6 @@ import { Component } from "inferno"; -import { KeyEvent } from "../events"; -import { listenForKeyEvents } from "../hotkeys"; +import { KeyEvent } from "../../events"; +import { listenForKeyEvents } from "../../hotkeys"; type KeyListenerProps = Partial<{ onKey: (key: KeyEvent) => void, diff --git a/tgui/packages/tgui/index.js b/tgui/packages/tgui/index.js index c57319e9cd1..99ed89910a5 100644 --- a/tgui/packages/tgui/index.js +++ b/tgui/packages/tgui/index.js @@ -64,10 +64,7 @@ const setupApp = () => { if (module.hot) { setupHotReloading(); module.hot.accept([ - './components', - './debug', - './layouts', - './routes', + '.', ], () => { renderApp(); }); diff --git a/tgui/packages/tgui/interfaces/GamePreferences/GamePreferenceEntry.tsx b/tgui/packages/tgui/interfaces/GamePreferences/GamePreferenceEntry.tsx new file mode 100644 index 00000000000..e3997657388 --- /dev/null +++ b/tgui/packages/tgui/interfaces/GamePreferences/GamePreferenceEntry.tsx @@ -0,0 +1,180 @@ +/** + * @file + * @license MIT + */ +import { BooleanLike } from "common/react"; +import { InfernoNode } from "inferno"; +import { Button, Collapsible, ColorBox, Dropdown, Input, NumberInput, Section, Stack, Tooltip } from "../../components"; +import { ByondAtomColor, ByondColorString, ColorPicker } from "../common/Color"; + +interface GamePreferenceEntryProps { + readonly schema: GamePreferenceEntrySchema; + readonly value: any; + readonly setValue: (v: any) => void; +} + +export type GamePreferenceEntrySchema = + PreferenceNumberEntrySchema | + PreferenceStringEntrySchema | + PreferenceToggleEntrySchema | + PreferenceDropdownEntrySchema | + PreferenceSimpleColorEntrySchema; + +interface PreferenceBaseEntrySchema { + key: string; + category: string; + subcategory: string; + name: string; + desc: string; + priority: number; + defaultValue: any; +} + +interface PreferenceNumberEntrySchema extends PreferenceBaseEntrySchema { + type: "number"; + minValue: number | null; + maxValue: number | null; + roundTo: number | null; + defaultValue: number; +} + +interface PreferenceStringEntrySchema extends PreferenceBaseEntrySchema { + type: "string"; + minLength: number; + maxLength: number; + defaultValue: string; +} + +interface PreferenceToggleEntrySchema extends PreferenceBaseEntrySchema { + type: "toggle"; + enabledName: string; + disabledName: string; + defaultValue: BooleanLike; +} + +interface PreferenceDropdownEntrySchema extends PreferenceBaseEntrySchema { + type: "dropdown"; + options: string[]; + defaultValue: string; +} + +interface PreferenceSimpleColorEntrySchema extends PreferenceBaseEntrySchema { + type: "simpleColor"; + defaultValue: ByondAtomColor; +} + +export const GamePreferenceEntry = (props: GamePreferenceEntryProps, context) => { + let innerContent: InfernoNode = null; + switch (props.schema.type) { + case 'number': + innerContent = ( + + ); + break; + case 'string': + innerContent = ( + + ); + break; + case 'toggle': + innerContent = ( + + ); + break; + case 'dropdown': + innerContent = ( + + ); + break; + case 'simpleColor': + innerContent = ( + + ); + break; + } + return ( + + + + + {props.schema.name} + + + + + ); +}; + +const computeGamePreferenceCategoryCache = (entries: GamePreferenceEntrySchema[]): Record => { + let computed: Record = {}; + entries.forEach((entry) => { + if (!computed[entry.category]) { + computed[entry.category] = []; + } + if (!computed[entry.category].includes(entry.subcategory)) { + computed[entry.category].push(entry.subcategory); + } + }); + Object.values(computed).forEach((arr) => arr.sort((a, b) => a.localeCompare(b))); + return computed; +}; + +export const GamePreferences = (props, context) => { + const { act, data } = useBackend(context); + + let categoryCache = computeGamePreferenceCategoryCache(data.entries); + let [activeCategory, setActiveCategory] = useLocalState(context, "prefsCategoryActive", Object.keys(categoryCache)[0]); + let [activeMiddleware, setActiveMiddleware] = useLocalState(context, "prefsMiddlewareActive", null); + + // sigh + // this is shitcode + // todo: refactor game prefs ui again + const [activeCapture, setActiveCapture] = useLocalState(context, 'activeKeyCapture', null); + + return ( + + {/* inject active capture vnode */} + {activeCapture} + + + + + + + + + + + + + + + ); +}; + +const GamePreferencesBody = (props, context) => { + const { act, data } = useBackend(context); + + let categoryCache = computeGamePreferenceCategoryCache(data.entries); + let [activeCategory, setActiveCategory] = useLocalState(context, "prefsCategoryActive", Object.keys(categoryCache)[0]); + let [activeMiddleware, setActiveMiddleware] = useLocalState(context, "prefsMiddlewareActive", null); + + // todo: this is so fucking awful bros please don't make the same mistake on character setup. + if (activeMiddleware && (typeof activeMiddleware === 'string')) { + let middlewareData = getModuleData(context, activeMiddleware); + switch (activeMiddleware) { + case 'keybindings': + return ( + act('addBind', { + ...key, + replaceKey: replacing, + keybind: id, + }, activeMiddleware)} + removeBind={(id, key) => act('removeBind', { keybind: id, key: key }, activeMiddleware)} + setHotkeyMode={(on) => act('hotkeys', { value: on }, activeMiddleware)} + {...middlewareData as GamePreferenceKeybindMiddlware} /> + ); + case 'toggles': + return ( + act('toggle', { key: key, val: val }, 'toggles')} + {...middlewareData as GamePreferenceTogglesMiddleware} /> + ); + } + } + + return ( +
+ + {categoryCache[activeCategory].map((subcat) => ( + +

{subcat}

+
+ + {data.entries.filter((e) => e.category === activeCategory && e.subcategory === subcat).map((entry) => ( + + act('set', { key: entry.key, value: val })} /> + + ))} + +
+ ))} +
+
+ ); +}; + +const GamePreferenceHeader = (props, context) => { + return ( + + + + + + + ); +}; + +const GamePreferenceFooter = (props: { + readonly activeCategory: string, + readonly activeMiddleware: string | null +}, context) => { + const { act, data } = useBackend(context); + return ( +
+ + + + act('save')} + content="Save" /> + + + + + act('discard')} + content="Discard" /> + + + + + + act('reset', props.activeCategory? { category: props.activeCategory } : {}, props.activeMiddleware)} + content="Reset to Default" /> + + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/PaiInterface.tsx b/tgui/packages/tgui/interfaces/PaiInterface.tsx index f31e5a51348..504151dcbf7 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface.tsx @@ -441,7 +441,7 @@ const RecordRow = (props) => { return ( {filteredRecord?.map((value) => { - return {value}; + return {value}; })} ); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ambient_occlusion.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ambient_occlusion.tsx deleted file mode 100644 index 4884c07377f..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ambient_occlusion.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { CheckboxInput, FeatureToggle } from "../base"; - -export const ambientocclusion: FeatureToggle = { - name: "Enable ambient occlusion", - category: "GAMEPLAY", - description: "Enable ambient occlusion, light shadows around characters.", - component: CheckboxInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/auto_fit_viewport.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/auto_fit_viewport.tsx deleted file mode 100644 index 5339de43d15..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/auto_fit_viewport.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { CheckboxInput, FeatureToggle } from "../base"; - -export const auto_fit_viewport: FeatureToggle = { - name: "Auto fit viewport", - category: "UI", - component: CheckboxInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx deleted file mode 100644 index 706b1787705..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { multiline } from "common/string"; -import { CheckboxInput, FeatureToggle } from "../base"; - -export const darkened_flash: FeatureToggle = { - name: "Enable darkened flashes", - category: "GAMEPLAY", - description: multiline` - When toggled, being flashed will show a dark screen rather than a - bright one. - `, - component: CheckboxInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fov_darkness.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fov_darkness.tsx deleted file mode 100644 index 1315cc88fba..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fov_darkness.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { Feature, FeatureNumberInput } from "../base"; - -export const fov_darkness: Feature = { - name: "Field of view darkness", - category: "GAMEPLAY", - description: "The density of darkness of field of vision cones you may have by wearing restrictive eye cover.", - component: FeatureNumberInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fps.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fps.tsx deleted file mode 100644 index 55c091a9714..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fps.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Dropdown, NumberInput, Stack } from "../../../../../components"; -import { Feature, FeatureNumericData, FeatureValueProps } from "../base"; - -type FpsServerData = FeatureNumericData & { - recommended_fps: number; -} - -const FpsInput = ( - props: FeatureValueProps -) => { - const { handleSetValue, serverData } = props; - - let recommened = `Recommended`; - if (serverData) { - recommened += ` (${serverData.recommended_fps})`; - } - - return ( - - - { - if (value === recommened) { - handleSetValue(-1); - } else { - handleSetValue(serverData?.recommended_fps || 60); - } - }} - width="100%" - options={[ - recommened, - "Custom", - ]} - /> - - - - {serverData && props.value !== -1 && ( { - props.handleSetValue(value); - }} - minValue={1} - maxValue={serverData.maximum} - value={props.value} - />)} - - - ); -}; - -export const clientfps: Feature = { - name: "FPS", - category: "GAMEPLAY", - component: FpsInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/hotkeys.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/hotkeys.tsx deleted file mode 100644 index 73cc3c9de16..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/hotkeys.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { CheckboxInputInverse, FeatureToggle } from "../base"; - -export const hotkeys: FeatureToggle = { - name: "Classic hotkeys", - category: "GAMEPLAY", - description: "When enabled, will revert to the legacy hotkeys, using the input bar rather than popups.", - component: CheckboxInputInverse, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx deleted file mode 100644 index 3acfad00445..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { multiline } from "common/string"; -import { Feature, FeatureDropdownInput } from "../base"; - -export const preferred_map: Feature = { - name: "Preferred map", - category: "GAMEPLAY", - description: multiline` - During map rotation, prefer this map be chosen. - This does not affect the map vote, only random rotation when a vote - is not held. - `, - component: FeatureDropdownInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/runechat.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/runechat.tsx deleted file mode 100644 index d85a814d8ad..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/runechat.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { CheckboxInput, FeatureNumberInput, FeatureNumeric, FeatureToggle } from "../base"; - -export const chat_on_map: FeatureToggle = { - name: "Enable Runechat", - category: "RUNECHAT", - description: "Chat messages will show above heads.", - component: CheckboxInput, -}; - -export const see_chat_non_mob: FeatureToggle = { - name: "Enable Runechat on objects", - category: "RUNECHAT", - description: "Chat messages will show above objects when they speak.", - component: CheckboxInput, -}; - -export const see_rc_emotes: FeatureToggle = { - name: "Enable Runechat emotes", - category: "RUNECHAT", - description: "Emotes will show above heads.", - component: CheckboxInput, -}; - -export const max_chat_length: FeatureNumeric = { - name: "Max chat length", - category: "RUNECHAT", - description: "The maximum length a Runechat message will show as.", - component: FeatureNumberInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/scaling_method.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/scaling_method.tsx deleted file mode 100644 index 114cc80ef5e..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/scaling_method.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createDropdownInput, Feature } from "../base"; - -export const scaling_method: Feature = { - name: "Scaling method", - category: "UI", - component: createDropdownInput({ - blur: "Bilinear", - distort: "Nearest Neighbor", - normal: "Point Sampling", - }), -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx deleted file mode 100644 index b397388aa3d..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { multiline } from "common/string"; -import { FeatureColorInput, Feature, FeatureChoiced, FeatureDropdownInput } from "../base"; - -export const screentip_color: Feature = { - name: "Screentips color", - category: "UI", - description: multiline` - The color of screen tips, the text you see when hovering over something. - `, - component: FeatureColorInput, -}; - -export const screentip_pref: FeatureChoiced = { - name: "Enable screentips", - category: "UI", - description: multiline` - Enables screen tips, the text you see when hovering over something. - When set to "Only with tips", will only show when there is more information - than just the name, such as what right-clicking it does. - `, - component: FeatureDropdownInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tgui.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tgui.tsx deleted file mode 100644 index 837d00f770c..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tgui.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { CheckboxInput, FeatureToggle } from '../base'; - -export const tgui_fancy: FeatureToggle = { - name: 'Enable fancy TGUI', - category: 'UI', - description: 'Makes TGUI windows look better, at the cost of compatibility.', - component: CheckboxInput, -}; - -export const tgui_input: FeatureToggle = { - name: 'Input: Enable TGUI', - category: 'UI', - description: 'Renders input boxes in TGUI.', - component: CheckboxInput, -}; - -export const tgui_input_large: FeatureToggle = { - name: 'Input: Larger buttons', - category: 'UI', - description: 'Makes TGUI buttons less traditional, more functional.', - component: CheckboxInput, -}; - -export const tgui_input_swapped: FeatureToggle = { - name: 'Input: Swap Submit/Cancel buttons', - category: 'UI', - description: 'Makes TGUI buttons less traditional, more functional.', - component: CheckboxInput, -}; - -export const tgui_lock: FeatureToggle = { - name: 'Lock TGUI to main monitor', - category: 'UI', - description: 'Locks TGUI windows to your main monitor.', - component: CheckboxInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx deleted file mode 100644 index d3147a01a1f..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { multiline } from "common/string"; -import { CheckboxInput, Feature, FeatureNumberInput, FeatureToggle } from "../base"; - -export const enable_tips: FeatureToggle = { - name: "Enable tooltips", - category: "TOOLTIPS", - description: multiline` - Do you want to see tooltips when hovering over items? - `, - component: CheckboxInput, -}; - -export const tip_delay: Feature = { - name: "Tooltip delay (in milliseconds)", - category: "TOOLTIPS", - description: multiline` - How long should it take to see a tooltip when hovering over items? - `, - component: FeatureNumberInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx deleted file mode 100644 index 83a315bccac..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { classes } from "common/react"; -import { FeatureChoiced, FeatureChoicedServerData, FeatureValueProps, sortChoices } from "../base"; -import { Box, Dropdown, Stack } from "../../../../../components"; - -const UIStyleInput = ( - props: FeatureValueProps -) => { - const { serverData, value } = props; - if (!serverData) { - return null; - } - - const { icons } = serverData; - - if (!icons) { - return (ui_style had no icons!); - } - - const choices = Object.fromEntries( - Object.entries(icons) - .map(([name, icon]) => { - return [name, ( - - - - - - - {name} - - - )]; - }) - ); - - return ( - { - return { - displayText: label, - value: dataValue, - }; - })} - /> - ); -}; - -export const UI_style: FeatureChoiced = { - name: "UI Style", - category: "UI", - component: UIStyleInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx deleted file mode 100644 index e4d7595775e..00000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { CheckboxInput, FeatureToggle } from "../base"; - -export const widescreenpref: FeatureToggle = { - name: "Enable widescreen", - category: "UI", - component: CheckboxInput, -}; diff --git a/tgui/packages/tgui/interfaces/items/Crayon.tsx b/tgui/packages/tgui/interfaces/items/Crayon.tsx index e27c2e92c1c..546da97699b 100644 --- a/tgui/packages/tgui/interfaces/items/Crayon.tsx +++ b/tgui/packages/tgui/interfaces/items/Crayon.tsx @@ -1,3 +1,7 @@ +/** + * @file + * @license MIT + */ import { BooleanLike } from "common/react"; import { useBackend, useLocalState } from "../../backend"; import { Box, Button, Dimmer, Flex, Icon, LabeledList, Modal, NumberInput, Section, Stack } from "../../components"; diff --git a/tgui/packages/tgui/interfaces/machines/AirAlarm.tsx b/tgui/packages/tgui/interfaces/machines/AirAlarm.tsx index 72c589f610f..aa96ab63b5c 100644 --- a/tgui/packages/tgui/interfaces/machines/AirAlarm.tsx +++ b/tgui/packages/tgui/interfaces/machines/AirAlarm.tsx @@ -252,7 +252,7 @@ const AirAlarmControlHome = (props, context) => { icon={atmos_alarm ? 'exclamation-triangle' : 'exclamation'} - color={atmos_alarm && 'caution'} + color={!!atmos_alarm && 'caution'} content="Area Atmosphere Alarm" onClick={() => act(atmos_alarm ? 'reset' : 'alarm')} /> diff --git a/tgui/packages/tgui/interfaces/AgeVerifyMenu.tsx b/tgui/packages/tgui/interfaces/ui/UIAgeVerifyMenu.tsx similarity index 94% rename from tgui/packages/tgui/interfaces/AgeVerifyMenu.tsx rename to tgui/packages/tgui/interfaces/ui/UIAgeVerifyMenu.tsx index f8e3aa8310d..90961bbdc70 100644 --- a/tgui/packages/tgui/interfaces/AgeVerifyMenu.tsx +++ b/tgui/packages/tgui/interfaces/ui/UIAgeVerifyMenu.tsx @@ -1,6 +1,6 @@ -import { useBackend, useLocalState } from "../backend"; -import { Button, NoticeBox, Section, Stack } from "../components"; -import { Window } from "../layouts"; +import { useBackend, useLocalState } from "../../backend"; +import { Button, NoticeBox, Section, Stack } from "../../components"; +import { Window } from "../../layouts"; const MONTH_DAYS_LOOKUP: number[] = [ 31, @@ -62,7 +62,7 @@ const validDays = (month: number, year: number) => { return ret; }; -export const AgeVerifyMenu = (props, context) => { +export const UIAgeVerifyMenu = (props, context) => { let { data, act } = useBackend(context); let [month, setMonth] = useLocalState(context, "month", null); let [day, setDay] = useLocalState(context, "day", null); diff --git a/tgui/packages/tgui/interfaces/AbductorConsole.js b/tgui/packages/tgui/interfaces/unused/AbductorConsole.js similarity index 95% rename from tgui/packages/tgui/interfaces/AbductorConsole.js rename to tgui/packages/tgui/interfaces/unused/AbductorConsole.js index 921c73beed2..ae1ef52c4ce 100644 --- a/tgui/packages/tgui/interfaces/AbductorConsole.js +++ b/tgui/packages/tgui/interfaces/unused/AbductorConsole.js @@ -1,7 +1,7 @@ -import { useBackend, useSharedState } from '../backend'; -import { Button, LabeledList, NoticeBox, Section, Tabs } from '../components'; -import { Window } from '../layouts'; -import { GenericUplink } from "./Uplink/GenericUplink"; +import { useBackend, useSharedState } from '../../backend'; +import { Button, LabeledList, NoticeBox, Section, Tabs } from '../../components'; +import { Window } from '../../layouts'; +import { GenericUplink } from "../Uplink/GenericUplink"; export const AbductorConsole = (props, context) => { const [tab, setTab] = useSharedState(context, 'tab', 1); diff --git a/tgui/packages/tgui/interfaces/Achievements.js b/tgui/packages/tgui/interfaces/unused/Achievements.js similarity index 96% rename from tgui/packages/tgui/interfaces/Achievements.js rename to tgui/packages/tgui/interfaces/unused/Achievements.js index a4ac21b657f..4d7a9ebf6b1 100644 --- a/tgui/packages/tgui/interfaces/Achievements.js +++ b/tgui/packages/tgui/interfaces/unused/Achievements.js @@ -1,6 +1,6 @@ -import { useBackend, useLocalState } from '../backend'; -import { Box, Flex, Icon, Table, Tabs } from '../components'; -import { Window } from '../layouts'; +import { useBackend, useLocalState } from '../../backend'; +import { Box, Flex, Icon, Table, Tabs } from '../../components'; +import { Window } from '../../layouts'; export const Achievements = (props, context) => { const { data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/Adminhelp.tsx b/tgui/packages/tgui/interfaces/unused/Adminhelp.tsx similarity index 96% rename from tgui/packages/tgui/interfaces/Adminhelp.tsx rename to tgui/packages/tgui/interfaces/unused/Adminhelp.tsx index 1d2fcb741aa..f161358b008 100644 --- a/tgui/packages/tgui/interfaces/Adminhelp.tsx +++ b/tgui/packages/tgui/interfaces/unused/Adminhelp.tsx @@ -1,7 +1,7 @@ import { BooleanLike } from "common/react"; -import { useBackend, useLocalState } from "../backend"; -import { TextArea, Stack, Button, NoticeBox, Input, Box } from "../components"; -import { Window } from "../layouts"; +import { useBackend, useLocalState } from "../../backend"; +import { TextArea, Stack, Button, NoticeBox, Input, Box } from "../../components"; +import { Window } from "../../layouts"; type AdminhelpData = { adminCount: number, diff --git a/tgui/packages/tgui/interfaces/AdventureBrowser.tsx b/tgui/packages/tgui/interfaces/unused/AdventureBrowser.tsx similarity index 94% rename from tgui/packages/tgui/interfaces/AdventureBrowser.tsx rename to tgui/packages/tgui/interfaces/unused/AdventureBrowser.tsx index 377f56cbb59..53b997aced0 100644 --- a/tgui/packages/tgui/interfaces/AdventureBrowser.tsx +++ b/tgui/packages/tgui/interfaces/unused/AdventureBrowser.tsx @@ -1,8 +1,8 @@ -import { useBackend, useLocalState } from '../backend'; -import { Button, LabeledList, Section, Box, NoticeBox, Table } from '../components'; -import { Window } from '../layouts'; -import { AdventureDataProvider, AdventureScreen } from './ExodroneConsole'; -import { formatTime } from '../format'; +import { useBackend, useLocalState } from '../../backend'; +import { Button, LabeledList, Section, Box, NoticeBox, Table } from '../../components'; +import { Window } from '../../layouts'; +import { AdventureDataProvider, AdventureScreen } from '../ExodroneConsole'; +import { formatTime } from '../../format'; type Adventure = { ref: string; diff --git a/tgui/packages/tgui/interfaces/AnomalyRefinery.js b/tgui/packages/tgui/interfaces/unused/AnomalyRefinery.js similarity index 97% rename from tgui/packages/tgui/interfaces/AnomalyRefinery.js rename to tgui/packages/tgui/interfaces/unused/AnomalyRefinery.js index 4e793d45baa..eaf5a711d24 100644 --- a/tgui/packages/tgui/interfaces/AnomalyRefinery.js +++ b/tgui/packages/tgui/interfaces/unused/AnomalyRefinery.js @@ -1,4 +1,4 @@ -import { useBackend, useSharedState } from '../backend'; +import { useBackend, useSharedState } from '../../backend'; import { Button, Icon, @@ -7,9 +7,9 @@ import { Stack, LabeledList, Box, -} from '../components'; -import { Window } from '../layouts'; -import { GasmixParser } from './common/GasmixParser'; +} from '../../components'; +import { Window } from '../../layouts'; +import { GasmixParser } from '../common/GasmixParser'; export const AnomalyRefinery = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/AtmosControlPanel.js b/tgui/packages/tgui/interfaces/unused/AtmosControlPanel.js similarity index 96% rename from tgui/packages/tgui/interfaces/AtmosControlPanel.js rename to tgui/packages/tgui/interfaces/unused/AtmosControlPanel.js index 3e2141c0fcf..4fd09848150 100644 --- a/tgui/packages/tgui/interfaces/AtmosControlPanel.js +++ b/tgui/packages/tgui/interfaces/unused/AtmosControlPanel.js @@ -1,8 +1,8 @@ import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; -import { useBackend } from '../backend'; -import { Box, Button, Flex, Section, Table } from '../components'; -import { Window } from '../layouts'; +import { useBackend } from '../../backend'; +import { Box, Button, Flex, Section, Table } from '../../components'; +import { Window } from '../../layouts'; export const AtmosControlPanel = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/AtmosHandbook.tsx b/tgui/packages/tgui/interfaces/unused/AtmosHandbook.tsx similarity index 98% rename from tgui/packages/tgui/interfaces/AtmosHandbook.tsx rename to tgui/packages/tgui/interfaces/unused/AtmosHandbook.tsx index ae756df7799..b2c397858e7 100644 --- a/tgui/packages/tgui/interfaces/AtmosHandbook.tsx +++ b/tgui/packages/tgui/interfaces/unused/AtmosHandbook.tsx @@ -1,7 +1,7 @@ // todo: this here is a reminder that we need a popup atmos guide that you can pull up. -import { Modal, Section } from "../components"; -import { FullGasContext } from "./common/Atmos"; +import { Modal, Section } from "../../components"; +import { FullGasContext } from "../common/Atmos"; interface AtmosGuideProps { // gas context to pull from - must be full diff --git a/tgui/packages/tgui/interfaces/Bepis.js b/tgui/packages/tgui/interfaces/unused/Bepis.js similarity index 97% rename from tgui/packages/tgui/interfaces/Bepis.js rename to tgui/packages/tgui/interfaces/unused/Bepis.js index 6bd7a12d678..431776642e8 100644 --- a/tgui/packages/tgui/interfaces/Bepis.js +++ b/tgui/packages/tgui/interfaces/unused/Bepis.js @@ -1,6 +1,6 @@ -import { useBackend } from '../backend'; -import { Box, Button, Grid, LabeledList, NumberInput, Section } from '../components'; -import { Window } from '../layouts'; +import { useBackend } from '../../backend'; +import { Box, Button, Grid, LabeledList, NumberInput, Section } from '../../components'; +import { Window } from '../../layouts'; export const Bepis = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/BluespaceArtillery.js b/tgui/packages/tgui/interfaces/unused/BluespaceArtillery.js similarity index 95% rename from tgui/packages/tgui/interfaces/BluespaceArtillery.js rename to tgui/packages/tgui/interfaces/unused/BluespaceArtillery.js index 87d8716c72e..34875d9c79a 100644 --- a/tgui/packages/tgui/interfaces/BluespaceArtillery.js +++ b/tgui/packages/tgui/interfaces/unused/BluespaceArtillery.js @@ -1,6 +1,6 @@ -import { useBackend } from '../backend'; -import { Box, Button, LabeledList, NoticeBox, Section } from '../components'; -import { Window } from '../layouts'; +import { useBackend } from '../../backend'; +import { Box, Button, LabeledList, NoticeBox, Section } from '../../components'; +import { Window } from '../../layouts'; export const BluespaceArtillery = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/BluespaceLocator.js b/tgui/packages/tgui/interfaces/unused/BluespaceLocator.js similarity index 93% rename from tgui/packages/tgui/interfaces/BluespaceLocator.js rename to tgui/packages/tgui/interfaces/unused/BluespaceLocator.js index 889a6ef5782..2cffd93e0ba 100644 --- a/tgui/packages/tgui/interfaces/BluespaceLocator.js +++ b/tgui/packages/tgui/interfaces/unused/BluespaceLocator.js @@ -1,6 +1,6 @@ -import { useBackend, useSharedState } from '../backend'; -import { Icon, ProgressBar, Tabs } from '../components'; -import { Window } from '../layouts'; +import { useBackend, useSharedState } from '../../backend'; +import { Icon, ProgressBar, Tabs } from '../../components'; +import { Window } from '../../layouts'; const directionToIcon = { north: 0, diff --git a/tgui/packages/tgui/interfaces/BluespaceSender.js b/tgui/packages/tgui/interfaces/unused/BluespaceSender.js similarity index 95% rename from tgui/packages/tgui/interfaces/BluespaceSender.js rename to tgui/packages/tgui/interfaces/unused/BluespaceSender.js index 80ea5ee54bb..bd464f5befd 100644 --- a/tgui/packages/tgui/interfaces/BluespaceSender.js +++ b/tgui/packages/tgui/interfaces/unused/BluespaceSender.js @@ -1,10 +1,10 @@ import { filter, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { toFixed } from 'common/math'; -import { useBackend } from '../backend'; -import { Button, Divider, LabeledList, NumberInput, ProgressBar, Section, Stack, Box } from '../components'; -import { getGasColor, getGasLabel } from '../constants'; -import { Window } from '../layouts'; +import { useBackend } from '../../backend'; +import { Button, Divider, LabeledList, NumberInput, ProgressBar, Section, Stack, Box } from '../../components'; +import { getGasColor, getGasLabel } from '../../constants'; +import { Window } from '../../layouts'; const mappedTopMargin = "2%"; diff --git a/tgui/packages/tgui/interfaces/BluespaceVendor.js b/tgui/packages/tgui/interfaces/unused/BluespaceVendor.js similarity index 96% rename from tgui/packages/tgui/interfaces/BluespaceVendor.js rename to tgui/packages/tgui/interfaces/unused/BluespaceVendor.js index 5db5e5c7066..ed13e5b53ea 100644 --- a/tgui/packages/tgui/interfaces/BluespaceVendor.js +++ b/tgui/packages/tgui/interfaces/unused/BluespaceVendor.js @@ -2,10 +2,10 @@ import { filter, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { toFixed } from 'common/math'; import { multiline } from 'common/string'; -import { useBackend } from '../backend'; -import { Button, Divider, LabeledList, NumberInput, ProgressBar, Section, Stack } from '../components'; -import { getGasColor, getGasLabel } from '../constants'; -import { Window } from '../layouts'; +import { useBackend } from '../../backend'; +import { Button, Divider, LabeledList, NumberInput, ProgressBar, Section, Stack } from '../../components'; +import { getGasColor, getGasLabel } from '../../constants'; +import { Window } from '../../layouts'; export const BluespaceVendor = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/AntagInfoBrainwashed.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoBrainwashed.tsx similarity index 93% rename from tgui/packages/tgui/interfaces/AntagInfoBrainwashed.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoBrainwashed.tsx index 7b33922d442..974f29b5e2b 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBrainwashed.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoBrainwashed.tsx @@ -1,7 +1,7 @@ -import { useBackend } from '../backend'; -import { Icon, Section, Stack } from '../components'; +import { useBackend } from '../../../backend'; +import { Icon, Section, Stack } from '../../../components'; import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; +import { Window } from '../../../layouts'; type Objective = { count: number; diff --git a/tgui/packages/tgui/interfaces/AntagInfoBrother.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoBrother.tsx similarity index 90% rename from tgui/packages/tgui/interfaces/AntagInfoBrother.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoBrother.tsx index d4a7c382d5f..8cb815bc34e 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBrother.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoBrother.tsx @@ -1,7 +1,7 @@ -import { useBackend } from '../backend'; -import { Section, Stack } from '../components'; +import { useBackend } from '../../../backend'; +import { Section, Stack } from '../../../components'; import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; +import { Window } from '../../../layouts'; type Objective = { count: number; diff --git a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoChangeling.tsx similarity index 98% rename from tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoChangeling.tsx index e6ed41d5918..1d524715623 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoChangeling.tsx @@ -1,7 +1,7 @@ import { multiline } from 'common/string'; -import { useBackend, useSharedState } from '../backend'; -import { Box, Button, Dimmer, Dropdown, Section, Stack } from '../components'; -import { Window } from '../layouts'; +import { useBackend, useSharedState } from '../../../backend'; +import { Box, Button, Dimmer, Dropdown, Section, Stack } from '../../../components'; +import { Window } from '../../../layouts'; const hivestyle = { fontWeight: 'bold', diff --git a/tgui/packages/tgui/interfaces/AntagInfoDemon.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoDemon.tsx similarity index 96% rename from tgui/packages/tgui/interfaces/AntagInfoDemon.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoDemon.tsx index 7a9838f289a..0922f4162bc 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoDemon.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoDemon.tsx @@ -1,7 +1,7 @@ -import { useBackend } from '../backend'; -import { Box, Section, Stack } from '../components'; +import { useBackend } from '../../../backend'; +import { Box, Section, Stack } from '../../../components'; import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; +import { Window } from '../../../layouts'; const jauntstyle = { color: 'lightblue', diff --git a/tgui/packages/tgui/interfaces/AntagInfoGangmember.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoGangmember.tsx similarity index 95% rename from tgui/packages/tgui/interfaces/AntagInfoGangmember.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoGangmember.tsx index 5b0e09c286c..040284d04f0 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoGangmember.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoGangmember.tsx @@ -1,6 +1,6 @@ -import { useBackend } from '../backend'; -import { BlockQuote, Icon, Section, Stack } from '../components'; -import { Window } from '../layouts'; +import { useBackend } from '../../../backend'; +import { BlockQuote, Icon, Section, Stack } from '../../../components'; +import { Window } from '../../../layouts'; type Info = { antag_name: string; diff --git a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoGeneric.tsx similarity index 90% rename from tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoGeneric.tsx index a07848d24bc..7931dd0b839 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoGeneric.tsx @@ -1,7 +1,7 @@ -import { useBackend } from '../backend'; -import { Section, Stack } from '../components'; +import { useBackend } from '../../../backend'; +import { Section, Stack } from '../../../components'; import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; +import { Window } from '../../../layouts'; type Objective = { count: number; diff --git a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoHeretic.tsx similarity index 98% rename from tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoHeretic.tsx index 29f3ea6c2ee..ce6d9fce321 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoHeretic.tsx @@ -1,6 +1,6 @@ -import { useBackend, useLocalState } from '../backend'; -import { Section, Stack, Box, Tabs, Button, BlockQuote } from '../components'; -import { Window } from '../layouts'; +import { useBackend, useLocalState } from '../../../backend'; +import { Section, Stack, Box, Tabs, Button, BlockQuote } from '../../../components'; +import { Window } from '../../../layouts'; import { BooleanLike } from 'common/react'; const hereticRed = { diff --git a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoMalf.tsx similarity index 96% rename from tgui/packages/tgui/interfaces/AntagInfoMalf.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoMalf.tsx index bd48edf47b1..dc42b7b3da1 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoMalf.tsx @@ -1,9 +1,9 @@ -import { useBackend, useLocalState } from '../backend'; +import { useBackend, useLocalState } from '../../../backend'; import { multiline } from 'common/string'; -import { GenericUplink, Item } from './Uplink/GenericUplink'; -import { BlockQuote, Button, Section, Stack, Tabs } from '../components'; +import { GenericUplink, Item } from '../../Uplink/GenericUplink'; +import { BlockQuote, Button, Section, Stack, Tabs } from '../../../components'; import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; +import { Window } from '../../../layouts'; const allystyle = { fontWeight: 'bold', diff --git a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoMorph.tsx similarity index 94% rename from tgui/packages/tgui/interfaces/AntagInfoMorph.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoMorph.tsx index 56305885316..f2b15147ae9 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoMorph.tsx @@ -1,5 +1,5 @@ -import { BlockQuote, Stack } from '../components'; -import { Window } from '../layouts'; +import { BlockQuote, Stack } from '../../../components'; +import { Window } from '../../../layouts'; const goodstyle = { color: 'lightgreen', diff --git a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoNightmare.tsx similarity index 96% rename from tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoNightmare.tsx index 18bebc8aa56..028a4a3f524 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoNightmare.tsx @@ -1,5 +1,5 @@ -import { BlockQuote, LabeledList, Section, Stack } from '../components'; -import { Window } from '../layouts'; +import { BlockQuote, LabeledList, Section, Stack } from '../../../components'; +import { Window } from '../../../layouts'; const tipstyle = { color: 'white', diff --git a/tgui/packages/tgui/interfaces/AntagInfoSeparatist.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoSeparatist.tsx similarity index 95% rename from tgui/packages/tgui/interfaces/AntagInfoSeparatist.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoSeparatist.tsx index 24aace7d50d..6ffb1f3de39 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoSeparatist.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoSeparatist.tsx @@ -1,6 +1,6 @@ -import { useBackend } from '../backend'; -import { Icon, Section, Stack } from '../components'; -import { Window } from '../layouts'; +import { useBackend } from '../../../backend'; +import { Icon, Section, Stack } from '../../../components'; +import { Window } from '../../../layouts'; type Objective = { count: number; diff --git a/tgui/packages/tgui/interfaces/AntagInfoThief.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoThief.tsx similarity index 94% rename from tgui/packages/tgui/interfaces/AntagInfoThief.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoThief.tsx index f3ed4da39fc..4eca3234e13 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoThief.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoThief.tsx @@ -1,7 +1,7 @@ import { BooleanLike } from 'common/react'; -import { useBackend } from '../backend'; -import { Section, Stack } from '../components'; -import { Window } from '../layouts'; +import { useBackend } from '../../../backend'; +import { Section, Stack } from '../../../components'; +import { Window } from '../../../layouts'; type Objective = { count: number; diff --git a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoTraitor.tsx similarity index 97% rename from tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoTraitor.tsx index 4e8f881e9d5..e430afd9f0f 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoTraitor.tsx @@ -1,8 +1,8 @@ -import { useBackend } from '../backend'; +import { useBackend } from '../../../backend'; import { multiline } from 'common/string'; -import { BlockQuote, Button, Dimmer, Section, Stack } from '../components'; +import { BlockQuote, Button, Dimmer, Section, Stack } from '../../../components'; import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; +import { Window } from '../../../layouts'; const allystyle = { fontWeight: 'bold', diff --git a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoWizard.tsx similarity index 96% rename from tgui/packages/tgui/interfaces/AntagInfoWizard.tsx rename to tgui/packages/tgui/interfaces/unused/antag/AntagInfoWizard.tsx index d33123b947a..5a924940a46 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx +++ b/tgui/packages/tgui/interfaces/unused/antag/AntagInfoWizard.tsx @@ -1,7 +1,7 @@ -import { useBackend } from '../backend'; -import { Section, Stack } from '../components'; +import { useBackend } from '../../../backend'; +import { Section, Stack } from '../../../components'; import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; +import { Window } from '../../../layouts'; const teleportstyle = { color: 'yellow', diff --git a/tgui/packages/tgui/interfaces/AccountingConsole.js b/tgui/packages/tgui/interfaces/unused/economy/AccountingConsole.js similarity index 93% rename from tgui/packages/tgui/interfaces/AccountingConsole.js rename to tgui/packages/tgui/interfaces/unused/economy/AccountingConsole.js index 41c2fa1c35b..16207c6b984 100644 --- a/tgui/packages/tgui/interfaces/AccountingConsole.js +++ b/tgui/packages/tgui/interfaces/unused/economy/AccountingConsole.js @@ -1,7 +1,7 @@ -import { BlockQuote, Collapsible, LabeledList, Modal, Section, Tabs } from '../components'; -import { useBackend } from '../backend'; -import { useLocalState } from '../backend'; -import { Window } from '../layouts'; +import { BlockQuote, Collapsible, LabeledList, Modal, Section, Tabs } from '../../../components'; +import { useBackend } from '../../../backend'; +import { useLocalState } from '../../../backend'; +import { Window } from '../../../layouts'; export const AccountingConsole = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/AccountsTerminal.js b/tgui/packages/tgui/interfaces/unused/economy/AccountsTerminal.js similarity index 97% rename from tgui/packages/tgui/interfaces/AccountsTerminal.js rename to tgui/packages/tgui/interfaces/unused/economy/AccountsTerminal.js index ca6051c66be..b0da022d06c 100644 --- a/tgui/packages/tgui/interfaces/AccountsTerminal.js +++ b/tgui/packages/tgui/interfaces/unused/economy/AccountsTerminal.js @@ -1,6 +1,6 @@ -import { useBackend, useSharedState } from "../backend"; -import { Box, Button, LabeledList, Input, Section, Table, Tabs } from "../components"; -import { Window } from "../layouts"; +import { useBackend, useSharedState } from "../../../backend"; +import { Box, Button, LabeledList, Input, Section, Table, Tabs } from "../../../components"; +import { Window } from "../../../layouts"; export const AccountsTerminal = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/BlackMarketUplink.js b/tgui/packages/tgui/interfaces/unused/economy/BlackMarketUplink.js similarity index 95% rename from tgui/packages/tgui/interfaces/BlackMarketUplink.js rename to tgui/packages/tgui/interfaces/unused/economy/BlackMarketUplink.js index 00223f58242..08b5e417663 100644 --- a/tgui/packages/tgui/interfaces/BlackMarketUplink.js +++ b/tgui/packages/tgui/interfaces/unused/economy/BlackMarketUplink.js @@ -1,7 +1,7 @@ -import { useBackend } from '../backend'; -import { AnimatedNumber, Box, Button, Modal, Section, Stack, Tabs } from '../components'; -import { formatMoney } from '../format'; -import { Window } from '../layouts'; +import { useBackend } from '../../../backend'; +import { AnimatedNumber, Box, Button, Modal, Section, Stack, Tabs } from '../../../components'; +import { formatMoney } from '../../../format'; +import { Window } from '../../../layouts'; export const BlackMarketUplink = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/Pda.js b/tgui/packages/tgui/interfaces/unused/pda/Pda.js similarity index 95% rename from tgui/packages/tgui/interfaces/Pda.js rename to tgui/packages/tgui/interfaces/unused/pda/Pda.js index e7787da71d7..ebd73a90c9f 100644 --- a/tgui/packages/tgui/interfaces/Pda.js +++ b/tgui/packages/tgui/interfaces/unused/pda/Pda.js @@ -1,11 +1,11 @@ -import { useBackend, useLocalState } from "../backend"; -import { Box, Button, Flex, Icon, LabeledList, Section } from "../components"; -import { Window } from "../layouts"; +import { useBackend, useLocalState } from "../../../backend"; +import { Box, Button, Flex, Icon, LabeledList, Section } from "../../../components"; +import { Window } from "../../../layouts"; /* This is all basically stolen from routes.js. */ -import { routingError } from "../routes"; +import { routingError } from "../../../routes"; -const requirePdaInterface = require.context('./pda', false, /\.js$/); +const requirePdaInterface = require.context('./cartridges', false, /\.js$/); const getPdaApp = name => { let appModule; diff --git a/tgui/packages/tgui/interfaces/pda/pda_atmos_scan.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_atmos_scan.js similarity index 91% rename from tgui/packages/tgui/interfaces/pda/pda_atmos_scan.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_atmos_scan.js index a6a76a70eff..3e84ebcc242 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_atmos_scan.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_atmos_scan.js @@ -1,7 +1,7 @@ import { filter } from 'common/collections'; import { decodeHtmlEntities } from 'common/string'; -import { useBackend } from "../../backend"; -import { Box, LabeledList } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, LabeledList } from "../../../../components"; const getItemColor = (value, min2, min1, max1, max2) => { if (value < min2) { diff --git a/tgui/packages/tgui/interfaces/pda/pda_janitor.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_janitor.js similarity index 95% rename from tgui/packages/tgui/interfaces/pda/pda_janitor.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_janitor.js index a98026a343b..e772f5fcc02 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_janitor.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_janitor.js @@ -1,5 +1,5 @@ -import { useBackend } from "../../backend"; -import { Box, LabeledList, Section } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, LabeledList, Section } from "../../../../components"; export const pda_janitor = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_main_menu.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_main_menu.js similarity index 94% rename from tgui/packages/tgui/interfaces/pda/pda_main_menu.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_main_menu.js index ee08d11b1f6..71bdbe8b8e4 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_main_menu.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_main_menu.js @@ -1,6 +1,6 @@ import { Fragment } from 'inferno'; -import { useBackend } from "../../backend"; -import { Box, Button, LabeledList, Section } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, Button, LabeledList, Section } from "../../../../components"; export const pda_main_menu = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_manifest.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_manifest.js similarity index 53% rename from tgui/packages/tgui/interfaces/pda/pda_manifest.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_manifest.js index 48a0054bc80..dcd26a43b98 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_manifest.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_manifest.js @@ -1,6 +1,6 @@ -import { useBackend } from "../../backend"; -import { Box } from "../../components"; -import { CrewManifestContent } from '../CrewManifest'; +import { useBackend } from "../../../../backend"; +import { Box } from "../../../../components"; +import { CrewManifestContent } from '../../../CrewManifest'; export const pda_manifest = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_medical.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_medical.js similarity index 96% rename from tgui/packages/tgui/interfaces/pda/pda_medical.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_medical.js index 585aeb76f55..06df567e2c3 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_medical.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_medical.js @@ -1,5 +1,5 @@ -import { useBackend } from "../../backend"; -import { Box, Button, LabeledList, Section } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, Button, LabeledList, Section } from "../../../../components"; export const pda_medical = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_messenger.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_messenger.js similarity index 97% rename from tgui/packages/tgui/interfaces/pda/pda_messenger.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_messenger.js index baf7abf0220..b3fdc729ed7 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_messenger.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_messenger.js @@ -1,7 +1,7 @@ import { decodeHtmlEntities } from 'common/string'; import { filter } from 'common/collections'; -import { useBackend, useLocalState } from "../../backend"; -import { Box, Button, LabeledList, Section } from "../../components"; +import { useBackend, useLocalState } from "../../../../backend"; +import { Box, Button, LabeledList, Section } from "../../../../components"; export const pda_messenger = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_news.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_news.js similarity index 96% rename from tgui/packages/tgui/interfaces/pda/pda_news.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_news.js index 1801922f981..50fc733c479 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_news.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_news.js @@ -1,7 +1,7 @@ import { decodeHtmlEntities } from 'common/string'; import { Fragment } from 'inferno'; -import { useBackend } from "../../backend"; -import { Box, Button, Section } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, Button, Section } from "../../../../components"; // Stolen wholesale from communicators. // TGUITODO: Merge PDA & Communicator shared code once both are in diff --git a/tgui/packages/tgui/interfaces/pda/pda_notekeeper.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_notekeeper.js similarity index 83% rename from tgui/packages/tgui/interfaces/pda/pda_notekeeper.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_notekeeper.js index d66a892ebe9..af5d77560a5 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_notekeeper.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_notekeeper.js @@ -1,6 +1,6 @@ /* eslint react/no-danger: "off" */ -import { useBackend } from "../../backend"; -import { Box, Button, Section } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, Button, Section } from "../../../../components"; export const pda_notekeeper = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_power.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_power.js similarity index 52% rename from tgui/packages/tgui/interfaces/pda/pda_power.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_power.js index fc34d75c5ce..abe68d8d59a 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_power.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_power.js @@ -1,8 +1,8 @@ -import { useBackend } from "../../backend"; -import { PowerMonitorContent } from '../PowerMonitor'; +import { useBackend } from "../../../../backend"; +import { PowerMonitorContent } from '../../../PowerMonitor'; export const pda_power = (props, context) => { const { act, data } = useBackend(context); return ; -}; \ No newline at end of file +}; diff --git a/tgui/packages/tgui/interfaces/pda/pda_security.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_security.js similarity index 95% rename from tgui/packages/tgui/interfaces/pda/pda_security.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_security.js index f2a39dec87b..9e88d2806e7 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_security.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_security.js @@ -1,5 +1,5 @@ -import { useBackend } from "../../backend"; -import { Box, Button, LabeledList, Section } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, Button, LabeledList, Section } from "../../../../components"; export const pda_security = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_signaller.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_signaller.js similarity index 61% rename from tgui/packages/tgui/interfaces/pda/pda_signaller.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_signaller.js index a7788084fee..cfa4bc67931 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_signaller.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_signaller.js @@ -1,4 +1,4 @@ -import { SignalerContent } from '../Signaler'; +import { SignalerContent } from '../../../Signaler'; export const pda_signaller = (props, context) => { return ; diff --git a/tgui/packages/tgui/interfaces/pda/pda_status_display.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_status_display.js similarity index 92% rename from tgui/packages/tgui/interfaces/pda/pda_status_display.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_status_display.js index 60bc56eabe2..fbd9fb8ccdd 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_status_display.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_status_display.js @@ -1,5 +1,5 @@ -import { useBackend } from "../../backend"; -import { Box, Button, LabeledList } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, Button, LabeledList } from "../../../../components"; export const pda_status_display = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/interfaces/pda/pda_supply.js b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_supply.js similarity index 91% rename from tgui/packages/tgui/interfaces/pda/pda_supply.js rename to tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_supply.js index 2a38446bce4..cdafdd2579b 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_supply.js +++ b/tgui/packages/tgui/interfaces/unused/pda/cartridges/pda_supply.js @@ -1,5 +1,5 @@ -import { useBackend } from "../../backend"; -import { Box, LabeledList, Section } from "../../components"; +import { useBackend } from "../../../../backend"; +import { Box, LabeledList, Section } from "../../../../components"; export const pda_supply = (props, context) => { const { act, data } = useBackend(context); diff --git a/tgui/packages/tgui/styles/base.scss b/tgui/packages/tgui/styles/base.scss index 6c4e85659e6..d9b6cca6aa3 100644 --- a/tgui/packages/tgui/styles/base.scss +++ b/tgui/packages/tgui/styles/base.scss @@ -19,6 +19,21 @@ $unit: 12px; $font-size: 1 * $unit !default; $border-radius: 0.16em !default; +// base css layer +$layer-base: 0; +// interface-in-interface +$layer-program: 1; +// popup for subwindows +$layer-program-popup: 2; +// modal for subwindows +$layer-program-modal: 3; +// popup for base window +$layer-base-popup: 4; +// modal for base window +$layer-base-modal: 5; +// urgent modal for base window +$layer-base-interrupt: 6; + @function em($px) { @return 1em * math.div($px, $unit); } diff --git a/tgui/packages/tgui/styles/base.ts b/tgui/packages/tgui/styles/base.ts new file mode 100644 index 00000000000..98ba9560b30 --- /dev/null +++ b/tgui/packages/tgui/styles/base.ts @@ -0,0 +1,9 @@ +enum TGUI_CSS_LAYERS { + Base = 0, + Subwindow = 1, + SubwindowPopup = 2, + SubwindowModal = 3, + BasePopup = 4, + BaseModal = 5, + AlwaysOnTop = 6, +} diff --git a/tgui/packages/tgui/styles/components/Dimmer.scss b/tgui/packages/tgui/styles/components/Dimmer.scss index 32a43ce509e..f1db5d14527 100644 --- a/tgui/packages/tgui/styles/components/Dimmer.scss +++ b/tgui/packages/tgui/styles/components/Dimmer.scss @@ -4,6 +4,8 @@ */ $background-dimness: 0.75 !default; +@use '../base.scss' as base; + .Dimmer { // Align everything in the middle. // A fat middle finger for anything less than IE11. @@ -18,5 +20,5 @@ $background-dimness: 0.75 !default; right: 0; // Dim everything around it background-color: rgba(0, 0, 0, $background-dimness); - z-index: 1; + z-index: base.$layer-base-interrupt; } diff --git a/tgui/public/tgui-polyfill.min.js b/tgui/public/tgui-polyfill.min.js index 91be6dc8765..d3f71c20944 100644 --- a/tgui/public/tgui-polyfill.min.js +++ b/tgui/public/tgui-polyfill.min.js @@ -1 +1 @@ -(function(window,document){var version="3.7.3";var options=window.html5||{};var reSkip=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;var saveClones=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;var supportsHtml5Styles;var expando="_html5shiv";var expanID=0;var expandoData={};var supportsUnknownElements;(function(){try{var a=document.createElement("a");a.innerHTML="";supportsHtml5Styles="hidden"in a;supportsUnknownElements=a.childNodes.length==1||function(){document.createElement("a");var frag=document.createDocumentFragment();return typeof frag.cloneNode=="undefined"||typeof frag.createDocumentFragment=="undefined"||typeof frag.createElement=="undefined"}()}catch(e){supportsHtml5Styles=true;supportsUnknownElements=true}})();function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement("p"),parent=ownerDocument.getElementsByTagName("head")[0]||ownerDocument.documentElement;p.innerHTML="x";return parent.insertBefore(p.lastChild,parent.firstChild)}function getElements(){var elements=html5.elements;return typeof elements=="string"?elements.split(" "):elements}function addElements(newElements,ownerDocument){var elements=html5.elements;if(typeof elements!="string"){elements=elements.join(" ")}if(typeof newElements!="string"){newElements=newElements.join(" ")}html5.elements=elements+" "+newElements;shivDocument(ownerDocument)}function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data}return data}function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createElement(nodeName)}if(!data){data=getExpandoData(ownerDocument)}var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode()}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode()}else{node=data.createElem(nodeName)}return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node}function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createDocumentFragment()}data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i3?getModifier(init):null,key=String(init.key),chr=String(init.char),location=init.location,keyCode=init.keyCode||(init.keyCode=key)&&key.charCodeAt(0)||0,charCode=init.charCode||(init.charCode=chr)&&chr.charCodeAt(0)||0,bubbles=init.bubbles,cancelable=init.cancelable,repeat=init.repeat,locale=init.locale,view=init.view||window,args;if(!init.which)init.which=init.keyCode;if("initKeyEvent"in out){out.initKeyEvent(type,bubbles,cancelable,view,ctrlKey,altKey,shiftKey,metaKey,keyCode,charCode)}else if(0>>0);var proto=Element.prototype;var querySelector=proto.querySelector;var querySelectorAll=proto.querySelectorAll;proto.querySelector=function qS(css){return find(this,querySelector,css)};proto.querySelectorAll=function qSA(css){return find(this,querySelectorAll,css)};function find(node,method,css){node.setAttribute(dataScope,null);var result=method.call(node,String(css).replace(/(^|,\s*)(:scope([ >]|$))/g,(function($0,$1,$2,$3){return $1+"["+dataScope+"]"+($3||" ")})));node.removeAttribute(dataScope);return result}})()}})(window);(function(global){"use strict";var DOMMap=global.WeakMap||function(){var counter=0,dispatched=false,drop=false,value;function dispatch(key,ce,shouldDrop){drop=shouldDrop;dispatched=false;value=undefined;key.dispatchEvent(ce)}function Handler(value){this.value=value}Handler.prototype.handleEvent=function handleEvent(e){dispatched=true;if(drop){e.currentTarget.removeEventListener(e.type,this,false)}else{value=this.value}};function DOMMap(){counter++;this.__ce__=new Event("@DOMMap:"+counter+Math.random())}DOMMap.prototype={constructor:DOMMap,"delete":function del(key){return dispatch(key,this.__ce__,true),dispatched},get:function get(key){dispatch(key,this.__ce__,false);var v=value;value=undefined;return v},has:function has(key){return dispatch(key,this.__ce__,false),dispatched},set:function set(key,value){dispatch(key,this.__ce__,true);key.addEventListener(this.__ce__.type,new Handler(value),false);return this}};return DOMMap}();function Dict(){}Dict.prototype=(Object.create||Object)(null);function createEventListener(type,callback,options){function eventListener(e){if(eventListener.once){e.currentTarget.removeEventListener(e.type,callback,eventListener);eventListener.removed=true}if(eventListener.passive){e.preventDefault=createEventListener.preventDefault}if(typeof eventListener.callback==="function"){eventListener.callback.call(this,e)}else if(eventListener.callback){eventListener.callback.handleEvent(e)}if(eventListener.passive){delete e.preventDefault}}eventListener.type=type;eventListener.callback=callback;eventListener.capture=!!options.capture;eventListener.passive=!!options.passive;eventListener.once=!!options.once;eventListener.removed=false;return eventListener}createEventListener.preventDefault=function preventDefault(){};var Event=global.CustomEvent,dE=global.dispatchEvent,aEL=global.addEventListener,rEL=global.removeEventListener,counter=0,increment=function(){counter++},indexOf=[].indexOf||function indexOf(value){var length=this.length;while(length--){if(this[length]===value){break}}return length},getListenerKey=function(options){return"".concat(options.capture?"1":"0",options.passive?"1":"0",options.once?"1":"0")},augment;try{aEL("_",increment,{once:true});dE(new Event("_"));dE(new Event("_"));rEL("_",increment,{once:true})}catch(o_O){}if(counter!==1){(function(){var dm=new DOMMap;function createAEL(aEL){return function addEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key=getListenerKey(options),i,tmp,wrap;if(!info)dm.set(this,info=new Dict);if(!(type in info))info[type]={handler:[],wrap:[]};tmp=info[type];i=indexOf.call(tmp.handler,handler);if(i<0){i=tmp.handler.push(handler)-1;tmp.wrap[i]=wrap=new Dict}else{wrap=tmp.wrap[i]}if(!(key in wrap)){wrap[key]=createEventListener(type,handler,options);aEL.call(this,type,wrap[key],wrap[key].capture)}}else{aEL.call(this,type,handler,options)}}}function createREL(rEL){return function removeEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key,i,tmp,wrap;if(info&&type in info){tmp=info[type];i=indexOf.call(tmp.handler,handler);if(-1>>0;if(typeof callback!=="function"){throw new TypeError(callback+" is not a function")}if(arguments.length>1){T=thisArg}k=0;while(k";supportsHtml5Styles="hidden"in a;supportsUnknownElements=a.childNodes.length==1||function(){document.createElement("a");var frag=document.createDocumentFragment();return typeof frag.cloneNode=="undefined"||typeof frag.createDocumentFragment=="undefined"||typeof frag.createElement=="undefined"}()}catch(e){supportsHtml5Styles=true;supportsUnknownElements=true}})();function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement("p"),parent=ownerDocument.getElementsByTagName("head")[0]||ownerDocument.documentElement;p.innerHTML="x";return parent.insertBefore(p.lastChild,parent.firstChild)}function getElements(){var elements=html5.elements;return typeof elements=="string"?elements.split(" "):elements}function addElements(newElements,ownerDocument){var elements=html5.elements;if(typeof elements!="string"){elements=elements.join(" ")}if(typeof newElements!="string"){newElements=newElements.join(" ")}html5.elements=elements+" "+newElements;shivDocument(ownerDocument)}function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data}return data}function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createElement(nodeName)}if(!data){data=getExpandoData(ownerDocument)}var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode()}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode()}else{node=data.createElem(nodeName)}return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node}function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createDocumentFragment()}data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i3?getModifier(init):null,key=String(init.key),chr=String(init.char),location=init.location,keyCode=init.keyCode||(init.keyCode=key)&&key.charCodeAt(0)||0,charCode=init.charCode||(init.charCode=chr)&&chr.charCodeAt(0)||0,bubbles=init.bubbles,cancelable=init.cancelable,repeat=init.repeat,locale=init.locale,view=init.view||window,args;if(!init.which)init.which=init.keyCode;if("initKeyEvent"in out){out.initKeyEvent(type,bubbles,cancelable,view,ctrlKey,altKey,shiftKey,metaKey,keyCode,charCode)}else if(0>>0);var proto=Element.prototype;var querySelector=proto.querySelector;var querySelectorAll=proto.querySelectorAll;proto.querySelector=function qS(css){return find(this,querySelector,css)};proto.querySelectorAll=function qSA(css){return find(this,querySelectorAll,css)};function find(node,method,css){node.setAttribute(dataScope,null);var result=method.call(node,String(css).replace(/(^|,\s*)(:scope([ >]|$))/g,(function($0,$1,$2,$3){return $1+"["+dataScope+"]"+($3||" ")})));node.removeAttribute(dataScope);return result}})()}})(window);(function(global){"use strict";var DOMMap=global.WeakMap||function(){var counter=0,dispatched=false,drop=false,value;function dispatch(key,ce,shouldDrop){drop=shouldDrop;dispatched=false;value=undefined;key.dispatchEvent(ce)}function Handler(value){this.value=value}Handler.prototype.handleEvent=function handleEvent(e){dispatched=true;if(drop){e.currentTarget.removeEventListener(e.type,this,false)}else{value=this.value}};function DOMMap(){counter++;this.__ce__=new Event("@DOMMap:"+counter+Math.random())}DOMMap.prototype={constructor:DOMMap,"delete":function del(key){return dispatch(key,this.__ce__,true),dispatched},get:function get(key){dispatch(key,this.__ce__,false);var v=value;value=undefined;return v},has:function has(key){return dispatch(key,this.__ce__,false),dispatched},set:function set(key,value){dispatch(key,this.__ce__,true);key.addEventListener(this.__ce__.type,new Handler(value),false);return this}};return DOMMap}();function Dict(){}Dict.prototype=(Object.create||Object)(null);function createEventListener(type,callback,options){function eventListener(e){if(eventListener.once){e.currentTarget.removeEventListener(e.type,callback,eventListener);eventListener.removed=true}if(eventListener.passive){e.preventDefault=createEventListener.preventDefault}if(typeof eventListener.callback==="function"){eventListener.callback.call(this,e)}else if(eventListener.callback){eventListener.callback.handleEvent(e)}if(eventListener.passive){delete e.preventDefault}}eventListener.type=type;eventListener.callback=callback;eventListener.capture=!!options.capture;eventListener.passive=!!options.passive;eventListener.once=!!options.once;eventListener.removed=false;return eventListener}createEventListener.preventDefault=function preventDefault(){};var Event=global.CustomEvent,dE=global.dispatchEvent,aEL=global.addEventListener,rEL=global.removeEventListener,counter=0,increment=function(){counter++},indexOf=[].indexOf||function indexOf(value){var length=this.length;while(length--){if(this[length]===value){break}}return length},getListenerKey=function(options){return"".concat(options.capture?"1":"0",options.passive?"1":"0",options.once?"1":"0")},augment;try{aEL("_",increment,{once:true});dE(new Event("_"));dE(new Event("_"));rEL("_",increment,{once:true})}catch(o_O){}if(counter!==1){(function(){var dm=new DOMMap;function createAEL(aEL){return function addEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key=getListenerKey(options),i,tmp,wrap;if(!info)dm.set(this,info=new Dict);if(!(type in info))info[type]={handler:[],wrap:[]};tmp=info[type];i=indexOf.call(tmp.handler,handler);if(i<0){i=tmp.handler.push(handler)-1;tmp.wrap[i]=wrap=new Dict}else{wrap=tmp.wrap[i]}if(!(key in wrap)){wrap[key]=createEventListener(type,handler,options);aEL.call(this,type,wrap[key],wrap[key].capture)}}else{aEL.call(this,type,handler,options)}}}function createREL(rEL){return function removeEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key,i,tmp,wrap;if(info&&type in info){tmp=info[type];i=indexOf.call(tmp.handler,handler);if(-1>>0;if(typeof callback!=="function"){throw new TypeError(callback+" is not a function")}if(arguments.length>1){T=thisArg}k=0;while(k=this.length||index<-this.length){return undefined}if(index>=0){return this[index]}else{return this[this.length+index]}}}if(!window.Int32Array){window.Int32Array=Array}})(); \ No newline at end of file