diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm index 7cb7440ba8da..ead4c9665c7c 100644 --- a/code/__DEFINES/__game.dm +++ b/code/__DEFINES/__game.dm @@ -152,6 +152,7 @@ block( \ //toggles_admin /// Splits admin tabs in Statpanel #define SPLIT_ADMIN_TABS (1<<0) +#define ADMIN_STEALTHMODE (1<<1) //================================================= diff --git a/code/__DEFINES/_math.dm b/code/__DEFINES/_math.dm index 7f19c95b2bcf..138adeeda451 100644 --- a/code/__DEFINES/_math.dm +++ b/code/__DEFINES/_math.dm @@ -9,23 +9,6 @@ #define CARDINAL_DIRS list(1,2,4,8) #define CARDINAL_ALL_DIRS list(1,2,4,5,6,8,9,10) -//some colors -#define COLOR_RED "#FF0000" -#define COLOR_GREEN "#00FF00" -#define COLOR_BLUE "#0000FF" -#define COLOR_CYAN "#00FFFF" -#define COLOR_PINK "#FF00FF" -#define COLOR_YELLOW "#FFFF00" -#define COLOR_ORANGE "#FF9900" -#define COLOR_WHITE "#FFFFFF" -#define COLOR_BLACK "#000000" -#define COLOR_OIL "#030303" - -//Grass Colors -#define COLOR_G_ICE "#C7EDDE" //faded cyan -#define COLOR_G_DES "#FF7C1C" //bright orange -#define COLOR_G_JUNG "#64AA6E" //faded green - #define LEFT 1 #define RIGHT 2 @@ -49,3 +32,6 @@ /// Gets the sign of x, returns -1 if negative, 0 if 0, 1 if positive #define SIGN(x) ( ((x) > 0) - ((x) < 0) ) + +/// Performs a linear interpolation between a and b. Note that amount=0 returns a, amount=1 returns b, and amount=0.5 returns the mean of a and b. +#define LERP(a, b, amount) ( amount ? ((a) + ((b) - (a)) * (amount)) : a ) diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 85966e4032e2..f2db3980e887 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -6,6 +6,7 @@ #define MESSAGE_TYPE_SYSTEM "system" #define MESSAGE_TYPE_LOCALCHAT "localchat" #define MESSAGE_TYPE_RADIO "radio" +#define MESSAGE_TYPE_HIVEMIND "hivemind" #define MESSAGE_TYPE_INFO "info" #define MESSAGE_TYPE_WARNING "warning" #define MESSAGE_TYPE_DEADCHAT "deadchat" diff --git a/code/__DEFINES/colours.dm b/code/__DEFINES/colours.dm index 5fa106715f39..e9a03a6382da 100644 --- a/code/__DEFINES/colours.dm +++ b/code/__DEFINES/colours.dm @@ -1,214 +1,152 @@ // tg port thing -//different types of atom colourations -/// Only used by rare effects like greentext colouring mobs and when admins varedit color -#define ADMIN_COLOUR_PRIORITY 1 +//different types of atom colorations +/// Only used by rare effects like greentext coloring mobs and when admins varedit color +#define ADMIN_COLOR_PRIORITY 1 /// e.g. purple effect of the revenant on a mob, black effect when mob electrocuted -#define TEMPORARY_COLOUR_PRIORITY 2 -/// Colour splashed onto an atom (e.g. paint on turf) -#define WASHABLE_COLOUR_PRIORITY 3 -/// Colour inherent to the atom (e.g. blob color) -#define FIXED_COLOUR_PRIORITY 4 +#define TEMPORARY_COLOR_PRIORITY 2 +/// Color splashed onto an atom (e.g. paint on turf) +#define WASHABLE_COLOR_PRIORITY 3 +/// Color inherent to the atom (e.g. blob color) +#define FIXED_COLOR_PRIORITY 4 ///how many color priority levels there are. -#define COLOUR_PRIORITY_AMOUNT 4 - -#define COLOUR_DARKMODE_BACKGROUND "#202020" -#define COLOUR_DARKMODE_DARKBACKGROUND "#171717" -#define COLOUR_DARKMODE_TEXT "#a4bad6" - -#define COLOUR_WHITE "#FFFFFF" -#define COLOUR_VERY_LIGHT_GRAY "#EEEEEE" -#define COLOUR_SILVER "#C0C0C0" -#define COLOUR_GRAY "#808080" -#define COLOUR_FLOORTILE_GRAY "#8D8B8B" -#define COLOUR_DARK "#454545" -#define COLOUR_ALMOST_BLACK "#333333" -#define COLOUR_BLACK "#000000" -#define COLOUR_HALF_TRANSPARENT_BLACK "#0000007A" - -#define COLOUR_RED "#FF0000" -#define COLOUR_MOSTLY_PURE_RED "#FF3300" -#define COLOUR_DARK_RED "#A50824" -#define COLOUR_RED_LIGHT "#FF3333" -#define COLOUR_MAROON "#800000" -#define COLOUR_VIVID_RED "#FF3232" -#define COLOUR_LIGHT_GRAYISH_RED "#E4C7C5" -#define COLOUR_SOFT_RED "#FA8282" -#define COLOUR_CULT_RED "#960000" -#define COLOUR_BUBBLEGUM_RED "#950A0A" - -#define COLOUR_YELLOW "#FFFF00" -#define COLOUR_VIVID_YELLOW "#FBFF23" -#define COLOUR_VERY_SOFT_YELLOW "#FAE48E" - -#define COLOUR_OLIVE "#808000" -#define COLOUR_VIBRANT_LIME "#00FF00" -#define COLOUR_LIME "#32CD32" -#define COLOUR_DARK_LIME "#00aa00" -#define COLOUR_VERY_PALE_LIME_GREEN "#DDFFD3" -#define COLOUR_VERY_DARK_LIME_GREEN "#003300" -#define COLOUR_GREEN "#008000" -#define COLOUR_DARK_MODERATE_LIME_GREEN "#44964A" - -#define COLOUR_CYAN "#00FFFF" -#define COLOUR_DARK_CYAN "#00A2FF" -#define COLOUR_TEAL "#008080" -#define COLOUR_BLUE "#0000FF" -#define COLOUR_STRONG_BLUE "#1919c8" -#define COLOUR_BRIGHT_BLUE "#2CB2E8" -#define COLOUR_MODERATE_BLUE "#555CC2" -#define COLOUR_AMETHYST "#822BFF" -#define COLOUR_BLUE_LIGHT "#33CCFF" -#define COLOUR_NAVY "#000080" -#define COLOUR_BLUE_GRAY "#75A2BB" - -#define COLOUR_PINK "#FFC0CB" -#define COLOUR_LIGHT_PINK "#ff3cc8" -#define COLOUR_MOSTLY_PURE_PINK "#E4005B" -#define COLOUR_BLUSH_PINK "#DE5D83" -#define COLOUR_MAGENTA "#FF00FF" -#define COLOUR_STRONG_MAGENTA "#B800B8" -#define COLOUR_PURPLE "#800080" -#define COLOUR_VIOLET "#B900F7" -#define COLOUR_STRONG_VIOLET "#6927c5" - -#define COLOUR_ORANGE "#FF9900" -#define COLOUR_MOSTLY_PURE_ORANGE "#ff8000" -#define COLOUR_TAN_ORANGE "#FF7B00" -#define COLOUR_BRIGHT_ORANGE "#E2853D" -#define COLOUR_LIGHT_ORANGE "#ffc44d" -#define COLOUR_PALE_ORANGE "#FFBE9D" -#define COLOUR_BEIGE "#CEB689" -#define COLOUR_DARK_ORANGE "#C3630C" -#define COLOUR_DARK_MODERATE_ORANGE "#8B633B" - -#define COLOUR_BROWN "#BA9F6D" -#define COLOUR_DARK_BROWN "#997C4F" -#define COLOUR_ORANGE_BROWN "#a9734f" - -//Colour defines used by the soapstone (based on readability against grey tiles) -#define COLOUR_SOAPSTONE_PLASTIC "#a19d94" -#define COLOUR_SOAPSTONE_IRON "#b2b2b2" -#define COLOUR_SOAPSTONE_BRONZE "#FE8001" -#define COLOUR_SOAPSTONE_SILVER "#FFFFFF" -#define COLOUR_SOAPSTONE_GOLD "#FFD900" -#define COLOUR_SOAPSTONE_DIAMOND "#00ffee" - -#define COLOUR_GREEN_GRAY "#99BB76" -#define COLOUR_RED_GRAY "#B4696A" -#define COLOUR_PALE_BLUE_GRAY "#98C5DF" -#define COLOUR_PALE_GREEN_GRAY "#B7D993" -#define COLOUR_PALE_RED_GRAY "#D59998" -#define COLOUR_PALE_PURPLE_GRAY "#CBB1CA" -#define COLOUR_PURPLE_GRAY "#AE8CA8" - -//Colour defines used by the assembly detailer. -#define COLOUR_ASSEMBLY_BLACK "#545454" -#define COLOUR_ASSEMBLY_BGRAY "#9497AB" -#define COLOUR_ASSEMBLY_WHITE "#E2E2E2" -#define COLOUR_ASSEMBLY_RED "#CC4242" -#define COLOUR_ASSEMBLY_ORANGE "#E39751" -#define COLOUR_ASSEMBLY_BEIGE "#AF9366" -#define COLOUR_ASSEMBLY_BROWN "#97670E" -#define COLOUR_ASSEMBLY_GOLD "#AA9100" -#define COLOUR_ASSEMBLY_YELLOW "#CECA2B" -#define COLOUR_ASSEMBLY_GURKHA "#999875" -#define COLOUR_ASSEMBLY_LGREEN "#789876" -#define COLOUR_ASSEMBLY_GREEN "#44843C" -#define COLOUR_ASSEMBLY_LBLUE "#5D99BE" -#define COLOUR_ASSEMBLY_BLUE "#38559E" -#define COLOUR_ASSEMBLY_PURPLE "#6F6192" - -///Colours for xenobiology vatgrowing -#define COLOUR_SAMPLE_YELLOW "#c0b823" -#define COLOUR_SAMPLE_PURPLE "#342941" -#define COLOUR_SAMPLE_GREEN "#98b944" -#define COLOUR_SAMPLE_BROWN "#91542d" -#define COLOUR_SAMPLE_GRAY "#5e5856" - -///Main colours for UI themes -#define COLOUR_THEME_MIDNIGHT "#6086A0" -#define COLOUR_THEME_PLASMAFIRE "#FFB200" -#define COLOUR_THEME_RETRO "#24CA00" -#define COLOUR_THEME_SLIMECORE "#4FB259" -#define COLOUR_THEME_OPERATIVE "#B8221F" -#define COLOUR_THEME_GLASS "#75A4C4" -#define COLOUR_THEME_CLOCKWORK "#CFBA47" - -///Colours for eigenstates -#define COLOUR_PERIWINKLEE "#9999FF" +#define COLOR_PRIORITY_AMOUNT 4 + +// BLACK AND WHITE COLOR DEFINE. + +/// White rgb(255, 255, 255) +#define COLOR_WHITE "#FFFFFF" +/// Black rgb(0, 0, 0) +#define COLOR_BLACK "#000000" + +// THE THREE PRIMARIES COLORS DEFINES. + +/// Red rgb(255, 0, 0) +#define COLOR_RED "#FF0000" +/// Green rgb(0, 255, 0) +#define COLOR_GREEN "#00FF00" +/// Blue rgb(0, 0, 255) +#define COLOR_BLUE "#0000FF" + +//mix of two full primary colors + +/// Cyan rgb(0, 255, 255) B + G +#define COLOR_CYAN "#00FFFF" +/// Magenta rgb(255, 0, 255) R+B +#define COLOR_MAGENTA "#FF00FF" +/// Yellow rgb(255, 255, 0) R+G +#define COLOR_YELLOW "#FFFF00" + +// colors define in use bellow + +/// Olive rgb(128, 128, 0) +#define COLOR_OLIVE "#808000" +/// Silver rgb(192, 192, 192) shade of grey +#define COLOR_SILVER "#C0C0C0" +/// Gray rgb(128, 128, 128) +#define COLOR_GRAY "#808080" + +#define COLOR_FLOORTILE_GRAY "#8D8B8B" + +#define COLOR_HALF_TRANSPARENT_BLACK "#0000007A" + +#define COLOR_DARK_RED "#A50824" + +/// Maroon rgb(128, 0, 0) shade of red +#define COLOR_MAROON "#800000" + +#define COLOR_VIVID_RED "#FF3232" +#define COLOR_LIGHT_GRAYISH_RED "#E4C7C5" +#define COLOR_SOFT_RED "#FA8282" + +#define COLOR_VERY_SOFT_YELLOW "#FAE48E" + +///light green rgb( 0, 128, 0) +#define COLOR_LIGHT_GREEN "#008000" +#define COLOR_DARK_MODERATE_LIME_GREEN "#44964A" + +#define COLOR_TEAL "#008080" + +#define COLOR_MODERATE_BLUE "#555CC2" +/// Purple rgb( 128, 0, 128) +#define COLOR_PURPLE "#800080" +#define COLOR_STRONG_VIOLET "#6927c5" + +#define LIGHT_BEIGE "#CEB689" +#define COLOR_DARK_MODERATE_ORANGE "#8B633B" + +#define COLOR_BROWN "#BA9F6D" +#define COLOR_DARK_BROWN "#997C4F" + /** - * Some defines to generalise colours used in lighting. + * Some defines to generalise Colors used in lighting. * - * Important note: colours can end up significantly different from the basic html picture, especially when saturated + * Important note: Colors can end up significantly different from the basic html picture, especially when saturated */ -/// Full white. rgb(255, 255, 255) -#define LIGHT_COLOR_WHITE "#FFFFFF" /// Bright but quickly dissipating neon green. rgb(100, 200, 100) -#define LIGHT_COLOUR_GREEN "#64C864" -/// Electric green. rgb(0, 255, 0) -#define LIGHT_COLOUR_ELECTRIC_GREEN "#00FF00" +#define LIGHT_COLOR_GREEN "#64C864" /// Cold, diluted blue. rgb(100, 150, 250) -#define LIGHT_COLOUR_BLUE "#6496FA" +#define LIGHT_COLOR_BLUE "#6496FA" /// Light blueish green. rgb(125, 225, 175) -#define LIGHT_COLOUR_BLUEGREEN "#7DE1AF" +#define LIGHT_COLOR_BLUEGREEN "#7DE1AF" /// Diluted cyan. rgb(125, 225, 225) -#define LIGHT_COLOUR_CYAN "#7DE1E1" -/// Electric cyan rgb(0, 255, 255) -#define LIGHT_COLOUR_ELECTRIC_CYAN "#00FFFF" +#define LIGHT_COLOR_CYAN "#7DE1E1" /// More-saturated cyan. rgb(64, 206, 255) -#define LIGHT_COLOUR_LIGHT_CYAN "#40CEFF" +#define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" /// Saturated blue. rgb(51, 117, 248) -#define LIGHT_COLOUR_DARK_BLUE "#6496FA" +#define LIGHT_COLOR_DARK_BLUE "#3375F8" /// Diluted, mid-warmth pink. rgb(225, 125, 225) -#define LIGHT_COLOUR_PINK "#E17DE1" +#define LIGHT_COLOR_PINK "#E17DE1" /// Dimmed yellow, leaning kaki. rgb(225, 225, 125) -#define LIGHT_COLOUR_YELLOW "#E1E17D" +#define LIGHT_COLOR_YELLOW "#E1E17D" /// Clear brown, mostly dim. rgb(150, 100, 50) -#define LIGHT_COLOUR_BROWN "#966432" +#define LIGHT_COLOR_BROWN "#966432" /// Mostly pure orange. rgb(250, 150, 50) -#define LIGHT_COLOUR_ORANGE "#FA9632" +#define LIGHT_COLOR_ORANGE "#FA9632" /// Light Purple. rgb(149, 44, 244) -#define LIGHT_COLOUR_PURPLE "#952CF4" +#define LIGHT_COLOR_PURPLE "#952CF4" /// Less-saturated light purple. rgb(155, 81, 255) -#define LIGHT_COLOUR_LAVENDER "#9B51FF" +#define LIGHT_COLOR_LAVENDER "#9B51FF" ///slightly desaturated bright yellow. -#define LIGHT_COLOUR_HOLY_MAGIC "#FFF743" +#define LIGHT_COLOR_HOLY_MAGIC "#FFF743" /// deep crimson -#define LIGHT_COLOUR_BLOOD_MAGIC "#D00000" +#define LIGHT_COLOR_BLOOD_MAGIC "#D00000" /* These ones aren't a direct color like the ones above, because nothing would fit */ /// Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25) -#define LIGHT_COLOUR_FIRE "#FAA019" +#define LIGHT_COLOR_FIRE "#FAA019" /// Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24) -#define LIGHT_COLOUR_LAVA "#C48A18" +#define LIGHT_COLOR_LAVA "#C48A18" /// Bright, non-saturated red. Leaning slightly towards pink for visibility. rgb(250, 100, 75) -#define LIGHT_COLOUR_FLARE "#FA644B" +#define LIGHT_COLOR_FLARE "#FA644B" /// Weird color, between yellow and green, very slimy. rgb(175, 200, 75) -#define LIGHT_COLOUR_SLIME_LAMP "#AFC84B" +#define LIGHT_COLOR_SLIME_LAMP "#AFC84B" /// Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) -#define LIGHT_COLOUR_TUNGSTEN "#FAE1AF" +#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" /// Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) -#define LIGHT_COLOUR_HALOGEN "#F0FAFA" - -//The GAGS greyscale_colours for each department's computer/machine circuits -#define CIRCUIT_COLOUR_GENERIC "#1A7A13" -#define CIRCUIT_COLOUR_COMMAND "#1B4594" -#define CIRCUIT_COLOUR_SECURITY "#9A151E" -#define CIRCUIT_COLOUR_SCIENCE "#BC4A9B" -#define CIRCUIT_COLOUR_SERVICE "#92DCBA" -#define CIRCUIT_COLOUR_MEDICAL "#00CCFF" -#define CIRCUIT_COLOUR_ENGINEERING "#F8D700" -#define CIRCUIT_COLOUR_SUPPLY "#C47749" +#define LIGHT_COLOR_HALOGEN "#F0FAFA" /// The default color for admin say, used as a fallback when the preference is not enabled -#define DEFAULT_ASAY_COLOUR COLOUR_MOSTLY_PURE_RED -#define DEFAULT_HEX_COLOUR_LEN 6 +#define COLOR_MOSTLY_PURE_RED "#FF3300" +#define DEFAULT_ASAY_COLOR COLOR_MOSTLY_PURE_RED + +#define DEFAULT_HEX_COLOR_LEN 6 -// Colour filters +// Color filters /// Icon filter that creates ambient occlusion #define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") /// Icon filter that creates gaussian blur #define GAUSSIAN_BLUR(filter_size) filter(type="blur", size=filter_size) + +//some colors coming from _math.dm + +#define COLOR_ORANGE "#FF9900" +#define COLOR_OIL "#030303" + +//Grass Colors coming from _math.dm + +#define COLOR_G_ICE "#C7EDDE" //faded cyan +#define COLOR_G_DES "#FF7C1C" //bright orange +#define COLOR_G_JUNG "#64AA6E" //faded green diff --git a/code/__DEFINES/equipment.dm b/code/__DEFINES/equipment.dm index f0688282572d..375dd0db540d 100644 --- a/code/__DEFINES/equipment.dm +++ b/code/__DEFINES/equipment.dm @@ -194,11 +194,11 @@ //=========================================================================================== //Marine armor only, use for flags_marine_armor. -#define ARMOR_SQUAD_OVERLAY 1 -#define ARMOR_LAMP_OVERLAY 2 -#define ARMOR_LAMP_ON 4 -#define ARMOR_IS_REINFORCED 8 -#define SYNTH_ALLOWED 16 +#define ARMOR_SQUAD_OVERLAY (1<<0) +#define ARMOR_LAMP_OVERLAY (1<<1) +#define ARMOR_LAMP_ON (1<<2) +#define ARMOR_IS_REINFORCED (1<<3) +#define SYNTH_ALLOWED (1<<4) //=========================================================================================== //=========================================================================================== diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 764282d59765..f4503aeea5d5 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -170,8 +170,7 @@ #define COMSIG_KB_YAUTJA_BUTCHER "keybinding_yautja_butcher" #define COMSIG_KB_YAUTJA_PRED_BUY "keybinding_yautja_pred_buy" #define COMSIG_KB_YAUTJA_MARK_PANEL "keybinding_yautja_mark_panel" -#define COMSIG_KB_YAUTJA_MARK_FOR_HUNT "keybinding_yautja_mark_for_hunt" -#define COMSIG_KB_YAUTJA_REMOVE_FROM_HUNT "keybinding_yautja_remove_from_hunt" +#define COMSIG_KB_YAUTJA_TOGGLE_MARK_FOR_HUNT "keybinding_yautja_toggle_mark_for_hunt" // Yautja Bracer #define COMSIG_KB_YAUTJA_TOGGLE_NOTIFICATION_SOUND "keybinding_yautja_toggle_notification_sound" @@ -192,6 +191,7 @@ #define COMSIG_KB_YAUTJA_BRACERNAME "keybinding_yautja_bracername" #define COMSIG_KB_YAUTJA_IDCHIP "keybinding_yautja_idchip" #define COMSIG_KB_YAUTJA_LINK_BRACER "keybinding_yautja_link_bracer" +#define COMSIG_KB_YAUTJA_CONTROL_FALCON "keybinding_yautja_control_falcon" //mask #define COMSIG_KB_YAUTJA_MASK_TOGGLE_ZOOM "keybinding_yautja_mask_toggle_zoom" diff --git a/code/__DEFINES/minimap.dm b/code/__DEFINES/minimap.dm index 003d723600c4..57c5ffeba38a 100644 --- a/code/__DEFINES/minimap.dm +++ b/code/__DEFINES/minimap.dm @@ -71,7 +71,6 @@ GLOBAL_LIST_INIT(all_minimap_flags, bitfield2list(MINIMAP_FLAG_ALL)) #define MINIMAP_ICON_COLOR_COMMANDER "#c6fcfc" #define MINIMAP_ICON_COLOR_HEAD "#F0C542" -#define MINIMAP_ICON_COLOR_SILVER "#c0c0c0" #define MINIMAP_ICON_COLOR_BRONZE "#eb9545" #define MINIMAP_ICON_COLOR_DOCTOR "#b83737" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index e50d9e72497c..9cd69e61c8b2 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -47,9 +47,7 @@ //disabilities #define NEARSIGHTED (1<<0) -#define EPILEPSY (1<<1) -#define COUGHING (1<<2) -#define TOURETTES (1<<3) + #define NERVOUS (1<<4) #define OPIATE_RECEPTOR_DEFICIENCY (1<<5) //================================================= @@ -197,22 +195,22 @@ //================================================= //Species flags. -#define NO_BLOOD (1<<0) -#define NO_BREATHE (1<<1) +#define NO_BLOOD (1<<0) +#define NO_BREATHE (1<<1) #define NO_CLONE_LOSS (1<<2) -#define NO_SLIP (1<<3) +#define NO_SLIP (1<<3) #define NO_POISON (1<<4) -#define NO_CHEM_METABOLIZATION (1<<5) //Prevents reagents from acting on_mob_life(). +#define NO_CHEM_METABOLIZATION (1<<5) //Prevents reagents from acting on_mob_life(). #define HAS_SKIN_TONE (1<<6) -#define HAS_SKIN_COLOR (1<<7) -#define HAS_LIPS (1<<8) +#define HAS_SKIN_COLOR (1<<7) +#define HAS_LIPS (1<<8) #define HAS_UNDERWEAR (1<<9) -#define IS_WHITELISTED (1<<10) -#define IS_SYNTHETIC (1<<11) -#define NO_NEURO (1<<12) +#define IS_WHITELISTED (1<<10) +#define IS_SYNTHETIC (1<<11) +#define NO_NEURO (1<<12) #define SPECIAL_BONEBREAK (1<<13) //species do not get their bonebreak chance modified by endurance -#define NO_SHRAPNEL (1<<14) -#define HAS_HARDCRIT (1<<15) +#define NO_SHRAPNEL (1<<14) +#define HAS_HARDCRIT (1<<15) //================================================= diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index 0ce7e508daac..26567be26255 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -23,4 +23,4 @@ #define MAX_EMOTE_LEN 256 #define MAX_PAPER_MESSAGE_LEN 3072 #define MAX_BOOK_MESSAGE_LEN 9216 -#define MAX_NAME_LEN 26 +#define MAX_NAME_LEN 28 diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index b0e97e05e9b2..fdfec5e8ca08 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.7.0" +#define TGS_DMAPI_VERSION "7.0.2" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -73,12 +73,12 @@ #define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3 /// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path. #define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 -/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND. -#define TGS_EVENT_BYOND_INSTALL_START 5 -/// When a BYOND install operation fails. Parameters: Error message -#define TGS_EVENT_BYOND_INSTALL_FAIL 6 -/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND. -#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7 +/// Before a engine install operation begins. Parameters: Version string of the installing engine. +#define TGS_EVENT_ENGINE_INSTALL_START 5 +/// When a engine install operation fails. Parameters: Error message +#define TGS_EVENT_ENGINE_INSTALL_FAIL 6 +/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine. +#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7 /// When the compiler starts running. Parameters: Game directory path, origin commit SHA. #define TGS_EVENT_COMPILE_START 8 /// When a compile is cancelled. No parameters. @@ -108,7 +108,7 @@ // #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 /// After a single submodule update is performed. Parameters: Updated submodule name. #define TGS_EVENT_REPO_SUBMODULE_UPDATE 23 -/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, byond version. +/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine. #define TGS_EVENT_PRE_DREAM_MAKER 24 /// Whenever a deployment folder is deleted from disk. Parameters: Game directory path. #define TGS_EVENT_DEPLOYMENT_CLEANUP 25 @@ -122,6 +122,7 @@ /// The watchdog will restart on reboot. #define TGS_REBOOT_MODE_RESTART 2 +// Note that security levels are currently meaningless in OpenDream /// DreamDaemon Trusted security level. #define TGS_SECURITY_TRUSTED 0 /// DreamDaemon Safe security level. @@ -136,6 +137,11 @@ /// DreamDaemon invisible visibility level. #define TGS_VISIBILITY_INVISIBLE 2 +/// The Build Your Own Net Dream engine. +#define TGS_ENGINE_TYPE_BYOND 0 +/// The OpenDream engine. +#define TGS_ENGINE_TYPE_OPENDREAM 1 + //REQUIRED HOOKS /** @@ -420,6 +426,7 @@ /** * Send a message to connected chats. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. @@ -429,6 +436,7 @@ /** * Send a private message to a specific user. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. @@ -438,6 +446,7 @@ /** * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. @@ -449,6 +458,10 @@ /world/proc/TgsVersion() return +/// Returns the running engine type +/world/proc/TgsEngine() + return + /// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsApiVersion() return diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 8c93957c3ca0..c2abe21a26ad 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -155,6 +155,8 @@ #define TRAIT_FORCED_STANDING "forcedstanding" /// Stuns preventing movement and using objects but without further impairement #define TRAIT_INCAPACITATED "incapacitated" +/// Disoriented. Unable to talk properly, and unable to use some skills as Xeno +#define TRAIT_DAZED "dazed" /// Apply this to identify a mob as merged with weeds #define TRAIT_MERGED_WITH_WEEDS "merged_with_weeds" @@ -313,6 +315,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED, "TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED, "TRAIT_FLOORED" = TRAIT_FLOORED, + "TRAIT_DAZED" = TRAIT_DAZED, "TRAIT_UNDENSE" = TRAIT_UNDENSE, "TRAIT_YAUTJA_TECH" = TRAIT_YAUTJA_TECH, "TRAIT_SUPER_STRONG" = TRAIT_SUPER_STRONG, @@ -339,6 +342,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_VULTURE_USER" = TRAIT_VULTURE_USER, "TRAIT_CLOAKED" = TRAIT_CLOAKED, ), +// /mob/living/carbon/human = list( +// ), /mob/living/carbon/xenomorph = list( "TRAIT_ABILITY_NO_PLASMA_TRANSFER" = TRAIT_ABILITY_NO_PLASMA_TRANSFER, "TRAIT_ABILITY_OVIPOSITOR" = TRAIT_ABILITY_OVIPOSITOR, @@ -416,6 +421,7 @@ GLOBAL_LIST(trait_name_map) #define TRAIT_SOURCE_ATTACHMENT(slot) "t_s_attachment_[slot]" ///Status trait coming from ability #define TRAIT_SOURCE_ABILITY(ability) "t_s_ability_[ability]" +#define TRAIT_SOURCE_LIMB(limb) "t_s_limb_[limb]" ///Status trait forced by the xeno action charge #define TRAIT_SOURCE_XENO_ACTION_CHARGE "t_s_xeno_action_charge" ///Status trait coming from a xeno nest diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index 590ee9b97d41..e3a35d0c4744 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -177,6 +177,20 @@ /// The time until you can re-corrupt a comms relay after the last pylon was destroyed #define XENO_PYLON_DESTRUCTION_DELAY (5 MINUTES) +/// Evolution boost during hijack +#define XENO_HIJACK_EVILUTION_BUFF 10 + +/// For how long the buff lasts +#define XENO_HIJACK_EVILUTION_TIME (3 MINUTES) + +/// If this is marine to xeno ratio during hijack, xenos see marines on tacmap +#define HIJACK_RATIO_FOR_TACMAP 0.8 + +/// Xenos need to have their number to marines ratio lower than this to get larvae from pylons +#define ENDGAME_LARVA_CAP_MULTIPLIER 0.5 + +/// What percent of their numbers xeno get from pylons +#define LARVA_ADDITION_MULTIPLIER 0.10 /// The time against away_timer when an AFK xeno larva can be replaced #define XENO_LEAVE_TIMER_LARVA 80 //80 seconds diff --git a/code/__HELPERS/#maths.dm b/code/__HELPERS/#maths.dm index 6ea534a79923..7eea79742148 100644 --- a/code/__HELPERS/#maths.dm +++ b/code/__HELPERS/#maths.dm @@ -9,11 +9,10 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, // MATH DEFINES #define Ceiling(x) (-round(-x)) -#define Clamp(val, min_val, max_val) (max(min_val, min(val, max_val))) #define CLAMP01(x) (clamp(x, 0, 1)) // cotangent -#define Cot(x) (1 / Tan(x)) +#define Cot(x) (1 / tan(x)) // cosecant #define Csc(x) (1 / sin(x)) @@ -21,19 +20,12 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, #define Default(a, b) (a ? a : b) #define Floor(x) (round(x)) -//Finds nearest integer to x, above or below -//something.5 or higher, round up, else round down -#define roundNearest(x) (((Ceiling(x) - x) <= (x - Floor(x))) ? Ceiling(x) : Floor(x)) - // Greatest Common Divisor - Euclid's algorithm #define Gcd(a, b) (b ? Gcd(b, a % b) : a) #define Inverse(x) (1 / x) #define IsEven(x) (x % 2 == 0) -// Returns true if val is from min to max, inclusive. -#define IsInRange(val, min, max) (min <= val && val <= max) - #define IsInteger(x) (Floor(x) == x) #define IsOdd(x) (!IsEven(x)) #define IsMultiple(x, y) (x % y == 0) @@ -47,9 +39,6 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, // secant #define Sec(x) (1 / cos(x)) -// tangent -#define Tan(x) (sin(x) / cos(x)) - // 57.2957795 = 180 / Pi #define ToDegrees(radians) (radians * 57.2957795) @@ -85,11 +74,6 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, return rotated_point -// Round up -/proc/n_ceil(num) - if(isnum(num)) - return round(num)+1 - ///Format a power value in W, kW, MW, or GW. /proc/display_power(powerused) if(powerused < 1000) //Less than a kW diff --git a/code/__HELPERS/_time.dm b/code/__HELPERS/_time.dm index 8386feff41c2..733ca659501b 100644 --- a/code/__HELPERS/_time.dm +++ b/code/__HELPERS/_time.dm @@ -48,7 +48,7 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) return gameTimestamp("mm:ss", time) /proc/time_left_until(target_time, current_time, time_unit) - return CEILING(target_time - current_time, 1) / time_unit + return Ceiling(target_time - current_time) / time_unit /proc/text2duration(text = "00:00") // Attempts to convert time text back to time value var/split_text = splittext(text, ":") @@ -91,21 +91,21 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) return "right now" if(second < 60) return "[second] second[(second != 1)? "s":""]" - var/minute = FLOOR(second / 60, 1) + var/minute = Floor(second / 60) second = FLOOR(MODULUS(second, 60), round_seconds_to) var/secondT if(second) secondT = " and [second] second[(second != 1)? "s":""]" if(minute < 60) return "[minute] minute[(minute != 1)? "s":""][secondT]" - var/hour = FLOOR(minute / 60, 1) + var/hour = Floor(minute / 60) minute = MODULUS(minute, 60) var/minuteT if(minute) minuteT = " and [minute] minute[(minute != 1)? "s":""]" if(hour < 24) return "[hour] hour[(hour != 1)? "s":""][minuteT][secondT]" - var/day = FLOOR(hour / 24, 1) + var/day = Floor(hour / 24) hour = MODULUS(hour, 24) var/hourT if(hour) diff --git a/code/__HELPERS/filters.dm b/code/__HELPERS/filters.dm index aa8d77c81d3a..29e3ec9efb1e 100644 --- a/code/__HELPERS/filters.dm +++ b/code/__HELPERS/filters.dm @@ -46,7 +46,7 @@ GLOBAL_LIST_INIT(master_filter_info, list( "y" = -1, "size" = 1, "offset" = 0, - "color" = COLOUR_HALF_TRANSPARENT_BLACK + "color" = COLOR_HALF_TRANSPARENT_BLACK ) ), "blur" = list( diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 97243002740d..29755683165c 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -548,9 +548,9 @@ world if (!value) return color var/list/RGB = ReadRGB(color) - RGB[1] = Clamp(RGB[1]+value,0,255) - RGB[2] = Clamp(RGB[2]+value,0,255) - RGB[3] = Clamp(RGB[3]+value,0,255) + RGB[1] = clamp(RGB[1]+value,0,255) + RGB[2] = clamp(RGB[2]+value,0,255) + RGB[3] = clamp(RGB[3]+value,0,255) return rgb(RGB[1],RGB[2],RGB[3]) /proc/sort_atoms_by_layer(list/atoms) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 830e612712e2..30ef9428586d 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -391,6 +391,19 @@ original += result return original +/// Returns a list of atoms sorted by each entry's distance to `target`. +/proc/sort_list_dist(list/atom/list_to_sort, atom/target) + var/list/distances = list() + for(var/atom/A as anything in list_to_sort) + // Just in case this happens anyway. + if(!istype(A)) + stack_trace("sort_list_dist() was called with a list containing a non-atom object. ([A.type])") + return list_to_sort + + distances[A] = get_dist_sqrd(A, target) + + return sortTim(distances, GLOBAL_PROC_REF(cmp_numeric_asc), TRUE) + //Converts a bitfield to a list of numbers (or words if a wordlist is provided) /proc/bitfield2list(bitfield = 0, list/wordlist) var/list/r = list() diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 2c0fdfa42a8a..14d5217eacd9 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -40,11 +40,11 @@ #define skillcheckexplicit(user, skill, req_level) ((!user.skills || user.skills.is_skilled(skill, req_level, TRUE))) // Ensure the frequency is within bounds of what it should be sending/receiving at -// Sets f within bounds via `Clamp(round(f), 1441, 1489)` +// Sets f within bounds via `clamp(round(f), 1441, 1489)` // If f is even, adds 1 to its value to make it odd -#define sanitize_frequency(f) ((Clamp(round(f), 1441, 1489) % 2) == 0 ? \ - Clamp(round(f), 1441, 1489) + 1 : \ - Clamp(round(f), 1441, 1489) \ +#define sanitize_frequency(f) ((clamp(round(f), 1441, 1489) % 2) == 0 ? \ + clamp(round(f), 1441, 1489) + 1 : \ + clamp(round(f), 1441, 1489) \ ) //Turns 1479 into 147.9 @@ -893,86 +893,103 @@ GLOBAL_DATUM(action_purple_power_up, /image) if(!GLOB.busy_indicator_clock) GLOB.busy_indicator_clock = image('icons/mob/mob.dmi', null, "busy_generic", "pixel_y" = 22) GLOB.busy_indicator_clock.layer = FLY_LAYER + GLOB.busy_indicator_clock.plane = ABOVE_HUD_PLANE return GLOB.busy_indicator_clock else if(busy_type == BUSY_ICON_MEDICAL) if(!GLOB.busy_indicator_medical) GLOB.busy_indicator_medical = image('icons/mob/mob.dmi', null, "busy_medical", "pixel_y" = 0) //This shows directly on top of the mob, no offset! GLOB.busy_indicator_medical.layer = FLY_LAYER + GLOB.busy_indicator_medical.plane = ABOVE_HUD_PLANE return GLOB.busy_indicator_medical else if(busy_type == BUSY_ICON_BUILD) if(!GLOB.busy_indicator_build) GLOB.busy_indicator_build = image('icons/mob/mob.dmi', null, "busy_build", "pixel_y" = 22) GLOB.busy_indicator_build.layer = FLY_LAYER + GLOB.busy_indicator_build.plane = ABOVE_HUD_PLANE return GLOB.busy_indicator_build else if(busy_type == BUSY_ICON_FRIENDLY) if(!GLOB.busy_indicator_friendly) GLOB.busy_indicator_friendly = image('icons/mob/mob.dmi', null, "busy_friendly", "pixel_y" = 22) GLOB.busy_indicator_friendly.layer = FLY_LAYER + GLOB.busy_indicator_friendly.plane = ABOVE_HUD_PLANE return GLOB.busy_indicator_friendly else if(busy_type == BUSY_ICON_HOSTILE) if(!GLOB.busy_indicator_hostile) GLOB.busy_indicator_hostile = image('icons/mob/mob.dmi', null, "busy_hostile", "pixel_y" = 22) GLOB.busy_indicator_hostile.layer = FLY_LAYER + GLOB.busy_indicator_hostile.plane = ABOVE_HUD_PLANE return GLOB.busy_indicator_hostile else if(busy_type == EMOTE_ICON_HIGHFIVE) if(!GLOB.emote_indicator_highfive) GLOB.emote_indicator_highfive = image('icons/mob/mob.dmi', null, "emote_highfive", "pixel_y" = 22) GLOB.emote_indicator_highfive.layer = FLY_LAYER + GLOB.emote_indicator_highfive.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_highfive else if(busy_type == EMOTE_ICON_FISTBUMP) if(!GLOB.emote_indicator_fistbump) GLOB.emote_indicator_fistbump = image('icons/mob/mob.dmi', null, "emote_fistbump", "pixel_y" = 22) GLOB.emote_indicator_fistbump.layer = FLY_LAYER + GLOB.emote_indicator_fistbump.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_fistbump else if(busy_type == EMOTE_ICON_ROCK_PAPER_SCISSORS) if(!GLOB.emote_indicator_rock_paper_scissors) GLOB.emote_indicator_rock_paper_scissors = image('icons/mob/mob.dmi', null, "emote_rps", "pixel_y" = 22) GLOB.emote_indicator_rock_paper_scissors.layer = FLY_LAYER + GLOB.emote_indicator_rock_paper_scissors.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_rock_paper_scissors else if(busy_type == EMOTE_ICON_ROCK) if(!GLOB.emote_indicator_rock) GLOB.emote_indicator_rock = image('icons/mob/mob.dmi', null, "emote_rock", "pixel_y" = 22) GLOB.emote_indicator_rock.layer = FLY_LAYER + GLOB.emote_indicator_rock.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_rock else if(busy_type == EMOTE_ICON_PAPER) if(!GLOB.emote_indicator_paper) GLOB.emote_indicator_paper = image('icons/mob/mob.dmi', null, "emote_paper", "pixel_y" = 22) GLOB.emote_indicator_paper.layer = FLY_LAYER + GLOB.emote_indicator_paper.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_paper else if(busy_type == EMOTE_ICON_SCISSORS) if(!GLOB.emote_indicator_scissors) GLOB.emote_indicator_scissors = image('icons/mob/mob.dmi', null, "emote_scissors", "pixel_y" = 22) GLOB.emote_indicator_scissors.layer = FLY_LAYER + GLOB.emote_indicator_scissors.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_scissors else if(busy_type == EMOTE_ICON_HEADBUTT) if(!GLOB.emote_indicator_headbutt) GLOB.emote_indicator_headbutt = image('icons/mob/mob.dmi', null, "emote_headbutt", "pixel_y" = 22) GLOB.emote_indicator_headbutt.layer = FLY_LAYER + GLOB.emote_indicator_headbutt.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_headbutt else if(busy_type == EMOTE_ICON_TAILSWIPE) if(!GLOB.emote_indicator_tailswipe) GLOB.emote_indicator_tailswipe = image('icons/mob/mob.dmi', null, "emote_tailswipe", "pixel_y" = 22) GLOB.emote_indicator_tailswipe.layer = FLY_LAYER + GLOB.emote_indicator_tailswipe.plane = ABOVE_HUD_PLANE return GLOB.emote_indicator_tailswipe else if(busy_type == ACTION_RED_POWER_UP) if(!GLOB.action_red_power_up) GLOB.action_red_power_up = image('icons/effects/effects.dmi', null, "anger", "pixel_x" = 16) GLOB.action_red_power_up.layer = FLY_LAYER + GLOB.action_red_power_up.plane = ABOVE_HUD_PLANE return GLOB.action_red_power_up else if(busy_type == ACTION_GREEN_POWER_UP) if(!GLOB.action_green_power_up) GLOB.action_green_power_up = image('icons/effects/effects.dmi', null, "vitality", "pixel_x" = 16) GLOB.action_green_power_up.layer = FLY_LAYER + GLOB.action_green_power_up.plane = ABOVE_HUD_PLANE return GLOB.action_green_power_up else if(busy_type == ACTION_BLUE_POWER_UP) if(!GLOB.action_blue_power_up) GLOB.action_blue_power_up = image('icons/effects/effects.dmi', null, "shock", "pixel_x" = 16) GLOB.action_blue_power_up.layer = FLY_LAYER + GLOB.action_blue_power_up.plane = ABOVE_HUD_PLANE return GLOB.action_blue_power_up else if(busy_type == ACTION_PURPLE_POWER_UP) if(!GLOB.action_purple_power_up) GLOB.action_purple_power_up = image('icons/effects/effects.dmi', null, "pain", "pixel_x" = 16) GLOB.action_purple_power_up.layer = FLY_LAYER + GLOB.action_purple_power_up.plane = ABOVE_HUD_PLANE return GLOB.action_purple_power_up @@ -1085,7 +1102,7 @@ GLOBAL_DATUM(action_purple_power_up, /image) ) . = FALSE break - if(user_flags & INTERRUPT_DAZED && busy_user.dazed) + if(user_flags & INTERRUPT_DAZED && HAS_TRAIT(busy_user, TRAIT_DAZED)) . = FALSE break if(user_flags & INTERRUPT_EMOTE && !busy_user.flags_emote) @@ -1576,7 +1593,7 @@ GLOBAL_LIST_INIT(WALLITEMS, list( . = 0 var/i = DS2TICKS(initial_delay) do - . += CEILING(i*DELTA_CALC, 1) + . += Ceiling(i*DELTA_CALC) sleep(i*world.tick_lag*DELTA_CALC) i *= 2 while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit)) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index d302191c67eb..59d14f2e0fed 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -87,6 +87,7 @@ DEFINE_BITFIELD(flags_ammo_behaviour, list( "AMMO_IGNORE_RESIST" = AMMO_IGNORE_RESIST, "AMMO_BALLISTIC" = AMMO_BALLISTIC, "AMMO_IGNORE_COVER" = AMMO_IGNORE_COVER, + "AMMO_ANTIVEHICLE" = AMMO_ANTIVEHICLE, "AMMO_STOPPED_BY_COVER" = AMMO_STOPPED_BY_COVER, "AMMO_SPECIAL_EMBED" = AMMO_SPECIAL_EMBED, "AMMO_STRIKES_SURFACE" = AMMO_STRIKES_SURFACE, @@ -97,7 +98,6 @@ DEFINE_BITFIELD(flags_ammo_behaviour, list( "AMMO_FLAME" = AMMO_FLAME, )) - DEFINE_BITFIELD(projectile_flags, list( "PROJECTILE_SHRAPNEL" = PROJECTILE_SHRAPNEL, "PROJECTILE_BULLSEYE" = PROJECTILE_BULLSEYE, @@ -120,6 +120,7 @@ DEFINE_BITFIELD(flags_gun_features, list( "GUN_ANTIQUE" = GUN_ANTIQUE, "GUN_RECOIL_BUILDUP" = GUN_RECOIL_BUILDUP, "GUN_SUPPORT_PLATFORM" = GUN_SUPPORT_PLATFORM, + "GUN_NO_DESCRIPTION" = GUN_NO_DESCRIPTION, )) DEFINE_BITFIELD(flags_magazine, list( @@ -150,6 +151,7 @@ DEFINE_BITFIELD(flags_atom, list( "INITIALIZED" = INITIALIZED, "ATOM_DECORATED" = ATOM_DECORATED, "USES_HEARING" = USES_HEARING, + "HTML_USE_INITAL_ICON" = HTML_USE_INITAL_ICON, )) DEFINE_BITFIELD(flags_item, list( @@ -181,7 +183,7 @@ DEFINE_BITFIELD(flags_inv_hide, list( "HIDETOPHAIR" = HIDETOPHAIR, "HIDEALLHAIR" = HIDEALLHAIR, "HIDETAIL" = HIDETAIL, - "HIDEFACE" = HIDEFACE + "HIDEFACE" = HIDEFACE, )) DEFINE_BITFIELD(flags_inventory, list( @@ -327,9 +329,6 @@ DEFINE_BITFIELD(flags_area, list( DEFINE_BITFIELD(disabilities, list( "NEARSIGHTED" = NEARSIGHTED, - "EPILEPSY" = EPILEPSY, - "COUGHING" = COUGHING, - "TOURETTES" = TOURETTES, "NERVOUS" = NERVOUS, "OPIATE_RECEPTOR_DEFICIENCY" = OPIATE_RECEPTOR_DEFICIENCY, )) @@ -423,6 +422,7 @@ DEFINE_BITFIELD(toggleable_flags, list( "MODE_NO_COMBAT_CAS" = MODE_NO_COMBAT_CAS, "MODE_LZ_PROTECTION" = MODE_LZ_PROTECTION, "MODE_SHIPSIDE_SD" = MODE_SHIPSIDE_SD, + "MODE_HARDCORE_PERMA" = MODE_HARDCORE_PERMA, "MODE_DISPOSABLE_MOBS" = MODE_DISPOSABLE_MOBS, "MODE_BYPASS_JOE" = MODE_BYPASS_JOE, )) @@ -456,7 +456,9 @@ DEFINE_BITFIELD(fire_immunity, list( "FIRE_IMMUNITY_NO_DAMAGE" = FIRE_IMMUNITY_NO_DAMAGE, "FIRE_IMMUNITY_NO_IGNITE" = FIRE_IMMUNITY_NO_IGNITE, "FIRE_IMMUNITY_XENO_FRENZY" = FIRE_IMMUNITY_XENO_FRENZY, + "FIRE_VULNERABILITY" = FIRE_VULNERABILITY, )) + DEFINE_BITFIELD(vend_flags, list( "VEND_TO_HAND" = VEND_TO_HAND, "VEND_UNIFORM_RANKS" = VEND_UNIFORM_RANKS, @@ -478,3 +480,122 @@ DEFINE_BITFIELD(vehicle_flags, list( "VEHICLE_CLASS_HEAVY" = VEHICLE_CLASS_HEAVY, "VEHICLE_BYPASS_BLOCKERS" = VEHICLE_BYPASS_BLOCKERS, )) + +DEFINE_BITFIELD(flags_pass, list( + "PASS_THROUGH" = PASS_THROUGH, + "PASS_AROUND" = PASS_AROUND, + "PASS_OVER_THROW_ITEM" = PASS_OVER_THROW_ITEM, + "PASS_OVER_THROW_MOB" = PASS_OVER_THROW_MOB, + "PASS_OVER_FIRE" = PASS_OVER_FIRE, + "PASS_OVER_ACID_SPRAY" = PASS_OVER_ACID_SPRAY, + "PASS_UNDER" = PASS_UNDER, + "PASS_GLASS" = PASS_GLASS, + "PASS_MOB_IS_XENO" = PASS_MOB_IS_XENO, + "PASS_MOB_IS_HUMAN" = PASS_MOB_IS_HUMAN, + "PASS_MOB_IS_OTHER" = PASS_MOB_IS_OTHER, + "PASS_MOB_THRU_XENO" = PASS_MOB_THRU_XENO, + "PASS_MOB_THRU_HUMAN" = PASS_MOB_THRU_HUMAN, + "PASS_MOB_THRU_OTHER" = PASS_MOB_THRU_OTHER, + "PASS_TYPE_CRAWLER" = PASS_TYPE_CRAWLER, + "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, + "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, + "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, +)) + +DEFINE_BITFIELD(flags_can_pass_all, list( + "PASS_THROUGH" = PASS_THROUGH, + "PASS_AROUND" = PASS_AROUND, + "PASS_OVER_THROW_ITEM" = PASS_OVER_THROW_ITEM, + "PASS_OVER_THROW_MOB" = PASS_OVER_THROW_MOB, + "PASS_OVER_FIRE" = PASS_OVER_FIRE, + "PASS_OVER_ACID_SPRAY" = PASS_OVER_ACID_SPRAY, + "PASS_UNDER" = PASS_UNDER, + "PASS_GLASS" = PASS_GLASS, + "PASS_MOB_IS_XENO" = PASS_MOB_IS_XENO, + "PASS_MOB_IS_HUMAN" = PASS_MOB_IS_HUMAN, + "PASS_MOB_IS_OTHER" = PASS_MOB_IS_OTHER, + "PASS_MOB_THRU_XENO" = PASS_MOB_THRU_XENO, + "PASS_MOB_THRU_HUMAN" = PASS_MOB_THRU_HUMAN, + "PASS_MOB_THRU_OTHER" = PASS_MOB_THRU_OTHER, + "PASS_TYPE_CRAWLER" = PASS_TYPE_CRAWLER, + "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, + "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, + "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, +)) + +DEFINE_BITFIELD(flags_can_pass_front, list( + "PASS_THROUGH" = PASS_THROUGH, + "PASS_AROUND" = PASS_AROUND, + "PASS_OVER_THROW_ITEM" = PASS_OVER_THROW_ITEM, + "PASS_OVER_THROW_MOB" = PASS_OVER_THROW_MOB, + "PASS_OVER_FIRE" = PASS_OVER_FIRE, + "PASS_OVER_ACID_SPRAY" = PASS_OVER_ACID_SPRAY, + "PASS_UNDER" = PASS_UNDER, + "PASS_GLASS" = PASS_GLASS, + "PASS_MOB_IS_XENO" = PASS_MOB_IS_XENO, + "PASS_MOB_IS_HUMAN" = PASS_MOB_IS_HUMAN, + "PASS_MOB_IS_OTHER" = PASS_MOB_IS_OTHER, + "PASS_MOB_THRU_XENO" = PASS_MOB_THRU_XENO, + "PASS_MOB_THRU_HUMAN" = PASS_MOB_THRU_HUMAN, + "PASS_MOB_THRU_OTHER" = PASS_MOB_THRU_OTHER, + "PASS_TYPE_CRAWLER" = PASS_TYPE_CRAWLER, + "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, + "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, + "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, +)) + +DEFINE_BITFIELD(flags_can_pass_behind, list( + "PASS_THROUGH" = PASS_THROUGH, + "PASS_AROUND" = PASS_AROUND, + "PASS_OVER_THROW_ITEM" = PASS_OVER_THROW_ITEM, + "PASS_OVER_THROW_MOB" = PASS_OVER_THROW_MOB, + "PASS_OVER_FIRE" = PASS_OVER_FIRE, + "PASS_OVER_ACID_SPRAY" = PASS_OVER_ACID_SPRAY, + "PASS_UNDER" = PASS_UNDER, + "PASS_GLASS" = PASS_GLASS, + "PASS_MOB_IS_XENO" = PASS_MOB_IS_XENO, + "PASS_MOB_IS_HUMAN" = PASS_MOB_IS_HUMAN, + "PASS_MOB_IS_OTHER" = PASS_MOB_IS_OTHER, + "PASS_MOB_THRU_XENO" = PASS_MOB_THRU_XENO, + "PASS_MOB_THRU_HUMAN" = PASS_MOB_THRU_HUMAN, + "PASS_MOB_THRU_OTHER" = PASS_MOB_THRU_OTHER, + "PASS_TYPE_CRAWLER" = PASS_TYPE_CRAWLER, + "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, + "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, + "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, +)) + +DEFINE_BITFIELD(sight, list( + "BLIND" = BLIND, + "SEE_BLACKNESS" = SEE_BLACKNESS, + "SEE_INFRA" = SEE_INFRA, + "SEE_MOBS" = SEE_MOBS, + "SEE_OBJS" = SEE_OBJS, + "SEE_PIXELS" = SEE_PIXELS, + "SEE_SELF" = SEE_SELF, + "SEE_THRU" = SEE_THRU, + "SEE_TURFS" = SEE_TURFS, +)) + +DEFINE_BITFIELD(vision_flags, list( + "BLIND" = BLIND, + "SEE_BLACKNESS" = SEE_BLACKNESS, + "SEE_INFRA" = SEE_INFRA, + "SEE_MOBS" = SEE_MOBS, + "SEE_OBJS" = SEE_OBJS, + "SEE_PIXELS" = SEE_PIXELS, + "SEE_SELF" = SEE_SELF, + "SEE_THRU" = SEE_THRU, + "SEE_TURFS" = SEE_TURFS, +)) + +DEFINE_BITFIELD(vis_flags, list( + "VIS_HIDE" = VIS_HIDE, + "VIS_INHERIT_DIR" = VIS_INHERIT_DIR, + "VIS_INHERIT_ICON" = VIS_INHERIT_ICON, + "VIS_INHERIT_ICON_STATE" = VIS_INHERIT_ICON_STATE, + "VIS_INHERIT_ID" = VIS_INHERIT_ID, + "VIS_INHERIT_LAYER" = VIS_INHERIT_LAYER, + "VIS_INHERIT_PLANE" = VIS_INHERIT_PLANE, + "VIS_UNDERLAY" = VIS_UNDERLAY, +)) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index b99d52086e36..72e298d32729 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -376,8 +376,8 @@ var/shiftX = C.pixel_x / world.icon_size var/shiftY = C.pixel_y / world.icon_size var/list/actual_view = getviewsize(C ? C.view : GLOB.world_view_size) - tX = Clamp(origin.x + text2num(tX) + shiftX - round(actual_view[1] / 2) - 1, 1, world.maxx) - tY = Clamp(origin.y + text2num(tY) + shiftY - round(actual_view[2] / 2) - 1, 1, world.maxy) + tX = clamp(origin.x + text2num(tX) + shiftX - round(actual_view[1] / 2) - 1, 1, world.maxx) + tY = clamp(origin.y + text2num(tY) + shiftY - round(actual_view[2] / 2) - 1, 1, world.maxy) return locate(tX, tY, tZ) diff --git a/code/_onclick/hud/map_popups.dm b/code/_onclick/hud/map_popups.dm index aed6b46a7905..26dc93bbff2b 100644 --- a/code/_onclick/hud/map_popups.dm +++ b/code/_onclick/hud/map_popups.dm @@ -118,10 +118,11 @@ * anyway. they're effectively qdel'd. */ /client/proc/clear_map(map_name) - if(!map_name || !(map_name in screen_maps)) + if(!map_name || !screen_maps[map_name]) return FALSE for(var/atom/movable/screen/screen_obj in screen_maps[map_name]) screen_maps[map_name] -= screen_obj + remove_from_screen(screen_obj) if(screen_obj.del_on_map_removal) qdel(screen_obj) screen_maps -= map_name diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 00598d9db014..e4e8ff64c19c 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -532,9 +532,10 @@ options["Xeno Leader [xeno_lead]"] = list(TRACKER_LEADER, xeno_leader_index) xeno_leader_index++ + var/list/sorted_tunnels = sort_list_dist(user.hive.tunnels, get_turf(user)) var/tunnel_index = 1 - for(var/obj/structure/tunnel/tracked_tunnel in user.hive.tunnels) - options["Tunnel [tracked_tunnel.tunnel_desc]"] = list(TRACKER_TUNNEL, tunnel_index) + for(var/obj/structure/tunnel/tunnel in sorted_tunnels) + options["Tunnel [tunnel.tunnel_desc]"] = list(TRACKER_TUNNEL, tunnel_index) tunnel_index++ var/selected = tgui_input_list(user, "Select what you want the locator to track.", "Locator Options", options) diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index a808e7e3fd85..3255c7db2fc5 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -88,8 +88,8 @@ SUBSYSTEM_DEF(minimaps) else if(yval < smallest_y) smallest_y = yval - minimaps_by_z["[level]"].x_offset = FLOOR((SCREEN_PIXEL_SIZE-largest_x-smallest_x) / MINIMAP_SCALE, 1) - minimaps_by_z["[level]"].y_offset = FLOOR((SCREEN_PIXEL_SIZE-largest_y-smallest_y) / MINIMAP_SCALE, 1) + minimaps_by_z["[level]"].x_offset = Floor((SCREEN_PIXEL_SIZE-largest_x-smallest_x) / MINIMAP_SCALE) + minimaps_by_z["[level]"].y_offset = Floor((SCREEN_PIXEL_SIZE-largest_y-smallest_y) / MINIMAP_SCALE) icon_gen.Shift(EAST, minimaps_by_z["[level]"].x_offset) icon_gen.Shift(NORTH, minimaps_by_z["[level]"].y_offset) @@ -691,6 +691,11 @@ SUBSYSTEM_DEF(minimaps) if(faction == FACTION_NEUTRAL && isobserver(user)) faction = allowed_flags == MINIMAP_FLAG_XENO ? XENO_HIVE_NORMAL : FACTION_MARINE + if(is_xeno && xeno.hive.see_humans_on_tacmap && targeted_ztrait != ZTRAIT_MARINE_MAIN_SHIP) + allowed_flags |= MINIMAP_FLAG_USCM|MINIMAP_FLAG_PMC|MINIMAP_FLAG_UPP|MINIMAP_FLAG_CLF + targeted_ztrait = ZTRAIT_MARINE_MAIN_SHIP + map_holder = null + new_current_map = get_unannounced_tacmap_data_png(faction) old_map = get_tacmap_data_png(faction) current_svg = get_tacmap_data_svg(faction) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index e7e17876d9db..47403f3379fb 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -583,7 +583,7 @@ SUBSYSTEM_DEF(timer) be supported and may refuse to run or run with a 0 wait") if (flags & TIMER_CLIENT_TIME) // REALTIMEOFDAY has a resolution of 1 decisecond - wait = max(CEILING(wait, 1), 1) // so if we use tick_lag timers may be inserted in the "past" + wait = max(Ceiling(wait), 1) // so if we use tick_lag timers may be inserted in the "past" else wait = max(CEILING(wait, world.tick_lag), world.tick_lag) diff --git a/code/controllers/subsystem/x_evolution.dm b/code/controllers/subsystem/x_evolution.dm index be787b37de80..857af8117df2 100644 --- a/code/controllers/subsystem/x_evolution.dm +++ b/code/controllers/subsystem/x_evolution.dm @@ -11,6 +11,7 @@ SUBSYSTEM_DEF(xevolution) var/time_ratio_modifier = 0.4 var/list/boost_power = list() + var/list/overridden_power = list() var/force_boost_power = FALSE // Debugging only /datum/controller/subsystem/xevolution/Initialize(start_timeofday) @@ -18,6 +19,7 @@ SUBSYSTEM_DEF(xevolution) for(var/hivenumber in GLOB.hive_datum) HS = GLOB.hive_datum[hivenumber] boost_power[HS.hivenumber] = 1 + overridden_power[HS.hivenumber] = FALSE return SS_INIT_SUCCESS /datum/controller/subsystem/xevolution/fire(resumed = FALSE) @@ -27,6 +29,9 @@ SUBSYSTEM_DEF(xevolution) if(!HS) continue + if(overridden_power[HS.hivenumber]) + continue + if(!HS.dynamic_evolution) boost_power[HS.hivenumber] = HS.evolution_rate + HS.evolution_bonus HS.hive_ui.update_burrowed_larva() @@ -42,7 +47,7 @@ SUBSYSTEM_DEF(xevolution) //Add on any bonuses from thie hivecore after applying upgrade progress boost_power_new += (0.5 * HS.has_special_structure(XENO_STRUCTURE_CORE)) - boost_power_new = Clamp(boost_power_new, BOOST_POWER_MIN, BOOST_POWER_MAX) + boost_power_new = clamp(boost_power_new, BOOST_POWER_MIN, BOOST_POWER_MAX) boost_power_new += HS.evolution_bonus if(!force_boost_power) @@ -54,6 +59,12 @@ SUBSYSTEM_DEF(xevolution) /datum/controller/subsystem/xevolution/proc/get_evolution_boost_power(hivenumber) return boost_power[hivenumber] +/datum/controller/subsystem/xevolution/proc/override_power(hivenumber, power, override) + var/datum/hive_status/hive_status = GLOB.hive_datum[hivenumber] + boost_power[hivenumber] = power + overridden_power[hivenumber] = override + hive_status.hive_ui.update_burrowed_larva() + #undef EVOLUTION_INCREMENT_TIME #undef BOOST_POWER_MIN #undef BOOST_POWER_MAX diff --git a/code/datums/balloon_alerts/balloon_alerts.dm b/code/datums/balloon_alerts/balloon_alerts.dm index 8ef770fa9d7f..59f826fbe7d2 100644 --- a/code/datums/balloon_alerts/balloon_alerts.dm +++ b/code/datums/balloon_alerts/balloon_alerts.dm @@ -37,20 +37,15 @@ if (isnull(viewer_client)) return - var/bound_width = world.icon_size - if (ismovable(src)) - var/atom/movable/movable_source = src - bound_width = movable_source.bound_width - var/image/balloon_alert = image(loc = get_atom_on_turf(src), layer = ABOVE_MOB_LAYER) balloon_alert.plane = RUNECHAT_PLANE balloon_alert.alpha = 0 balloon_alert.color = text_color balloon_alert.appearance_flags = NO_CLIENT_COLOR|KEEP_APART|RESET_COLOR|RESET_TRANSFORM|RESET_ALPHA balloon_alert.maptext = MAPTEXT("[text]") - balloon_alert.maptext_x = (BALLOON_TEXT_WIDTH - bound_width) * -0.5 balloon_alert.maptext_height = WXH_TO_HEIGHT(viewer_client?.MeasureText(text, null, BALLOON_TEXT_WIDTH)) balloon_alert.maptext_width = BALLOON_TEXT_WIDTH + balloon_alert.maptext_x = get_maxptext_x_offset(balloon_alert) if(appearance_flags & PIXEL_SCALE) balloon_alert.appearance_flags |= PIXEL_SCALE //"[text]" diff --git a/code/datums/beam.dm b/code/datums/beam.dm index e51dcafa0218..08b5ea9f9a64 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -125,11 +125,11 @@ //Position the effect so the beam is one continous line var/a if(abs(Pixel_x)>world.icon_size) - a = Pixel_x > 0 ? round(Pixel_x/32) : CEILING(Pixel_x/world.icon_size, 1) + a = Pixel_x > 0 ? round(Pixel_x/32) : Ceiling(Pixel_x/world.icon_size) X.x += a Pixel_x %= world.icon_size if(abs(Pixel_y)>world.icon_size) - a = Pixel_y > 0 ? round(Pixel_y/32) : CEILING(Pixel_y/world.icon_size, 1) + a = Pixel_y > 0 ? round(Pixel_y/32) : Ceiling(Pixel_y/world.icon_size) X.y += a Pixel_y %= world.icon_size diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 00a5e86b5d60..8288453f7b24 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -194,7 +194,7 @@ get_new_turfs() -///Adds the luminosity and source for the afected movable atoms to keep track of their visibility. +///Adds the luminosity and source for the affected movable atoms to keep track of their visibility. /datum/component/overlay_lighting/proc/add_dynamic_lumi() LAZYSET(current_holder.affected_movable_lights, src, lumcount_range + 1) current_holder.underlays += visible_mask @@ -202,7 +202,7 @@ if(directional) current_holder.underlays += cone -///Removes the luminosity and source for the afected movable atoms to keep track of their visibility. +///Removes the luminosity and source for the affected movable atoms to keep track of their visibility. /datum/component/overlay_lighting/proc/remove_dynamic_lumi() LAZYREMOVE(current_holder.affected_movable_lights, src) current_holder.underlays -= visible_mask @@ -262,6 +262,9 @@ ///Used to determine the new valid current_holder from the parent's loc. /datum/component/overlay_lighting/proc/check_holder() var/atom/movable/movable_parent = GET_PARENT + if(QDELETED(movable_parent)) + set_holder(null) + return if(isturf(movable_parent.loc)) set_holder(movable_parent) return @@ -270,13 +273,21 @@ set_holder(null) return if(isturf(inside.loc)) - set_holder(inside) + // storage items block light, also don't be moving into a qdeleted item + if(QDELETED(inside) || istype(inside, /obj/item/storage)) + set_holder(null) + else + set_holder(inside) return set_holder(null) ///Called when the current_holder is qdeleted, to remove the light effect. /datum/component/overlay_lighting/proc/on_holder_qdel(atom/movable/source, force) + SIGNAL_HANDLER + if(QDELETED(current_holder)) + set_holder(null) + return UnregisterSignal(current_holder, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) if(directional) UnregisterSignal(current_holder, COMSIG_ATOM_DIR_CHANGE) @@ -285,6 +296,7 @@ ///Called when current_holder changes loc. /datum/component/overlay_lighting/proc/on_holder_moved(atom/movable/source, OldLoc, Dir, Forced) + SIGNAL_HANDLER if(!(overlay_lighting_flags & LIGHTING_ON)) return make_luminosity_update() @@ -328,7 +340,7 @@ turn_off() range = clamp(CEILING(new_range, 0.5), 1, 7) var/pixel_bounds = ((range - 1) * 64) + 32 - lumcount_range = CEILING(range, 1) + lumcount_range = Ceiling(range) if(current_holder && overlay_lighting_flags & LIGHTING_ON) current_holder.underlays -= visible_mask visible_mask.icon = light_overlays["[pixel_bounds]"] @@ -443,8 +455,7 @@ . = lum_power lum_power = new_lum_power var/difference = . - lum_power - for(var/t in affected_turfs) - var/turf/lit_turf = t + for(var/turf/lit_turf as anything in affected_turfs) lit_turf.dynamic_lumcount -= difference ///Here we append the behavior associated to changing lum_power. diff --git a/code/datums/components/weed_food.dm b/code/datums/components/weed_food.dm index 2335a053412f..400c2f15cf9a 100644 --- a/code/datums/components/weed_food.dm +++ b/code/datums/components/weed_food.dm @@ -90,6 +90,7 @@ RegisterSignal(parent_mob, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(parent_mob, list(COMSIG_LIVING_REJUVENATED, COMSIG_HUMAN_REVIVED), PROC_REF(on_rejuv)) RegisterSignal(parent_mob, COMSIG_HUMAN_SET_UNDEFIBBABLE, PROC_REF(on_update)) + RegisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING, PROC_REF(on_forsaken)) if(parent_turf) RegisterSignal(parent_turf, COMSIG_WEEDNODE_GROWTH, PROC_REF(on_update)) @@ -109,6 +110,7 @@ UnregisterSignal(parent_buckle, COSMIG_OBJ_AFTER_BUCKLE) if(parent_nest) UnregisterSignal(parent_nest, COMSIG_PARENT_QDELETING) + UnregisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING) /// SIGNAL_HANDLER for COMSIG_MOVABLE_MOVED /datum/component/weed_food/proc/on_move() @@ -178,6 +180,20 @@ UnregisterSignal(parent_nest, COMSIG_PARENT_QDELETING) parent_nest = null +/// SIGNAL_HANDLER for COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING +/datum/component/weed_food/proc/on_forsaken() + SIGNAL_HANDLER + + UnregisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING) + + if(!merged) + return + if(!is_ground_level(parent_mob.z)) + return + + var/datum/hive_status/hive = GLOB.hive_datum[XENO_HIVE_FORSAKEN] + weed_appearance.color = hive.color + /** * Try to start the process to turn into weeds * Returns TRUE if started successfully diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index d933b81eb620..8b84513169e6 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -204,9 +204,9 @@ GLOBAL_LIST_INIT(advance_cures, list( hidden = list( (properties["stealth"] > 2), (properties["stealth"] > 3) ) // The more symptoms we have, the less transmittable it is but some symptoms can make up for it. - SetSpread(Clamp(properties["transmittable"] - symptoms.len, BLOOD, AIRBORNE)) + SetSpread(clamp(properties["transmittable"] - symptoms.len, BLOOD, AIRBORNE)) permeability_mod = max(Ceiling(0.4 * properties["transmittable"]), 1) - cure_chance = 15 - Clamp(properties["resistance"], -5, 5) // can be between 10 and 20 + cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20 stage_prob = max(properties["stage_rate"], 2) SetSeverity(properties["severity"]) GenerateCure(properties) @@ -254,7 +254,7 @@ GLOBAL_LIST_INIT(advance_cures, list( // Will generate a random cure, the less resistance the symptoms have, the harder the cure. /datum/disease/advance/proc/GenerateCure(list/properties = list()) if(properties && properties.len) - var/res = Clamp(properties["resistance"] - (symptoms.len / 2), 1, GLOB.advance_cures.len) + var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, GLOB.advance_cures.len) cure_id = GLOB.advance_cures[res] // Get the cure name from the cure_id diff --git a/code/datums/effects/neurotoxin.dm b/code/datums/effects/neurotoxin.dm index 1657d41d8a36..490ed213292b 100644 --- a/code/datums/effects/neurotoxin.dm +++ b/code/datums/effects/neurotoxin.dm @@ -150,7 +150,7 @@ victim.hallucination = 3 victim.druggy = 3 if(70 to 100) // sound based hallucination - playsound_client(victim.client,pick('sound/voice/alien_distantroar_3.ogg','sound/voice/xenos_roaring.ogg','sound/voice/alien_queen_breath1.ogg', 'sound/voice/4_xeno_roars.ogg','sound/misc/notice2.ogg',"bone_break","gun_pulse","metalbang","pry","shatter")) + playsound_client(client = victim.client, soundin = pick('sound/voice/alien_distantroar_3.ogg','sound/voice/xenos_roaring.ogg','sound/voice/alien_queen_breath1.ogg', 'sound/voice/4_xeno_roars.ogg','sound/misc/notice2.ogg',"bone_break","gun_pulse","metalbang","pry","shatter"),vol = 65) diff --git a/code/datums/keybinding/yautja.dm b/code/datums/keybinding/yautja.dm index 4729db004582..c79788df49a3 100644 --- a/code/datums/keybinding/yautja.dm +++ b/code/datums/keybinding/yautja.dm @@ -30,16 +30,7 @@ classic_keys = list("Unbound") name = "pred_buy" full_name = "Claim equipment" - keybind_signal = COMSIG_KB_YAUTJA_BUTCHER - -/datum/keybinding/yautja/pred_buy/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - if(!isyautja(H)) - return - H.pred_buy() + keybind_signal = COMSIG_KB_YAUTJA_PRED_BUY /datum/keybinding/yautja/mark_panel hotkey_keys = list("Unbound") @@ -48,46 +39,12 @@ full_name = "Mark panel" keybind_signal = COMSIG_KB_YAUTJA_MARK_PANEL -/datum/keybinding/yautja/mark_panel/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - if(!isyautja(H)) - return - H.mark_panel() - /datum/keybinding/yautja/mark_for_hunt hotkey_keys = list("Unbound") classic_keys = list("Unbound") name = "mark_for_hunt" - full_name = "Mark for hunt" - keybind_signal = COMSIG_KB_YAUTJA_MARK_FOR_HUNT - -/datum/keybinding/yautja/mark_for_hunt/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - if(!isyautja(H)) - return - H.mark_for_hunt() - -/datum/keybinding/yautja/remove_from_hunt - hotkey_keys = list("Unbound") - classic_keys = list("Unbound") - name = "remove_from_hunt" - full_name = "Remove from hunt" - keybind_signal = COMSIG_KB_YAUTJA_REMOVE_FROM_HUNT - -/datum/keybinding/yautja/remove_from_hunt/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - if(!isyautja(H)) - return - H.remove_from_hunt() + full_name = "Toggle mark for hunt" + keybind_signal = COMSIG_KB_YAUTJA_TOGGLE_MARK_FOR_HUNT // BRACER SPECIFIC \\ @@ -168,22 +125,6 @@ full_name = "Toggle wristblades" keybind_signal = COMSIG_KB_YAUTJA_WRISTBLADES -/datum/keybinding/yautja/bracer_hunter/wristblades/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.wristblades() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.wristblades() - return TRUE - /datum/keybinding/yautja/bracer_hunter/track_gear hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -214,22 +155,6 @@ full_name = "Toggle cloak" keybind_signal = COMSIG_KB_YAUTJA_CLOAKER -/datum/keybinding/yautja/bracer_hunter/cloaker/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.cloaker() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.cloaker() - return TRUE - /datum/keybinding/yautja/bracer_hunter/caster hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -237,22 +162,6 @@ full_name = "Toggle plasma caster" keybind_signal = COMSIG_KB_YAUTJA_CASTER -/datum/keybinding/yautja/bracer_hunter/caster/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.caster() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.caster() - return TRUE - /datum/keybinding/yautja/bracer_hunter/change_explosion_type hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -283,22 +192,6 @@ full_name = "Self-destruct" keybind_signal = COMSIG_KB_YAUTJA_ACTIVATE_SUICIDE -/datum/keybinding/yautja/bracer_hunter/activate_suicide/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.activate_suicide() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.activate_suicide() - return TRUE - /datum/keybinding/yautja/bracer_hunter/injectors hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -306,21 +199,6 @@ full_name = "Create Stabilising Crystal" keybind_signal = COMSIG_KB_YAUTJA_INJECTORS -/datum/keybinding/yautja/bracer_hunter/injectors/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.injectors() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.injectors() - return TRUE /datum/keybinding/yautja/bracer_hunter/healing_capsule hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -328,22 +206,6 @@ full_name = "Create Healing Capsule" keybind_signal = COMSIG_KB_YAUTJA_CAPSULE -/datum/keybinding/yautja/bracer_hunter/healing_capsule/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.healing_capsule() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.healing_capsule() - return TRUE - /datum/keybinding/yautja/bracer_hunter/call_disc hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -351,22 +213,6 @@ full_name = "Call smart-disc" keybind_signal = COMSIG_KB_YAUTJA_CALL_DISC -/datum/keybinding/yautja/bracer_hunter/call_disc/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.call_disc() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.call_disc() - return TRUE - /datum/keybinding/yautja/bracer_hunter/remove_tracked_item hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -420,22 +266,6 @@ full_name = "Yank combi-stick" keybind_signal = COMSIG_KB_YAUTJA_CALL_COMBI -/datum/keybinding/yautja/bracer_hunter/call_combi/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.call_combi() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.call_combi() - return TRUE - /datum/keybinding/yautja/bracer_hunter/translate hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -443,22 +273,6 @@ full_name = "Translator" keybind_signal = COMSIG_KB_YAUTJA_TRANSLATE -/datum/keybinding/yautja/bracer_hunter/translate/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - - var/obj/item/clothing/gloves/yautja/hunter/gloves = H.gloves - if(istype(gloves)) - gloves.translate() - return TRUE - - var/obj/item/clothing/gloves/yautja/hunter/held = H.get_held_item() - if(istype(held)) - held.translate() - return TRUE - /datum/keybinding/yautja/bracer_hunter/bracername hotkey_keys = list("Unbound") classic_keys = list("Unbound") @@ -528,6 +342,13 @@ held.link_bracer() return TRUE +/datum/keybinding/yautja/bracer_hunter/control_falcon_drone + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + name = "control_falcon" + full_name = "Control falcon drone" + keybind_signal = COMSIG_KB_YAUTJA_CONTROL_FALCON + // Misc stuff - mask, teleporter \\ // mask @@ -545,32 +366,14 @@ classic_keys = list("Unbound") name = "toggle_zoom" full_name = "Toggle mask zoom" - keybind_signal = COMSIG_KB_YAUTJA_LINK_BRACER - -/datum/keybinding/yautja/mask/toggle_zoom/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - var/obj/item/clothing/mask/gas/yautja/mask = H.wear_mask - mask.toggle_zoom() - return TRUE + keybind_signal = COMSIG_KB_YAUTJA_MASK_TOGGLE_ZOOM /datum/keybinding/yautja/mask/togglesight hotkey_keys = list("Unbound") classic_keys = list("Unbound") name = "togglesight" full_name = "Toggle mask visors" - keybind_signal = COMSIG_KB_YAUTJA_LINK_BRACER - -/datum/keybinding/yautja/mask/togglesight/down(client/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user.mob - var/obj/item/clothing/mask/gas/yautja/mask = H.wear_mask - mask.togglesight() - return TRUE + keybind_signal = COMSIG_KB_YAUTJA_MASK_TOGGLESIGHT // teleporter diff --git a/code/datums/langchat/langchat.dm b/code/datums/langchat/langchat.dm index 83b9be0ac053..b82b03b51774 100644 --- a/code/datums/langchat/langchat.dm +++ b/code/datums/langchat/langchat.dm @@ -47,12 +47,12 @@ M.client.images -= langchat_image langchat_listeners = null -/atom/proc/langchat_set_x_offset() - langchat_image.maptext_x = world.icon_size / 2 - langchat_image.maptext_width / 2 -/atom/movable/langchat_set_x_offset() - langchat_image.maptext_x = bound_width / 2 - langchat_image.maptext_width / 2 -/mob/langchat_set_x_offset() - langchat_image.maptext_x = icon_size / 2 - langchat_image.maptext_width / 2 +/atom/proc/get_maxptext_x_offset(image/maptext_image) + return (world.icon_size / 2) - (maptext_image.maptext_width / 2) +/atom/movable/get_maxptext_x_offset(image/maptext_image) + return (bound_width / 2) - (maptext_image.maptext_width / 2) +/mob/get_maxptext_x_offset(image/maptext_image) + return (icon_size / 2) - (maptext_image.maptext_width / 2) ///Creates the image if one does not exist, resets settings that are modified by speech procs. /atom/proc/langchat_make_image(override_color = null) @@ -64,7 +64,7 @@ langchat_image.maptext_y = langchat_height langchat_image.maptext_height = 64 langchat_image.maptext_y -= LANGCHAT_MESSAGE_POP_Y_SINK - langchat_set_x_offset() + langchat_image.maptext_x = get_maxptext_x_offset(langchat_image) langchat_image.pixel_y = 0 langchat_image.alpha = 0 @@ -109,7 +109,7 @@ langchat_image.maptext = text_to_display langchat_image.maptext_width = LANGCHAT_WIDTH - langchat_set_x_offset() + langchat_image.maptext_x = get_maxptext_x_offset(langchat_image) langchat_listeners = listeners for(var/mob/M in langchat_listeners) @@ -156,7 +156,7 @@ langchat_image.maptext = text_to_display langchat_image.maptext_width = LANGCHAT_WIDTH * 2 - langchat_set_x_offset() + langchat_image.maptext_x = get_maxptext_x_offset(langchat_image) langchat_listeners = listeners for(var/mob/M in langchat_listeners) diff --git a/code/datums/medal_awards.dm b/code/datums/medal_awards.dm index ba8847c03661..a3041c622bd6 100644 --- a/code/datums/medal_awards.dm +++ b/code/datums/medal_awards.dm @@ -11,6 +11,7 @@ GLOBAL_LIST_EMPTY(medal_awards) GLOBAL_LIST_EMPTY(jelly_awards) +GLOBAL_LIST_EMPTY(medal_recommendations) /datum/recipient_awards var/list/medal_names @@ -160,7 +161,99 @@ GLOBAL_LIST_INIT(human_medals, list(MARINE_CONDUCT_MEDAL, MARINE_BRONZE_HEART_ME return TRUE -/proc/print_medal(mob/living/carbon/human/user, obj/printer) +/proc/give_medal_award_prefilled(medal_location, mob/giving_mob, chosen_recipient, recipient_rank, recipient_ckey, reason, _medal_type) + var/list/recipient_ranks = list() + for(var/datum/data/record/record in GLOB.data_core.general) + var/recipient_name = record.fields["name"] + recipient_ranks[recipient_name] = record.fields["rank"] + + if(!chosen_recipient) + return FALSE + + // Pick a medal + var/medal_type = _medal_type + if(!medal_type) + return FALSE + + // Write a citation + var/citation = strip_html(reason) + if(!citation) + return FALSE + + // Get mob information + var/posthumous = TRUE + var/mob/recipient_mob + var/found_other = FALSE + + for(var/mob/mob in GLOB.mob_list) + if(mob.real_name == chosen_recipient) + // Recipient: Check if they are dead, and get some info + // We might not get this info if gibbed, so we'd need to refactor again and find another way if we want stats always correct + if(isliving(mob) && mob.stat != DEAD) + posthumous = FALSE + recipient_mob = mob + if(found_other) + break + found_other = TRUE + if(!recipient_mob) + for(var/mob/mob in GLOB.dead_mob_list) + if(mob.real_name == chosen_recipient) + // Recipient: Check if they are dead?, and get some info + // We might not get this info if gibbed, so we'd need to refactor again and find another way if we want stats always correct + if(isliving(mob) && mob.stat != DEAD) + posthumous = FALSE + recipient_mob = mob + break + + // Create the recipient_award + if(!GLOB.medal_awards[chosen_recipient]) + GLOB.medal_awards[chosen_recipient] = new /datum/recipient_awards() + var/datum/recipient_awards/recipient_award = GLOB.medal_awards[chosen_recipient] + recipient_award.recipient_rank = recipient_rank + recipient_award.recipient_ckey = recipient_ckey + recipient_award.recipient_mob = recipient_mob + recipient_award.giver_mob += giving_mob + recipient_award.medal_names += medal_type + recipient_award.medal_citations += citation + recipient_award.posthumous += posthumous + recipient_award.giver_ckey += giving_mob.ckey + + recipient_award.giver_rank += recipient_ranks[giving_mob.real_name] // Currently not used in marine award message + recipient_award.giver_name += giving_mob.real_name // Currently not used in marine award message + + // Create an actual medal item + if(medal_location) + var/obj/item/clothing/accessory/medal/medal + switch(medal_type) + if(MARINE_CONDUCT_MEDAL) + medal = new /obj/item/clothing/accessory/medal/bronze/conduct(medal_location) + if(MARINE_BRONZE_HEART_MEDAL) + medal = new /obj/item/clothing/accessory/medal/bronze/heart(medal_location) + if(MARINE_VALOR_MEDAL) + medal = new /obj/item/clothing/accessory/medal/silver/valor(medal_location) + if(MARINE_HEROISM_MEDAL) + medal = new /obj/item/clothing/accessory/medal/gold/heroism(medal_location) + else + return FALSE + medal.recipient_name = chosen_recipient + medal.medal_citation = citation + medal.recipient_rank = recipient_rank + recipient_award.medal_items += medal + else + recipient_award.medal_items += null + + // Recipient: Add the medal to the player's stats + if(recipient_ckey) + var/datum/entity/player_entity/recipient_player = setup_player_entity(recipient_ckey) + if(recipient_player) + recipient_player.track_medal_earned(medal_type, recipient_mob, recipient_rank, citation, giving_mob) + + // Inform staff of success + message_admins("[key_name_admin(giving_mob)] awarded a [medal_type] to [chosen_recipient] for: \'[citation]\'.") + + return TRUE + +/proc/open_medal_panel(mob/living/carbon/human/user, obj/printer) var/obj/item/card/id/card = user.wear_id if(!card) to_chat(user, SPAN_WARNING("You must have an authenticated ID Card to award medals.")) @@ -178,8 +271,9 @@ GLOBAL_LIST_INIT(human_medals, list(MARINE_CONDUCT_MEDAL, MARINE_BRONZE_HEART_ME user.visible_message("ERROR: ID card not registered for [user.real_name] in USCM registry. Potential medal fraud detected.") return - if(give_medal_award(get_turf(printer))) - user.visible_message(SPAN_NOTICE("[printer] prints a medal.")) + GLOB.ic_medals_panel.user_locs[WEAKREF(user)] = WEAKREF(printer) + GLOB.ic_medals_panel.tgui_interact(user) + GLOBAL_LIST_INIT(xeno_medals, list(XENO_SLAUGHTER_MEDAL, XENO_RESILIENCE_MEDAL, XENO_SABOTAGE_MEDAL, XENO_PROLIFERATION_MEDAL, XENO_REJUVENATION_MEDAL)) @@ -364,3 +458,200 @@ GLOBAL_LIST_INIT(xeno_medals, list(XENO_SLAUGHTER_MEDAL, XENO_RESILIENCE_MEDAL, message_admins("[key_name_admin(usr)] deleted [recipient_name]'s [medal_type] for: \'[citation]\'.") return TRUE + +/datum/medal_recommendation + var/recipient_rank + var/recipient_ckey + var/recipient_name + var/recommended_by_name + var/recommended_by_ckey + var/reason + var/recommended_by_rank + + +/proc/add_medal_recommendation(mob/recommendation_giver) + // Pick a marine + var/list/possible_recipients = list() + var/list/recipient_ranks = list() + for(var/datum/data/record/record in GLOB.data_core.general) + var/recipient_name = record.fields["name"] + if(recipient_name == recommendation_giver.real_name) + continue + recipient_ranks[recipient_name] = record.fields["rank"] + possible_recipients += recipient_name + var/chosen_recipient = tgui_input_list(recommendation_giver, "Who do you want to recommend a medal for?", "Medal Recommendation", possible_recipients) + if(!chosen_recipient) + return FALSE + + // Write a citation + var/reason = strip_html(tgui_input_text(recommendation_giver, "Why does this person deserve a medal?", "Medal Recommendation", null, MAX_PAPER_MESSAGE_LEN, TRUE), MAX_PAPER_MESSAGE_LEN) + if(!reason) + return FALSE + + // Get mob information + var/recipient_rank = recipient_ranks[chosen_recipient] + var/recipient_ckey + var/mob/recipient_mob + var/found_other = FALSE + + for(var/mob/mob in GLOB.mob_list) + if(mob.real_name == chosen_recipient) + // We might not get this info if gibbed, so we'd need to refactor again and find another way if we want stats always correct + recipient_ckey = mob.persistent_ckey + recipient_mob = mob + if(found_other) + break + found_other = TRUE + if(!recipient_mob) + for(var/mob/mob in GLOB.dead_mob_list) + if(mob.real_name == chosen_recipient) + // Recipient: Check if they are dead?, and get some info + // We might not get this info if gibbed, so we'd need to refactor again and find another way if we want stats always correct + recipient_ckey = mob.persistent_ckey + recipient_mob = mob + break + + // Create the recipient_award + var/datum/medal_recommendation/recommendation = new /datum/medal_recommendation() + GLOB.medal_recommendations += recommendation + + recommendation.recipient_rank = recipient_rank + recommendation.recipient_ckey = recipient_ckey + recommendation.recipient_name = recipient_mob.real_name + recommendation.recommended_by_name = recommendation_giver.real_name + recommendation.recommended_by_ckey = recommendation_giver.ckey + recommendation.recommended_by_rank = recipient_ranks[recommendation_giver.real_name] + + + recommendation.reason = reason + + return TRUE + + +GLOBAL_DATUM_INIT(ic_medals_panel, /datum/ic_medal_panel, new) + +/datum/ic_medal_panel + var/name = "Medals Panel" + var/list/datum/weakref/user_locs = list() + +/datum/ic_medal_panel/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "IcMedalsPanel", "Medals Panel") + ui.open() + ui.set_autoupdate(FALSE) + +/datum/ic_medal_panel/ui_state(mob/user) + var/datum/weakref/user_reference = WEAKREF(user) + var/datum/weakref/loc_reference = user_locs[user_reference] + if(istype(loc_reference?.resolve(), /obj/item)) + return GLOB.not_incapacitated_and_inventory_state + else + return GLOB.not_incapacitated_and_adjacent_state + +/datum/ic_medal_panel/ui_host(mob/user) + . = ..() + var/datum/weakref/user_reference = WEAKREF(user) + var/datum/weakref/loc_reference = user_locs[user_reference] + . = loc_reference?.resolve() + +/datum/ic_medal_panel/ui_data(mob/user) + var/list/data = list() + data["recommendations"] = list() + + for(var/datum/medal_recommendation/recommendation in GLOB.medal_recommendations) + var/recommendation_list = list() + + recommendation_list["rank"] = recommendation.recipient_rank + recommendation_list["name"] = recommendation.recipient_name + recommendation_list["ref"] = REF(recommendation) + recommendation_list["recommender_name"] = recommendation.recommended_by_name + recommendation_list["reason"] = recommendation.reason + recommendation_list["recommender_rank"] = recommendation.recommended_by_rank + + data["recommendations"] += list(recommendation_list) + return data + +/datum/ic_medal_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + var/mob/living/carbon/human/user = usr + var/obj/item/card/id/card = user.wear_id + if(!card) + to_chat(user, SPAN_WARNING("You must have an authenticated ID Card to award medals.")) + return + + if(!((card.paygrade in GLOB.co_paygrades) || (card.paygrade in GLOB.highcom_paygrades))) + to_chat(user, SPAN_WARNING("Only a Senior Officer can award medals!")) + return + + if(!card.registered_ref) + user.visible_message("ERROR: ID card not registered in USCM registry. Potential medal fraud detected.") + return + + var/real_owner_ref = card.registered_ref + + if(real_owner_ref != WEAKREF(user)) + user.visible_message("ERROR: ID card not registered for [user.real_name] in USCM registry. Potential medal fraud detected.") + return + + var/datum/weakref/user_ref = WEAKREF(user) + var/datum/weakref/loc_ref = user_locs[user_ref] + var/atom/actual_loc = loc_ref?.resolve() + if(!actual_loc) + return + + switch(action) + if("grant_new_medal") + if(give_medal_award(get_turf(actual_loc))) + actual_loc.visible_message(SPAN_NOTICE("[actual_loc] prints a medal.")) + . = TRUE + + if("approve_medal") + var/recommendation_ref = params["ref"] + var/medal_type = params["medal_type"] + if(!(medal_type in GLOB.human_medals)) + return + var/datum/medal_recommendation/recommendation = locate(recommendation_ref) in GLOB.medal_recommendations + if(!recommendation) + return + if(recommendation.recipient_name == user.real_name) + to_chat(user, SPAN_WARNING("You cannot give medals to yourself!")) + return + + var/choice = tgui_alert(user, "Would you like to change the medal text?", "Medal Citation", list("Yes", "No")) + var/medal_citation = recommendation.reason + if(choice == "Yes") + medal_citation = strip_html(tgui_input_text(user, "What should the medal citation read?", "Medal Citation", null, MAX_PAPER_MESSAGE_LEN, TRUE), MAX_PAPER_MESSAGE_LEN) + + var/confirm_choice = tgui_alert(user, "Are you sure you want to give a medal to [recommendation.recipient_name]?", "Medal Confirmation", list("Yes", "No")) + if(confirm_choice != "Yes") + return + + if(give_medal_award_prefilled(get_turf(actual_loc), user, recommendation.recipient_name, recommendation.recipient_rank, recommendation.recipient_ckey, medal_citation, medal_type, recommendation.recommended_by_ckey, recommendation.recommended_by_name)) + GLOB.medal_recommendations -= recommendation + qdel(recommendation) + user.visible_message(SPAN_NOTICE("[actual_loc] prints a medal.")) + . = TRUE + + if("deny_medal") + var/recommendation_ref = params["ref"] + var/datum/medal_recommendation/recommendation = locate(recommendation_ref) in GLOB.medal_recommendations + if(!recommendation) + return + var/confirm = tgui_alert(user, "Are you sure you want to deny this medal recommendation?", "Medal Confirmation", list("Yes", "No")) + if(confirm != "Yes") + return + GLOB.medal_recommendations -= recommendation + qdel(recommendation) + . = TRUE + +/datum/ic_medal_panel/ui_close(mob/user) + . = ..() + user_locs -= WEAKREF(user) + +/datum/ic_medal_panel/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/medal) + ) diff --git a/code/datums/stamina/_stamina.dm b/code/datums/stamina/_stamina.dm index e233aaa81676..80e7df74e86b 100644 --- a/code/datums/stamina/_stamina.dm +++ b/code/datums/stamina/_stamina.dm @@ -34,7 +34,7 @@ if(!has_stamina) return - current_stamina = Clamp(current_stamina - amount, 0, max_stamina) + current_stamina = clamp(current_stamina - amount, 0, max_stamina) if(current_stamina < max_stamina) START_PROCESSING(SSobj, src) diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index a36b7b91e4c6..0ecfead05615 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -102,3 +102,19 @@ name = "Unconscious" desc = "You've been knocked out." icon_state = ALERT_KNOCKEDOUT + +/// DAZED: +/// This prevents talking as human or using abilities as Xenos, mainly +/datum/status_effect/incapacitating/dazed + id = "dazed" + needs_update_stat = TRUE + +/datum/status_effect/incapacitating/dazed/on_apply() + . = ..() + if(!.) + return + ADD_TRAIT(owner, TRAIT_DAZED, TRAIT_STATUS_EFFECT(id)) + +/datum/status_effect/incapacitating/dazed/on_remove() + REMOVE_TRAIT(owner, TRAIT_DAZED, TRAIT_STATUS_EFFECT(id)) + return ..() diff --git a/code/datums/tutorial/marine/basic_marine.dm b/code/datums/tutorial/marine/basic_marine.dm index be49977f7a48..af9d2eaf18dd 100644 --- a/code/datums/tutorial/marine/basic_marine.dm +++ b/code/datums/tutorial/marine/basic_marine.dm @@ -143,7 +143,7 @@ update_objective("Shoot at the Xenomorph until it dies.") var/mob/living/carbon/xenomorph/drone/tutorial/xeno_dummy = new(loc_from_corner(4, 5)) add_to_tracking_atoms(xeno_dummy) - add_highlight(xeno_dummy, COLOUR_VIVID_RED) + add_highlight(xeno_dummy, COLOR_VIVID_RED) RegisterSignal(xeno_dummy, COMSIG_MOB_DEATH, PROC_REF(on_xeno_death)) RegisterSignal(tutorial_mob, COMSIG_MOB_GUN_EMPTY, PROC_REF(on_magazine_empty)) // I'd like to prevent unwilling softlocks as much as I can diff --git a/code/defines/procs/announcement.dm b/code/defines/procs/announcement.dm index 3dd918abbc6b..3eae6076f610 100644 --- a/code/defines/procs/announcement.dm +++ b/code/defines/procs/announcement.dm @@ -145,7 +145,7 @@ for(var/mob/T in targets) if(isobserver(T)) continue - if(!ishuman(T) || isyautja(T) || !is_mainship_level(T.z)) + if(!ishuman(T) || isyautja(T) || !is_mainship_level((get_turf(T))?.z)) targets.Remove(T) log_ares_announcement("[title] Shipwide Update", message) diff --git a/code/game/camera_manager/camera_manager.dm b/code/game/camera_manager/camera_manager.dm index 93d56aca443c..450c7c8beb64 100644 --- a/code/game/camera_manager/camera_manager.dm +++ b/code/game/camera_manager/camera_manager.dm @@ -25,13 +25,16 @@ . = ..() map_name = "camera_manager_[REF(src)]_map" cam_screen = new + cam_screen.icon = null cam_screen.name = "screen" cam_screen.assigned_map = map_name cam_screen.del_on_map_removal = FALSE cam_screen.screen_loc = "[map_name]:1,1" + cam_screen.appearance_flags |= TILE_BOUND cam_background = new cam_background.assigned_map = map_name cam_background.del_on_map_removal = FALSE + cam_background.appearance_flags |= TILE_BOUND cam_plane_masters = list() for(var/plane in subtypesof(/atom/movable/screen/plane_master) - /atom/movable/screen/plane_master/blackness) @@ -42,14 +45,17 @@ . = ..() range_turfs = null current_area = null - cam_plane_masters = null + QDEL_LIST_ASSOC_VAL(cam_plane_masters) QDEL_NULL(cam_background) QDEL_NULL(cam_screen) if(current) UnregisterSignal(current, COMSIG_PARENT_QDELETING) + current = null + last_camera_turf = null /datum/component/camera_manager/proc/add_plane(atom/movable/screen/plane_master/instance) instance.assigned_map = map_name + instance.appearance_flags |= TILE_BOUND instance.del_on_map_removal = FALSE if(instance.blend_mode_override) instance.blend_mode = instance.blend_mode_override @@ -61,8 +67,8 @@ var/client/user_client = user.client if(!user_client) return - user_client.register_map_obj(cam_background) user_client.register_map_obj(cam_screen) + user_client.register_map_obj(cam_background) for(var/plane_id in cam_plane_masters) user_client.register_map_obj(cam_plane_masters[plane_id]) @@ -71,14 +77,10 @@ var/client/user_client = user.client if(!user_client) return - user_client.clear_map(cam_background) - user_client.clear_map(cam_screen) - for(var/plane_id in cam_plane_masters) - user_client.clear_map(cam_plane_masters[plane_id]) + user_client.clear_map(map_name) /datum/component/camera_manager/RegisterWithParent() . = ..() - START_PROCESSING(SSdcs, src) SEND_SIGNAL(parent, COMSIG_CAMERA_MAPNAME_ASSIGNED, map_name) RegisterSignal(parent, COMSIG_CAMERA_REGISTER_UI, PROC_REF(register)) RegisterSignal(parent, COMSIG_CAMERA_UNREGISTER_UI, PROC_REF(unregister)) @@ -90,8 +92,6 @@ /datum/component/camera_manager/UnregisterFromParent() . = ..() - STOP_PROCESSING(SSdcs, src) - UnregisterSignal(parent, COMSIG_CAMERA_REGISTER_UI) UnregisterSignal(parent, COMSIG_CAMERA_UNREGISTER_UI) UnregisterSignal(parent, COMSIG_CAMERA_SET_NVG) @@ -134,6 +134,8 @@ target_x = x target_y = y target_z = z + target_width = w + target_height = h update_area_camera() /datum/component/camera_manager/proc/enable_nvg(source, power, matrixcol) @@ -152,10 +154,10 @@ /datum/component/camera_manager/proc/sync_lighting_plane_alpha(lighting_alpha) var/atom/movable/screen/plane_master/lighting/lighting = cam_plane_masters["[LIGHTING_PLANE]"] - if (lighting) + if(lighting) lighting.alpha = lighting_alpha var/atom/movable/screen/plane_master/lighting/exterior_lighting = cam_plane_masters["[EXTERIOR_LIGHTING_PLANE]"] - if (exterior_lighting) + if(exterior_lighting) exterior_lighting.alpha = min(GLOB.minimum_exterior_lighting_alpha, lighting_alpha) /** @@ -215,7 +217,7 @@ var/turf/target = locate(current_area.center_x, current_area.center_y, target_z) var/list/visible_things = isXRay ? range("[x_size]x[y_size]", target) : view("[x_size]x[y_size]", target) - src.render_objects(visible_things) + render_objects(visible_things) /datum/component/camera_manager/proc/render_objects(list/visible_things) var/list/visible_turfs = list() diff --git a/code/game/cas_manager/datums/cas_fire_envelope.dm b/code/game/cas_manager/datums/cas_fire_envelope.dm index 04cd688194dd..d9355cd005a9 100644 --- a/code/game/cas_manager/datums/cas_fire_envelope.dm +++ b/code/game/cas_manager/datums/cas_fire_envelope.dm @@ -19,7 +19,7 @@ var/datum/cas_signal/recorded_loc = null var/obj/effect/firemission_guidance/guidance - + var/atom/tracked_object /datum/cas_fire_envelope/New() ..() @@ -27,6 +27,7 @@ /datum/cas_fire_envelope/Destroy(force, ...) linked_console = null + untrack_object() return ..() /datum/cas_fire_envelope/ui_data(mob/user) @@ -151,7 +152,9 @@ recorded_loc = marker return TRUE -/datum/cas_fire_envelope/proc/change_current_loc(location) +/datum/cas_fire_envelope/proc/change_current_loc(location, atom/object) + if(object) + untrack_object() if(!location && guidance) for(var/mob/M in guidance.users) if(istype(M) && M.client) @@ -162,6 +165,21 @@ guidance = new /obj/effect/firemission_guidance() guidance.forceMove(location) guidance.updateCameras(linked_console) + if(object) + tracked_object = object + RegisterSignal(tracked_object, COMSIG_PARENT_QDELETING, PROC_REF(on_tracked_object_del)) + +/// Call to unregister the on_tracked_object_del behavior +/datum/cas_fire_envelope/proc/untrack_object() + if(tracked_object) + UnregisterSignal(tracked_object, COMSIG_PARENT_QDELETING) + tracked_object = null + +/// Signal handler for when we are viewing a object in cam is qdel'd (but camera actually is actually some other obj) +/datum/cas_fire_envelope/proc/on_tracked_object_del(atom/target) + SIGNAL_HANDLER + tracked_object = null + change_current_loc() /datum/cas_fire_envelope/proc/user_is_guided(user) return guidance && (user in guidance.users) diff --git a/code/game/jobs/job/civilians/other/survivors.dm b/code/game/jobs/job/civilians/other/survivors.dm index 23097e139eda..a85731aa781a 100644 --- a/code/game/jobs/job/civilians/other/survivors.dm +++ b/code/game/jobs/job/civilians/other/survivors.dm @@ -14,7 +14,7 @@ var/hostile = FALSE /datum/job/civilian/survivor/set_spawn_positions(count) - spawn_positions = Clamp((round(count * SURVIVOR_TO_TOTAL_SPAWN_RATIO)), 2, 8) + spawn_positions = clamp((round(count * SURVIVOR_TO_TOTAL_SPAWN_RATIO)), 2, 8) total_positions = spawn_positions /datum/job/civilian/survivor/equip_job(mob/living/survivor) diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index 37131451ca07..be2b75e0e7f6 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -268,6 +268,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou var/datum/job/PJ = temp_roles_for_mode[JOB_PREDATOR] if(istype(PJ)) PJ.set_spawn_positions(GLOB.players_preassigned) + REDIS_PUBLISH("byond.round", "type" = "predator-round", "map" = SSmapping.configs[GROUND_MAP].map_name) // Assign the roles, this time for real, respecting limits we have established. var/list/roles_left = assign_roles(temp_roles_for_mode, unassigned_players) diff --git a/code/game/jobs/slot_scaling.dm b/code/game/jobs/slot_scaling.dm index 2d444d06e5ab..8bd4af908c07 100644 --- a/code/game/jobs/slot_scaling.dm +++ b/code/game/jobs/slot_scaling.dm @@ -10,7 +10,7 @@ /proc/job_slot_formula(marine_count, factor, c, min, max) if(marine_count <= factor) return min - return round(Clamp((marine_count/factor)+c, min, max)) + return round(clamp((marine_count/factor)+c, min, max)) /proc/medic_slot_formula(playercount) return job_slot_formula(playercount,40,1,3,5) diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm index e9b969e023b8..d38ccd725785 100644 --- a/code/game/machinery/computer/almayer_control.dm +++ b/code/game/machinery/computer/almayer_control.dm @@ -110,7 +110,7 @@ return switch(action) if("award") - print_medal(usr, src) + open_medal_panel(usr, src) . = TRUE // evac stuff start \\ diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index 0975320274c8..120a1f9ccc2e 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -58,9 +58,8 @@ SStgui.close_uis(src) QDEL_NULL(current) QDEL_NULL(cam_screen) - qdel(cam_screen) QDEL_NULL(cam_background) - qdel(cam_background) + QDEL_NULL_LIST(cam_plane_masters) last_camera_turf = null concurrent_users = null return ..() diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index bcc4c4ac3ec8..77c9bbacc293 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -130,7 +130,7 @@ cooldown_message = world.time if("award") - print_medal(usr, src) + open_medal_panel(usr, src) if("evacuation_start") if(state == STATE_EVACUATION) diff --git a/code/game/machinery/computer/dropship_weapons.dm b/code/game/machinery/computer/dropship_weapons.dm index db376c40029c..dce026f4ce33 100644 --- a/code/game/machinery/computer/dropship_weapons.dm +++ b/code/game/machinery/computer/dropship_weapons.dm @@ -33,6 +33,8 @@ var/camera_width = 11 var/camera_height = 11 var/camera_map_name + ///Tracks equipment with a camera that is deployed and we are viewing + var/obj/structure/dropship_equipment/camera_area_equipment = null var/registered = FALSE @@ -62,17 +64,20 @@ /obj/structure/machinery/computer/dropship_weapons/attack_hand(mob/user) if(..()) return - if(!allowed(user)) + if(!allowed(user)) + // TODO: Restore cas simulator + to_chat(user, SPAN_WARNING("Weapons modification access denied.")) + return TRUE // everyone can access the simulator, requested feature. - to_chat(user, SPAN_WARNING("Weapons modification access denied, attempting to launch simulation.")) + /*to_chat(user, SPAN_WARNING("Weapons modification access denied, attempting to launch simulation.")) if(!selected_firemission) to_chat(user, SPAN_WARNING("Firemission must be selected before attempting to run the simulation")) - return + return TRUE tgui_interact(user) - return 1 + return FALSE*/ user.set_interaction(src) ui_interact(user) @@ -100,7 +105,7 @@ /obj/structure/machinery/computer/dropship_weapons/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) var/obj/docking_port/mobile/marine_dropship/dropship = SSshuttle.getShuttle(shuttle_tag) - if (!istype(dropship)) + if(!istype(dropship)) return var/screen_mode = 0 @@ -129,11 +134,6 @@ if(screen_mode != 3 || !selected_firemission || dropship.mode != SHUTTLE_CALL) update_location(user, null) - ui_data(user) - if(!tacmap.map_holder) - var/level = SSmapping.levels_by_trait(tacmap.targeted_ztrait) - tacmap.map_holder = SSminimaps.fetch_tacmap_datum(level[1], tacmap.allowed_flags) - user.client.register_map_obj(tacmap.map_holder.map) tgui_interact(user) /obj/structure/machinery/computer/dropship_weapons/tgui_interact(mob/user, datum/tgui/ui) @@ -141,10 +141,15 @@ var/obj/docking_port/mobile/marine_dropship/dropship = SSshuttle.getShuttle(shuttle_tag) RegisterSignal(dropship, COMSIG_DROPSHIP_ADD_EQUIPMENT, PROC_REF(equipment_update)) RegisterSignal(dropship, COMSIG_DROPSHIP_REMOVE_EQUIPMENT, PROC_REF(equipment_update)) - registered=TRUE + registered = TRUE + + if(!tacmap.map_holder) + var/level = SSmapping.levels_by_trait(tacmap.targeted_ztrait) + tacmap.map_holder = SSminimaps.fetch_tacmap_datum(level[1], tacmap.allowed_flags) ui = SStgui.try_update_ui(user, src, ui) - if (!ui) + if(!ui) + user.client.register_map_obj(tacmap.map_holder.map) SEND_SIGNAL(src, COMSIG_CAMERA_REGISTER_UI, user) ui = new(user, src, "DropshipWeaponsConsole", "Weapons Console") ui.open() @@ -255,7 +260,7 @@ switch(action) if("button_push") playsound(src, get_sfx("terminal_button"), 25, FALSE) - return TRUE + return FALSE if("select_equipment") var/base_tag = params["equipment_id"] @@ -303,12 +308,13 @@ var/mount_point = equipment.ship_base.attach_id if(mount_point != equipment_tag) continue - if (istype(equipment, /obj/structure/dropship_equipment/sentry_holder)) + if(istype(equipment, /obj/structure/dropship_equipment/sentry_holder)) var/obj/structure/dropship_equipment/sentry_holder/sentry = equipment var/obj/structure/machinery/defenses/sentry/defense = sentry.deployed_turret - if (defense.has_camera) + if(defense.has_camera) defense.set_range() var/datum/shape/rectangle/current_bb = defense.range_bounds + camera_area_equipment = sentry SEND_SIGNAL(src, COMSIG_CAMERA_SET_AREA, current_bb.center_x, current_bb.center_y, defense.loc.z, current_bb.width, current_bb.height) return TRUE @@ -329,6 +335,7 @@ if(medevac.linked_stretcher) SEND_SIGNAL(src, COMSIG_CAMERA_SET_TARGET, medevac.linked_stretcher, 5, 5) return TRUE + if("fulton-target") var/equipment_tag = params["equipment_id"] for(var/obj/structure/dropship_equipment/equipment as anything in shuttle.equipments) @@ -340,6 +347,7 @@ var/target_ref = params["ref"] fulton.automate_interact(user, target_ref) return TRUE + if("fire-weapon") var/weapon_tag = params["eqp_tag"] var/obj/structure/dropship_equipment/weapon/DEW = get_weapon(weapon_tag) @@ -347,19 +355,23 @@ return FALSE var/datum/cas_signal/sig = get_cas_signal(camera_target_id) - if(!sig) return FALSE selected_equipment = DEW - ui_open_fire(user, shuttle, camera_target_id) + if(ui_open_fire(user, shuttle, camera_target_id)) + if(firemission_envelope) + firemission_envelope.untrack_object() return TRUE + if("deploy-equipment") var/equipment_tag = params["equipment_id"] for(var/obj/structure/dropship_equipment/equipment as anything in shuttle.equipments) var/mount_point = equipment.ship_base.attach_id if(mount_point != equipment_tag) continue + if(camera_area_equipment == equipment) + set_camera_target(null) equipment.equipment_interact(user) return TRUE @@ -384,13 +396,8 @@ var/x_offset_value = params["x_offset_value"] var/y_offset_value = params["y_offset_value"] - var/datum/cas_iff_group/cas_group = GLOB.cas_groups[faction] - var/datum/cas_signal/cas_sig - for(var/X in cas_group.cas_signals) - var/datum/cas_signal/LT = X - if(LT.target_id == target_id && LT.valid_signal()) - cas_sig = LT - break + camera_target_id = target_id + var/datum/cas_signal/cas_sig = get_cas_signal(camera_target_id, valid_only = TRUE) // we don't want rapid offset changes to trigger admin warnings // and block the user from accessing TGUI // we change the minute_count @@ -408,12 +415,14 @@ current.y + dy, current.z) - firemission_envelope.change_current_loc(new_target) - + camera_area_equipment = null + firemission_envelope.change_current_loc(new_target, cas_sig) return TRUE + if("nvg-enable") SEND_SIGNAL(src, COMSIG_CAMERA_SET_NVG, 5, "#7aff7a") return TRUE + if("nvg-disable") SEND_SIGNAL(src, COMSIG_CAMERA_CLEAR_NVG) return TRUE @@ -447,24 +456,28 @@ /obj/structure/machinery/computer/dropship_weapons/proc/get_weapon(eqp_tag) var/obj/docking_port/mobile/marine_dropship/dropship = SSshuttle.getShuttle(shuttle_tag) - for(var/obj/structure/dropship_equipment/equipment in dropship.equipments) - if(istype(equipment, /obj/structure/dropship_equipment/weapon)) - //is weapon - if(selected_equipment == equipment) - return equipment + var/obj/structure/dropship_equipment/equipment = dropship.equipments[eqp_tag] + if(istype(equipment, /obj/structure/dropship_equipment/weapon)) + //is weapon + return equipment return -/obj/structure/machinery/computer/dropship_weapons/proc/get_cas_signal(target_ref) +/obj/structure/machinery/computer/dropship_weapons/proc/get_cas_signal(target_ref, valid_only = FALSE) if(!target_ref) return var/datum/cas_iff_group/cas_group = GLOB.cas_groups[faction] for(var/datum/cas_signal/sig in cas_group.cas_signals) if(sig.target_id == target_ref) + if(valid_only && !sig.valid_signal()) + continue return sig - /obj/structure/machinery/computer/dropship_weapons/proc/set_camera_target(target_ref) + camera_area_equipment = null + if(firemission_envelope) + firemission_envelope.untrack_object() + var/datum/cas_signal/target = get_cas_signal(target_ref) camera_target_id = target_ref if(!target) diff --git a/code/game/machinery/computer/groundside_operations.dm b/code/game/machinery/computer/groundside_operations.dm index 7b4c2d5df771..b5d1c112a3f8 100644 --- a/code/game/machinery/computer/groundside_operations.dm +++ b/code/game/machinery/computer/groundside_operations.dm @@ -235,7 +235,7 @@ log_announcement("[key_name(usr)] has announced the following: [input]") if("award") - print_medal(usr, src) + open_medal_panel(usr, src) if("selectlz") if(SSticker.mode.active_lz) diff --git a/code/game/machinery/computer/research.dm b/code/game/machinery/computer/research.dm index 1ba696eeee9c..d5158cb76451 100644 --- a/code/game/machinery/computer/research.dm +++ b/code/game/machinery/computer/research.dm @@ -179,7 +179,7 @@ if("purchase_document") if(!photocopier) return - var/purchase_tier = FLOOR(text2num(params["purchase_document"]), 1) + var/purchase_tier = Floor(text2num(params["purchase_document"])) if(purchase_tier <= 0 || purchase_tier > 5) return if(purchase_tier > GLOB.chemical_data.clearance_level) diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 580fea644eec..b90f8adbbb3f 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -2,7 +2,7 @@ name = "emergency floodlight" desc = "A powerful light usually stationed near landing zones to provide better visibility." icon = 'icons/obj/structures/machinery/floodlight.dmi' - icon_state = "flood00" + icon_state = "flood_0" density = TRUE anchored = TRUE light_power = 2 @@ -11,13 +11,14 @@ idle_power_usage = 0 active_power_usage = 100 + ///How far the light will go when the floodlight is on var/on_light_range = 6 - ///Whether or not the floodlight can be toggled on or off var/toggleable = TRUE - ///Whether or not the floodlight is turned on, disconnected from whether it has power or is lit var/turned_on = FALSE + ///base state + var/base_icon_state = "flood" /obj/structure/machinery/floodlight/Initialize(mapload, ...) . = ..() @@ -60,7 +61,7 @@ /obj/structure/machinery/floodlight/update_icon() . = ..() - icon_state = "flood0[light_on]" + icon_state = "[base_icon_state]_[light_on]" /obj/structure/machinery/floodlight/power_change(area/master_area = null) . = ..() @@ -71,7 +72,7 @@ /obj/structure/machinery/floodlight/landing name = "landing light" desc = "A powerful light usually stationed near landing zones to provide better visibility. This one seems to have been bolted down and is unable to be moved." - icon_state = "flood01" + icon_state = "flood_1" use_power = USE_POWER_NONE needs_power = FALSE unslashable = TRUE @@ -81,5 +82,6 @@ turned_on = TRUE /obj/structure/machinery/floodlight/landing/floor - icon_state = "floor_flood01" + icon_state = "floor_flood_1" + base_icon_state = "floor_flood" density = FALSE diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 89a7d591a691..c97a28932262 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -91,7 +91,7 @@ return // Leave the poor thing alone health -= damage - health = Clamp(health, 0, initial(health)) + health = clamp(health, 0, initial(health)) if(health <= 0) toggled = FALSE // requires flipping on again once repaired diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm index 90947684bee1..0a7b85cae7e2 100644 --- a/code/game/machinery/vending/vending_types.dm +++ b/code/game/machinery/vending/vending_types.dm @@ -267,6 +267,7 @@ /obj/item/ammo_magazine/rifle/rubber = 40, /obj/item/ammo_magazine/rifle/m4ra/rubber = 40, /obj/item/clothing/head/helmet/marine/MP = 8, + /obj/item/explosive/plastic/breaching_charge/rubber = 6, ) /obj/structure/machinery/vending/sea diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm index 4d9ced354e2b..6446d17e2db7 100644 --- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm +++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm @@ -72,6 +72,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_intelligence_officer, list( list("BACKPACK (CHOOSE 1)", 0, null, null, null), list("Expedition Pack", 0, /obj/item/storage/backpack/marine/satchel/intel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED), + list("Expedition Chestrig", 0, /obj/item/storage/backpack/marine/satchel/intel/chestrig, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED), list("Radio Telephone Pack", 0, /obj/item/storage/backpack/marine/satchel/rto/io, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("HELMET (CHOOSE 1)", 0, null, null, null), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index e021b6fe0879..296bce8a9d8d 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm @@ -190,6 +190,11 @@ list("Falling Falcons Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch/falcon, VENDOR_ITEM_REGULAR), list("USCM Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch, VENDOR_ITEM_REGULAR), list("Bedroll", round(scale * 20), /obj/item/roller/bedroll, VENDOR_ITEM_REGULAR), + + list("OPTICS", -1, null, null, null), + list("Advanced Medical Optic (CORPSMAN ONLY)", round(scale * 4), /obj/item/device/helmet_visor/medical/advanced, VENDOR_ITEM_REGULAR), + list("Squad Optic", round(scale * 15), /obj/item/device/helmet_visor, VENDOR_ITEM_REGULAR), + ) //--------------SQUAD SPECIFIC VERSIONS-------------- diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm index 8a1b77103cad..04061370168d 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm @@ -4,9 +4,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list( list("SMARTGUN SET (MANDATORY)", 0, null, null, null), list("Essential Smartgunner Set", 0, /obj/item/storage/box/m56_system, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), - list("SMARTGUN AMMUNITION", 0, null, null, null), - list("M56 Smartgun Drum", 15, /obj/item/ammo_magazine/smartgun, null, VENDOR_ITEM_RECOMMENDED), - list("GUN ATTACHMENTS (CHOOSE 1)", 0, null, null, null), list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/effects/acid_hole.dm b/code/game/objects/effects/acid_hole.dm index a4db9ef5c0e0..db24c1c9c56a 100644 --- a/code/game/objects/effects/acid_hole.dm +++ b/code/game/objects/effects/acid_hole.dm @@ -40,7 +40,7 @@ /obj/effect/acid_hole/attack_alien(mob/living/carbon/xenomorph/user) - if (!holed_wall) + if(!holed_wall) qdel(src) //no wall?! then cease existence... return @@ -49,6 +49,9 @@ expand_hole(user) return XENO_NO_DELAY_ACTION +/obj/effect/acid_hole/attack_larva(mob/living/carbon/xenomorph/larva/M) + attack_alien(M) + /obj/effect/acid_hole/proc/expand_hole(mob/living/carbon/xenomorph/user) if(user.action_busy || user.is_mob_incapacitated()) return diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 41adfdd9581d..7fa61c474ea1 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -500,13 +500,13 @@ QDEL_IN(src, ttl) /obj/effect/xenomorph/xeno_telegraph/red - color = COLOUR_DARK_RED + color = COLOR_DARK_RED /obj/effect/xenomorph/xeno_telegraph/brown - color = COLOUR_BROWN + color = COLOR_BROWN /obj/effect/xenomorph/xeno_telegraph/green - color = COLOUR_GREEN + color = COLOR_LIGHT_GREEN /// This has a brown icon state and does not have a color overlay by default. /obj/effect/xenomorph/xeno_telegraph/abduct_hook diff --git a/code/game/objects/effects/decals/cleanable/blood/robots.dm b/code/game/objects/effects/decals/cleanable/blood/robots.dm index 1bbadb1461b6..3ee3c9e07f9a 100644 --- a/code/game/objects/effects/decals/cleanable/blood/robots.dm +++ b/code/game/objects/effects/decals/cleanable/blood/robots.dm @@ -3,11 +3,11 @@ desc = "It's a useless heap of junk... or is it?" icon = 'icons/mob/robots.dmi' icon_state = "gib1" - basecolor="#030303" + basecolor=COLOR_OIL random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") /obj/effect/decal/cleanable/blood/gibs/robot/update_icon() - color = "#FFFFFF" + color = COLOR_WHITE /obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like return @@ -39,7 +39,7 @@ /obj/effect/decal/cleanable/blood/oil name = "motor oil" desc = "It's black and greasy." - basecolor="#030303" + basecolor=COLOR_OIL /obj/effect/decal/cleanable/blood/oil/dry() return diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 9cf2aa3d8e09..a88b4ea5c5ea 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -36,7 +36,7 @@ acid_damage = 1 icon_state = "greenglow" light_range = 1 - light_color = COLOUR_GREEN + light_color = COLOR_LIGHT_GREEN /obj/effect/decal/cleanable/flour name = "flour" desc = "It's still good. Four second rule!" @@ -55,7 +55,7 @@ anchored = TRUE layer = TURF_LAYER light_range = 1 - light_color = COLOUR_GREEN + light_color = COLOR_LIGHT_GREEN icon = 'icons/effects/effects.dmi' icon_state = "greenglow" diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index cfe5f27da9a7..35e354c121bb 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -5,7 +5,7 @@ layer = ABOVE_TURF_LAYER anchored = TRUE -/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF",shade = "#000000", type = "rune") +/obj/effect/decal/cleanable/crayon/New(location, main = COLOR_WHITE,shade = COLOR_BLACK, type = "rune") ..() forceMove(location) diff --git a/code/game/objects/effects/decals/posters.dm b/code/game/objects/effects/decals/posters.dm index 7a8054efce1a..23f7b8c5296a 100644 --- a/code/game/objects/effects/decals/posters.dm +++ b/code/game/objects/effects/decals/posters.dm @@ -160,14 +160,14 @@ icon_state = "poster3" /obj/structure/sign/poster/music/Initialize() - serial_number = pick(3,5,25,26,29,38,39) + serial_number = pick(3,5,25,26,38,39) .=..() /obj/structure/sign/poster/pinup icon_state = "poster12" /obj/structure/sign/poster/pinup/Initialize() - serial_number = pick(12,16,17) + serial_number = pick(12,16,17,29) .=..() /obj/structure/sign/poster/propaganda diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 7cb2781b253b..fcd431c33d26 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -275,7 +275,7 @@ cases. Override_icon_state should be a list.*/ size = "huge" if(SIZE_MASSIVE) size = "massive" - . += "This is a [blood_color ? blood_color != "#030303" ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item." + . += "This is a [blood_color ? blood_color != COLOR_OIL ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item." if(desc) . += desc if(desc_lore) diff --git a/code/game/objects/items/books/manuals.dm b/code/game/objects/items/books/manuals.dm index 0854d2ec1b06..3140d0e30ca9 100644 --- a/code/game/objects/items/books/manuals.dm +++ b/code/game/objects/items/books/manuals.dm @@ -8,6 +8,7 @@ /// 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified unique = 1 + /obj/item/book/manual/engineering_construction name = "Station Repairs and Construction" icon_state ="bookEngineering" @@ -28,161 +29,6 @@ "} -/obj/item/book/manual/engineering_particle_accelerator - name = "Particle Accelerator User's Guide" - icon_state ="bookParticleAccelerator" - author = "Engineering Encyclopedia" - title = "Particle Accelerator User's Guide" - - dat = {" - - - - - -

Experienced User's Guide

- -

Setting up the accelerator

- -
    -
  1. Wrench all pieces to the floor
  2. -
  3. Add wires to all the pieces
  4. -
  5. Close all the panels with your screwdriver
  6. -
- -

Using the accelerator

- -
    -
  1. Open the control panel
  2. -
  3. Set the speed to 2
  4. -
  5. Start firing at the singularity generator
  6. -
  7. When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off
  8. -
  9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
  10. -
- - - - "} - - -/obj/item/book/manual/supermatter_engine - name = "Supermatter Engine User's Guide" - icon_state = "bookSupermatter" - author = "Waleed Asad" - title = "Supermatter Engine User's Guide" - - dat = {" - - - - -
- Engineering notes on the single-stage supermatter engine,
- -Waleed Asad

- - Station,
- Exodus

- - A word of caution, do not enter the engine room for any reason without radiation protection and meson scanners on. The status of the engine may be unpredictable even when you believe it is 'off.' This is an important level of personal protection.

- - The engine has two basic modes of functionality. It has been observed that it is capable of both a safe level of operation and a modified, high output mode.

- -

Heat-Primary Mode

- Notes on starting the basic function mode -
    -
  1. Prepare collector arrays: As is standard, begin by wrenching them down, filling six plasma tanks with a plasma canister, and inserting the tank into the collectors one by one. Finally, initialize each collector.
  2. - -
  3. Prepare gas system: Before introducing any gas into the supermatter engine room, it is important to remember the small, but vital steps to preparing this section. First, set the input gas pump and output gas flow pump to 4500 kPa, or maximum flow. Second, switch the digital switching valve into the 'up' position, so the green light is on north side of the valve, in order to circulate the gas back toward the coolers and collectors.
  4. - -
  5. Apply N2 gas: Retrieve the two N2 canisters from storage and bring them to the engine room. Attach one of them to the input section of the engine gas system located next to the collectors. Keep it attached until the N2 pressure is low enough to turn the canister light red. Replace it with the second canister to keep N2 pressure at optimal levels.
  6. - -
  7. Open supermatter shielding: This button is located in the engine room, to the left of the engine monitoring room blast doors. At this point, the supermatter chamber is mostly a gas mixture of N2 and is producing no radiation. It is considered 'safe' up until this point. Do not forget radiation shielding and meson scanners.
  8. - -
  9. Begin primary emitter burst series: Begin by firing four shots into the supermatter using the emitter. It is important to move to this step quickly. The onboard SMES units may not have enough power to run the emitters if left alone too long on-station. This engine can produce enough power on its own to run the entire station, ignoring the SMES units completely, and is wired to do so.
  10. - -
  11. Switch SMES units to primary settings: Maximize input and set the devices to automatically charge, additionally turn their outputs on if they are off unless power is to be saved (Which can be useful in case of later failures).
  12. - -
  13. Begin secondary emitter burst series: Before firing the emitter again, check the power in the line with a multimeter (Do not forget electrical gloves). The engine is running at high efficiency when the value exceeds 200,000 power units.
  14. - -
  15. Maintain engine power: When power in the lines get low, add an additional emitter burst series to bring power to normal levels.
  16. -
- - -

O2-Reaction Mode

- - The second mode for running the engine uses a gas mixture to produce a reaction within the supermatter. This mode requires the CE's or Atmospheric's help to set up. This is called 'O2-Reaction Mode.'

- - THIS MODE CAN CAUSE A RUNAWAY REACTION, LEADING TO CATASTROPHIC FAILURE IF NOT MAINTAINED. NEVER FORGET ABOUT THE ENGINE IN THIS MODE.

- - Additionally, this mode can be used for what is called a 'Cold Start.' If the station has no power in the SMES to run the emitters, using this mode will allow enough power output to run them, and quickly reach an acceptable level of power output.

- -
    -
  1. Prepare collector arrays: As is standard, begin by wrenching them down, filling six plasma tanks with a plasma canister, and inserting the tank into the collectors one by one. Finally, initialize each collector.
  2. - -
  3. Prepare gas system: Before introducing any gas into the supermatter engine room, it is important to remember the small, but vital steps to preparing this section. First, set the input gas pump and output gas flow pump to 4500 kPa, or maximum flow. Second, switch the digital switching valve into the 'up' position, so the green light is on north side of the valve, in order to circulate the gas back toward the coolers and collectors.
  4. - -
  5. Modify the engine room filters: Unlike the Heat-Primary Mode, it is important to change the filters attached to the gas system to stop filtering O2, and start filtering carbon molecules. O2-Reaction Mode produces far more plasma than Heat-Primary, therefore filtering it off is essential.
  6. - -
  7. Switch SMES units to primary settings: Maximize input and set the devices to automatically charge, additionally turn their outputs on if they are off unless power is to be saved (Which can be useful in case of later failures). If you check the power in the system lines at this point, you will find that it is constantly going up. Indeed, with just the addition of O2 to the supermatter, it will begin outputting power.
  8. - -
  9. Begin primary emitter burst series: Begin by firing four shots into the supermatter using the emitter. Do not over power the supermatter. The reaction is self sustaining and propagating. As long as O2 is in the chamber, it will continue outputting MORE power.
  10. - -
  11. Maintain follow up operations: Remember to check the temperature of the core gas and switch to the Heat-Primary function, or vent the core room when problems begin if required.
  12. -

- -

Notes on Supermatter Reaction Function and Drawbacks

- - After several hours of observation, an interesting phenomenon was witnessed. The supermatter undergoes a constant, self-sustaining reaction when given an extremely high O2 concentration. Anything about 80% or higher typically will cause this reaction. The supermatter will continue to react whenever this gas mixture is in the same room as the supermatter.

- - To understand why O2-Reaction mode is dangerous, the core principle of the supermatter must be understood. The supermatter emits three things when 'not safe,' that is any time it is giving off power. These things are:
- -
- - When in Heat-Primary mode, far more heat and plasma are produced than radiation. In O2-Reaction mode, very little heat and only moderate amounts of plasma are produced, however HUGE amounts of energy leaving the supermatter is in the form of radiation.

- - The O2-Reaction engine mode has a single drawback which has been eluded to more than once so far and that is very simple. The engine room will continue to grow hotter as the constant reaction continues. Eventually, there will be what is called a 'critical gas mixture.' This is the point at which the constant adding of plasma to the mixture of air around the supermatter changes the gas concentration to below the tolerance. When this happens, two things occur. First, the supermatter switches to its primary mode of operation wherein huge amounts of heat are produced by the engine rather than low amounts with high power output. Second, an uncontrollable increase in heat within the supermatter chamber will occur. This will lead to a spark-up, igniting the plasma in the supermatter chamber, wildly increasing both pressure and temperature.

- - While the O2-Reaction mode is dangerous, it does produce heavy amounts of energy. Consider using this mode only in short amounts to fill the SMES, and switch back later in the shift to keep things flowing normally.

- - -

Notes on Supermatter Containment and Emergency Procedures

- - While a constant vigil on the supermatter is not required, regular checkups are important. Check the temperature of gas leaving the supermatter chamber for unsafe levels and ensure that the plasma in the chamber is at a safe concentration. Of course, also make sure the chamber is not on fire. A fire in the core chamber is very difficult to put out. As any toxin scientist can tell you, even low amounts of plasma can burn at very high temperatures. This burning creates a huge increase in pressure and more importantly, temperature of the crystal itself.

- - The supermatter is strong, but not invincible. When the supermatter is heated too much, its crystal structure will attempt to liquefy. The change in atomic structure of the supermatter leads to a single reaction, a massive explosion. The computer chip attached to the supermatter core will warn the station when stability is threatened. It will then offer a second warning, when things have become dangerously close to total destruction of the core.

- - Located both within the CE office and engine room is the engine ventilatory control button. This button allows the core vent controls to be accessed, venting the room to space. Remember however, that this process takes time. If a fire is raging, and the pressure is higher than fathomable, it will take a great deal of time to vent the room. Also located in the CE's office is the emergency core eject button. A new core can be ordered from cargo. It is often not worth the lives of the crew to hold on to it, not to mention the structural damage. However, if by some mistake the supermatter is pushed off or removed from the mass driver it sits on, manual reposition will be required. Which is very dangerous and often leads to death.

- - The supermatter is extremely dangerous. More dangerous than people give it credit for. It can destroy you in an instant, without hesitation, reducing you to a pile of dust. When working closely with supermatter, it is suggested to get a genetic backup and do not wear any items of value to you. The supermatter core can be pulled if grabbed properly by the base, but pushing is not possible.

- - -

In Closing

- - Remember that the supermatter is dangerous, and the core is dangerous still. Venting the core room is always an option if you are even remotely worried, utilizing Atmospherics to properly ready the room once more for core function. It is always a good idea to check up regularly on the temperature of gas leaving the chamber, as well as the power in the system lines. Lastly, once again remember, never touch the supermatter with anything. Ever.

- - -Waleed Asad, Senior Engine Technician - - "} - /obj/item/book/manual/engineering_hacking name = "Hacking" icon_state ="bookHacking" @@ -203,150 +49,6 @@ "} -/obj/item/book/manual/engineering_singularity_safety - name = "Singularity Safety in Special Circumstances" - icon_state ="bookEngineeringSingularitySafety" - author = "Engineering Encyclopedia" - title = "Singularity Safety in Special Circumstances" - - dat = {" - - - - -

Singularity Safety in Special Circumstances

- -

Power outage

- - A power problem has made the entire station lose power? Could be station-wide wiring problems or syndicate power sinks. In any case follow these steps: - -
    -
  1. PANIC!
  2. -
  3. Get your ass over to engineering! QUICKLY!!!
  4. -
  5. Get to the Area Power Controller which controls the power to the emitters.
  6. -
  7. Swipe it with your ID card - if it doesn't unlock, continue with step 15.
  8. -
  9. Open the console and disengage the cover lock.
  10. -
  11. Pry open the APC with a Crowbar.
  12. -
  13. Take out the empty power cell.
  14. -
  15. Put in the new, full power cell - if you don't have one, continue with step 15.
  16. -
  17. Quickly put on a Radiation suit.
  18. -
  19. Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
  20. -
  21. Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering APC is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the APC to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
  22. -
  23. Grab your crowbar and pry away the tile closest to the APC.
  24. -
  25. Use the wirecutters to cut the wire which is connecting the grid to the terminal.
  26. -
  27. Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
  28. -
  29. GET THE FUCK OUT OF THERE!!!
  30. -
- -

Shields get damaged

- -
    -
  1. GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
  2. -
- - - "} - -/obj/item/book/manual/medical_cloning - name = "Cloning Techniques of the 26th Century" - icon_state ="bookCloning" - author = "Medical Journal, volume 3" - title = "Cloning Techniques of the 26th Century" - - dat = {" - - - - - -

How to Clone People

- So there are 50 dead people lying on the floor, chairs are spinning like no tomorrow and you haven't the foggiest idea of what to do? Not to worry! - This guide is intended to teach you how to clone people and how to do it right, in a simple, step-by-step process! If at any point of the guide you have a mental meltdown, - genetics probably isn't for you and you should get a job-change as soon as possible before you're sued for malpractice. - -
    -
  1. Acquire body
  2. -
  3. Strip body
  4. -
  5. Put body in cloning machine
  6. -
  7. Scan body
  8. -
  9. Clone body
  10. -
  11. Get clean Structural Enzymes for the body
  12. -
  13. Put body in morgue
  14. -
  15. Await cloned body
  16. -
  17. Cryo and use the clean SE injector
  18. -
  19. Give person clothes back
  20. -
  21. Send person on their way
  22. -
- -

Step 1: Acquire body

- This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, great! Move on to the next step. - -

Step 2: Strip body

- The cloning machine does not like abiotic items. What this means is you can't clone anyone if they're wearing clothes or holding things, so take all of it off. If it's just one person, it's courteous to put their possessions in the closet. - If you have about seven people awaiting cloning, just leave the piles where they are, but don't mix them around and for God's sake don't let people in to steal them. - -

Step 3: Put body in cloning machine

- Grab the body and then put it inside the DNA modifier. If you cannot do this, then you messed up at Step 2. Go back and check you took EVERYTHING off - a commonly missed item is their headset. - -

Step 4: Scan body

- Go onto the computer and scan the body by pressing 'Scan - <Subject Name Here>.' If you're successful, they will be added to the records (note that this can be done at any time, even with living people, - so that they can be cloned without a body in the event that they are lying dead on port solars and didn't turn on their suit sensors)! - If not, and it says "Error: Mental interface failure.", then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, - click 'Refresh' and try scanning them again. If there's no success, threaten them with gibbing. - Still no success? Skip over to Step 7 and don't continue after it, as you have an unresponsive body and it cannot be cloned. - If you got "Error: Unable to locate valid genetic data.", you are trying to clone a monkey - start over. - -

Step 5: Clone body

- Now that the body has a record, click 'View Records,' click the subject's name, and then click 'Clone' to start the cloning process. Congratulations! You're halfway there. - Remember not to 'Eject' the cloning pod as this will kill the developing clone and you'll have to start the process again. - -

Step 6: Get clean SEs for body

- Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! - For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when they're done. If you're a competent Geneticist, you will already have one ready on your working computer. - If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. - Go into View/Edit/Transfer Buffer, find an open slot and click "SE" to save it. Then click 'Injector' to get the SEs in syringe form. Put this in your pocket or something for when the body is done. - -

Step 7: Put body in morgue

- Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. - To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed "CHEF MEAT" in order to avoid confusion. - -

Step 8: Await cloned body

- Now go back to the lab and wait for your patient to be cloned. It won't be long now, I promise. - -

Step 9: Cryo and clean SE injector on person

- Has your body been cloned yet? Great! As soon as the guy pops out, grab them and stick them in cryo. Clonexadone and Cryoxadone help rebuild their genetic material. Then grab your clean SE injector and jab it in them. Once you've injected them, - they now have clean Structural Enzymes and their defects, if any, will disappear in a short while. - -

Step 10: Give person clothes back

- Obviously the person will be naked after they have been cloned. Provided you weren't an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. - No matter how cruel you are, it's simply against protocol to force your patients to walk outside naked. - -

Step 11: Send person on their way

- Give the patient one last check-over - make sure they don't still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. - Once you're done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance. - -

If you've gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. - - - - "} - - /obj/item/book/manual/ripley_build_and_repair name = "APLU \"Ripley\" Construction and Operation Manual" icon_state ="book" @@ -430,271 +132,17 @@ author = "Dr. L. Ight" title = "Research and Development 101" - dat = {" - - - - - -

Science For Dummies

- So you want to further SCIENCE? Good man/woman/thing! However, SCIENCE is a complicated process even though it's quite easy. For the most part, it's a three step process: -
    -
  1. Deconstruct items in the Destructive Analyzer to advance technology or improve the design.
  2. -
  3. Build unlocked designs in the Protolathe and Circuit Imprinter.
  4. -
  5. Repeat!
  6. -
- - Those are the basic steps to furthering science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter. - -

The R&D Console

- The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controlled. More on those systems in their own sections. - On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, - because if it gets damaged, you'll lose your data! - In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. - It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, - upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database.

- - NOTE: The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices. - -

Destructive Analyzer

- This is the source of all technology. Whenever you put a handheld object in it, it analyzes it and determines what sort of technological advancements you can discover from it. If the technology of the object is equal or higher then your current knowledge, - you can destroy the object to further those sciences. - Some devices (notably, some devices made from the protolathe and circuit imprinter) aren't 100% reliable when you first discover them. If these devices break down, you can put them into the Destructive Analyzer and improve their reliability rather than further science. - If their reliability is high enough, it'll also advance their related technologies. - -

Circuit Imprinter

- This machine, along with the Protolathe, is used to actually produce new devices. The Circuit Imprinter takes glass and various chemicals (depends on the design) to produce new circuit boards to build new machines or computers. It can even be used to print AI modules. - -

Protolathe

- This machine is an advanced form of the Autolathe that produce non-circuit designs. Unlike the Autolathe, it can use processed metal, glass, solid phoron, silver, gold, and diamonds along with a variety of chemicals to produce devices. - The downside is that, again, not all devices you make are 100% reliable when you first discover them. - -

Reliability and You

- As it has been stated, many devices, when they're first discovered, do not have a 100% reliability. Instead, - the reliability of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, - and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. - Once the device reaches a certain minimum reliability, you'll gain technological advancements from it. - -

Building a Better Machine

- Many machines produced from circuit boards inserted into a machine frames require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. - If you use these parts when constructing something, its attributes may be improved. - For example, if you use an advanced matter bin when constructing an autolathe (rather than a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: - Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. - - - "} - - -/obj/item/book/manual/robotics_cyborgs - name = "Cyborgs for Dummies" - icon_state = "borgbook" - author = "XISC" - title = "Cyborgs for Dummies" - - dat = {" - - - - - -

Cyborgs for Dummies

- -

Chapters

- -
    -
  1. Cyborg Related Equipment
  2. -
  3. Cyborg Modules
  4. -
  5. Cyborg Construction
  6. -
  7. Cyborg Maintenance
  8. -
  9. Cyborg Repairs
  10. -
  11. In Case of Emergency
  12. -
- - -

Cyborg Related Equipment

- -

Exosuit Fabricator

- The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs cannot be built. It seems that they may also benefit from advanced research techniques. - -

Cyborg Recharging Station

- This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. - -

Robotics Control Console

- This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or Weyland-Yutani may see to it that it never happens again. - - -

Cyborg Modules

- When a cyborg is created it picks out of an array of modules to designate its purpose. There are 6 different cyborg modules. - -

Standard Cyborg

- The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
A Standard Cyborg comes with: - - -

Engineering Cyborg

- The Engineering cyborg module comes equipped with various engineering-related tools to help with engineering-related tasks.
An Engineering Cyborg comes with: - - -

Mining Cyborg

- The Mining Cyborg module comes equipped with the latest in mining equipment. They are efficient at mining due to no need for oxygen, but their power cells limit their time in the mines.
A Mining Cyborg comes with: - - -

Security Cyborg

- The Security Cyborg module is equipped with effective security measures used to apprehend and arrest criminals without harming them a bit.
A Security Cyborg comes with: - - -

Janitor Cyborg

- The Janitor Cyborg module is equipped with various cleaning-facilitating devices.
A Janitor Cyborg comes with: - - -

Service Cyborg

- The service cyborg module comes ready to serve your human needs. It includes various entertainment and refreshment devices. Occasionally some service cyborgs may have been referred to as "Bros."
A Service Cyborg comes with: - - -

Cyborg Construction

- Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
The required materials to make a cyborg are: - - Once you have acquired the materials, you can start on construction of your cyborg.
To construct a cyborg, follow the steps below: -
    -
  1. Start the Exosuit Fabricators constructing all of the cyborg parts
  2. -
  3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
  4. -
  5. Once you have a Robot Head, place your two flashes inside the eye sockets
  6. -
  7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
  8. -
  9. Attach all of the Robot parts to the Robot frame
  10. -
  11. Insert the Man-Machine Interface (With the Brain inside) into the Robot Body
  12. -
  13. Congratulations! You have a new cyborg!
  14. -
- -

Cyborg Maintenance

- Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. - -

Replacing a Power Cell

- Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
The steps to replace a cell are as follows: -
    -
  1. Unlock the Cyborg's Interface by swiping your ID on it
  2. -
  3. Open the Cyborg's outer panel using a crowbar
  4. -
  5. Remove the old power cell
  6. -
  7. Insert the new power cell
  8. -
  9. Close the Cyborg's outer panel using a crowbar
  10. -
  11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
  12. -
- -

Exposing the Internal Wiring

- Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
You can easily expose the internal wiring by following the steps below: -
    -
  1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
  2. -
  3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
  4. -
- To re-seal the cyborg's internal wiring: -
    -
  1. Use a screwdriver to secure the cyborg's internal panel
  2. -
  3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
  4. -
- -

Cyborg Repairs

- Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). - -

Dents

- If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. - Dents in a cyborg's frame are rather easy to repair, all you need is to apply a blowtorch to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. - -

Excessive Heat Damage

- If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
To replace the internal wiring follow the steps below: -
    -
  1. Unlock the Cyborg's Interface by swiping your ID
  2. -
  3. Open the Cyborg's External Panel using a crowbar
  4. -
  5. Remove the Cyborg's Power Cell
  6. -
  7. Using a screwdriver, expose the internal wiring of the Cyborg
  8. -
  9. Replace the damaged wires inside the cyborg
  10. -
  11. Secure the internal wiring cover using a screwdriver
  12. -
  13. Insert the Cyborg's Power Cell
  14. -
  15. Close the Cyborg's External Panel using a crowbar
  16. -
  17. Lock the Cyborg's Interface by swiping your ID
  18. -
- These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. + dat = {" -

In Case of Emergency

- In case of emergency, there are a few steps you can take. + + -

"Rogue" Cyborgs

- If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. - To repair the situation, follow these steps: -
    -
  1. Locate the nearest robotics console
  2. -
  3. Determine which cyborgs are "Rogue"
  4. -
  5. Press the lockdown button to immobilize the cyborg
  6. -
  7. Locate the cyborg
  8. -
  9. Expose the cyborg's internal wiring
  10. -
  11. Check to make sure the LawSync and AI Sync lights are lit
  12. -
  13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync
  14. -
  15. Proceed to a cyborg upload console. Weyland-Yutani usually places these in the same location as AI upload consoles.
  16. -
  17. Use a "Reset" upload moduleto reset the cyborg's laws
  18. -
  19. Proceed to a Robotics Control console
  20. -
  21. Remove the lockdown on the cyborg
  22. -
+ + + -

As a last resort

- If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. -

WARNING:

Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of Weyland-Yutani equipment, and you may be punished for detonating them without reason. + - - "} @@ -718,6 +166,7 @@ "} + /obj/item/book/manual/marine_law name = "Marine Law" desc = "A set of guidelines for keeping law and order on military vessels." @@ -982,6 +431,7 @@ "} + /obj/item/book/manual/nuclear name = "Fission Mailed: Nuclear Sabotage 101" icon_state ="bookNuclear" @@ -1033,6 +483,7 @@ "} + /obj/item/book/manual/atmospipes name = "Pipes and You: Getting To Know Your Scary Tools" icon_state = "pipingbook" @@ -1140,6 +591,7 @@ "} + /obj/item/book/manual/evaguide name = "EVA Gear and You: Not Spending All Day Inside" icon_state = "evabook" @@ -1244,10 +696,6 @@ "} - - - - /obj/item/book/manual/orbital_cannon_manual name = "USCM Orbital Bombardment System Manual" icon_state = "bookEngineering" @@ -1299,6 +747,7 @@ "} + /obj/item/book/manual/orbital_cannon_manual/New() . = ..() diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm index 3f87b2bfbea2..4d6db2f7772d 100644 --- a/code/game/objects/items/devices/cictablet.dm +++ b/code/game/objects/items/devices/cictablet.dm @@ -123,7 +123,7 @@ if("award") if(announcement_faction != FACTION_MARINE) return - print_medal(usr, src) + open_medal_panel(usr, src) . = TRUE if("mapview") diff --git a/code/game/objects/items/devices/helmet_visors.dm b/code/game/objects/items/devices/helmet_visors.dm index c3c3f9597060..05d75a9fefd6 100644 --- a/code/game/objects/items/devices/helmet_visors.dm +++ b/code/game/objects/items/devices/helmet_visors.dm @@ -295,7 +295,7 @@ /atom/movable/nvg_light light_power = 0.5 light_range = 1 - light_color = COLOUR_GREEN + light_color = COLOR_LIGHT_GREEN light_system = MOVABLE_LIGHT light_flags = LIGHT_ATTACHED diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index c6da7d354054..114ed48b1819 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -30,9 +30,8 @@ return // we know user is a human now, so adjust user for this check var/mob/living/carbon/human/humanoid = user - if(humanoid.speech_problem_flag) - var/list/new_message = humanoid.handle_speech_problems(message) - message = new_message[1] + var/list/new_message = humanoid.handle_speech_problems(message) + message = new_message[1] message = capitalize(message) log_admin("[key_name(user)] used a megaphone to say: >[message]<") diff --git a/code/game/objects/items/devices/motion_detector.dm b/code/game/objects/items/devices/motion_detector.dm index f8b3eaff4d51..c26db692f082 100644 --- a/code/game/objects/items/devices/motion_detector.dm +++ b/code/game/objects/items/devices/motion_detector.dm @@ -279,7 +279,7 @@ DB.icon_state = "[blip_icon]_blip" DB.setDir(initial(DB.dir)) - DB.screen_loc = "[Clamp(c_view + 1 - view_x_offset + (target.x - user.x), 1, 2*c_view+1)],[Clamp(c_view + 1 - view_y_offset + (target.y - user.y), 1, 2*c_view+1)]" + DB.screen_loc = "[clamp(c_view + 1 - view_x_offset + (target.x - user.x), 1, 2*c_view+1)],[clamp(c_view + 1 - view_y_offset + (target.y - user.y), 1, 2*c_view+1)]" user.client.add_to_screen(DB) addtimer(CALLBACK(src, PROC_REF(clear_pings), user, DB), 1 SECONDS) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index e5c717e699f0..9581f63679b9 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -405,6 +405,24 @@ var/datum/techtree/T = GET_TREE(TREE_MARINE) T.enter_mob(usr) +/obj/item/device/radio/headset/almayer/verb/give_medal_recommendation() + set name = "Give Medal Recommendation" + set desc = "Send a medal recommendation for approval by the Commanding Officer" + set category = "Object.Medals" + set src in usr + + var/mob/living/carbon/human/wearer = usr + if(!istype(wearer)) + return + var/obj/item/card/id/id_card = wearer.wear_id?.GetID() + if(!istype(id_card)) + return + if(!(id_card.rank in list(JOB_SO, JOB_XO, JOB_SQUAD_LEADER))) + to_chat(wearer, SPAN_WARNING("Only Staff Officers, Executive Officers and Squad Leaders are permitted to give medal recommendations!")) + return + if(add_medal_recommendation(usr)) + to_chat(usr, SPAN_NOTICE("Recommendation successfully submitted.")) + /obj/item/device/radio/headset/almayer/ce name = "chief engineer's headset" desc = "The headset of the guy in charge of spooling engines, managing MTs, and tearing up the floor for scrap metal. Of robust and sturdy construction. Channels are as follows: :n - engineering, :v - marine command, :m - medical, :u - requisitions, :a - alpha squad, :b - bravo squad, :c - charlie squad, :d - delta squad." diff --git a/code/game/objects/items/devices/radio/listening_bugs.dm b/code/game/objects/items/devices/radio/listening_bugs.dm index 67a91de1bd56..9492188a14f0 100644 --- a/code/game/objects/items/devices/radio/listening_bugs.dm +++ b/code/game/objects/items/devices/radio/listening_bugs.dm @@ -126,7 +126,7 @@ size = "small" if(SIZE_MEDIUM) size = "normal-sized" - . += "This is a [blood_color ? blood_color != "#030303" ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item." + . += "This is a [blood_color ? blood_color != COLOR_OIL ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item." if(desc) . += desc if(desc_lore) diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm index 071ff3458a91..1d2986f79e55 100644 --- a/code/game/objects/items/explosives/plastic.dm +++ b/code/game/objects/items/explosives/plastic.dm @@ -321,6 +321,8 @@ penetration = 0.60 deploying_time = 10 var/shrapnel_volume = 40 + var/shrapnel_type = /datum/ammo/bullet/shrapnel/metal + var/explosion_strength = 60 /obj/item/explosive/plastic/breaching_charge/can_place(mob/user, atom/target) if(!is_type_in_list(target, breachable))//only items on the list are allowed @@ -347,13 +349,21 @@ /obj/item/explosive/plastic/breaching_charge/handle_explosion(turf/target_turf, dir, cause_data) var/explosion_target = get_step(target_turf, dir) - create_shrapnel(explosion_target, shrapnel_volume, dir, angle,/datum/ammo/bullet/shrapnel/metal, cause_data) + create_shrapnel(explosion_target, shrapnel_volume, dir, angle, shrapnel_type, cause_data) addtimer(CALLBACK(src, PROC_REF(trigger_explosion), target_turf, dir, cause_data), 1) /obj/item/explosive/plastic/breaching_charge/proc/trigger_explosion(turf/target_turf, dir, cause_data) - cell_explosion(target_turf, 60, 60, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, dir, cause_data) + cell_explosion(target_turf, explosion_strength, explosion_strength, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, dir, cause_data) qdel(src) +/obj/item/explosive/plastic/breaching_charge/rubber + name = "X17 riot charge" + desc = "An explosive device used to break into areas while protecting the user from the blast. Unlike the standard breaching charge, the X17 deploys a cone spray of rubber pellets to incapacitate rather than kill." + icon_state = "riot-charge" + overlay_image = "riot-active" + shrapnel_volume = 20 + shrapnel_type = /datum/ammo/bullet/shrapnel/rubber + /obj/item/explosive/plastic/breaching_charge/plasma name = "plasma charge" desc = "An alien explosive device. Who knows what it might do." @@ -367,6 +377,8 @@ deploying_time = 10 flags_item = NOBLUDGEON|ITEM_PREDATOR shrapnel_volume = 10 + shrapnel_type = /datum/ammo/bullet/shrapnel/plasma + explosion_strength = 90 /obj/item/explosive/plastic/breaching_charge/plasma/can_place(mob/user, atom/target) if(!HAS_TRAIT(user, TRAIT_YAUTJA_TECH)) @@ -374,11 +386,3 @@ return FALSE . = ..() -/obj/item/explosive/plastic/breaching_charge/plasma/handle_explosion(turf/target_turf, dir, cause_data) - var/explosion_target = get_step(target_turf, dir) - create_shrapnel(explosion_target, shrapnel_volume, dir, angle,/datum/ammo/bullet/shrapnel/plasma, cause_data) - addtimer(CALLBACK(src, PROC_REF(trigger_explosion), target_turf, dir, cause_data), 1) - -/obj/item/explosive/plastic/breaching_charge/plasma/trigger_explosion(turf/target_turf, dir, cause_data) - cell_explosion(target_turf, 90, 90, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, dir, cause_data) - qdel(src) diff --git a/code/game/objects/items/fulton.dm b/code/game/objects/items/fulton.dm index 788613cf4c6e..e36d269c8b90 100644 --- a/code/game/objects/items/fulton.dm +++ b/code/game/objects/items/fulton.dm @@ -141,8 +141,8 @@ GLOBAL_LIST_EMPTY(deployed_fultons) original_location = get_turf(attached_atom) playsound(loc, 'sound/items/fulton.ogg', 50, 1) reservation = SSmapping.RequestBlockReservation(3, 3, turf_type_override = /turf/open/space) - var/middle_x = reservation.bottom_left_coords[1] + FLOOR((reservation.top_right_coords[1] - reservation.bottom_left_coords[1]) / 2, 1) - var/middle_y = reservation.bottom_left_coords[2] + FLOOR((reservation.top_right_coords[2] - reservation.bottom_left_coords[2]) / 2, 1) + var/middle_x = reservation.bottom_left_coords[1] + Floor((reservation.top_right_coords[1] - reservation.bottom_left_coords[1]) / 2) + var/middle_y = reservation.bottom_left_coords[2] + Floor((reservation.top_right_coords[2] - reservation.bottom_left_coords[2]) / 2) var/turf/space_tile = locate(middle_x, middle_y, reservation.bottom_left_coords[3]) if(!space_tile) visible_message(SPAN_WARNING("[src] begins beeping like crazy. Something is wrong!")) diff --git a/code/game/objects/items/lightstick.dm b/code/game/objects/items/lightstick.dm index 89ce2c00762e..05f5a96c5b16 100644 --- a/code/game/objects/items/lightstick.dm +++ b/code/game/objects/items/lightstick.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/items/lighting.dmi' icon_state = "lightstick_blue0" light_range = 2 - light_color = COLOUR_BLUE + light_color = COLOR_BLUE var/s_color = "blue" var/trample_chance = 30 var/can_trample = TRUE @@ -68,7 +68,7 @@ name = "red lightstick" icon_state = "lightstick_red0" s_color = "red" - light_color = COLOUR_RED + light_color = COLOR_RED /obj/item/lightstick/red/planted icon_state = "lightstick_red1" diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index c538cbf3944f..804d258bdcb4 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(cached_icons) name = "Paint" id = "paint_" reagent_state = 2 - color = "#808080" + color = COLOR_GRAY description = "This paint will only adhere to floor tiles." /datum/reagent/paint/reaction_turf(turf/T, volume) @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(cached_icons) id = "paint_remover" description = "Paint remover is used to remove floor paint from floor tiles." reagent_state = 2 - color = "#808080" + color = COLOR_GRAY /datum/reagent/paint_remover/reaction_turf(turf/T, volume) if(istype(T) && T.icon != initial(T.icon)) diff --git a/code/game/objects/items/reagent_containers/food.dm b/code/game/objects/items/reagent_containers/food.dm index ded1b90b106f..f4b2213904d2 100644 --- a/code/game/objects/items/reagent_containers/food.dm +++ b/code/game/objects/items/reagent_containers/food.dm @@ -9,7 +9,7 @@ possible_transfer_amounts = null volume = 50 //Sets the default container amount for all food items. flags_atom = CAN_BE_SYRINGED - var/filling_color = "#FFFFFF" //Used by sandwiches. + var/filling_color = COLOR_WHITE //Used by sandwiches. /obj/item/reagent_container/food/Initialize() . = ..() diff --git a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm index 0e63a19c7ef1..b522d8d2ed81 100644 --- a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm +++ b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm @@ -107,7 +107,7 @@ if(alcohol_potency < BURN_LEVEL_TIER_1) to_chat(user, SPAN_NOTICE("There's not enough flammable liquid in \the [src]!")) return - alcohol_potency = Clamp(alcohol_potency, BURN_LEVEL_TIER_1, BURN_LEVEL_TIER_7) + alcohol_potency = clamp(alcohol_potency, BURN_LEVEL_TIER_1, BURN_LEVEL_TIER_7) if(!do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) return diff --git a/code/game/objects/items/reagent_containers/food/sandwich.dm b/code/game/objects/items/reagent_containers/food/sandwich.dm index 511c0c042be1..b3f68bd299a9 100644 --- a/code/game/objects/items/reagent_containers/food/sandwich.dm +++ b/code/game/objects/items/reagent_containers/food/sandwich.dm @@ -74,7 +74,7 @@ name = lowertext("[fullname] sandwich") if(length(name) > 80) name = "[pick(list("absurd","colossal","enormous","ridiculous"))] sandwich" - w_class = n_ceil(Clamp((ingredients.len/2),1,3)) + w_class = Ceiling(clamp((ingredients.len/2),1,3)) /obj/item/reagent_container/food/snacks/csandwich/Destroy() QDEL_NULL_LIST(ingredients) diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm index 0d8012726617..174dace1b9b0 100644 --- a/code/game/objects/items/reagent_containers/food/snacks.dm +++ b/code/game/objects/items/reagent_containers/food/snacks.dm @@ -569,7 +569,7 @@ name = "Boiled egg" desc = "A hard-boiled egg." icon_state = "egg" - filling_color = "#FFFFFF" + filling_color = COLOR_WHITE /obj/item/reagent_container/food/snacks/boiledegg/Initialize() . = ..() @@ -857,7 +857,7 @@ name = "Clown Burger" desc = "This tastes funny..." icon_state = "clownburger" - filling_color = "#FF00FF" + filling_color = COLOR_MAGENTA /obj/item/reagent_container/food/snacks/clownburger/Initialize() . = ..() @@ -873,7 +873,7 @@ name = "Mime Burger" desc = "Its taste defies language." icon_state = "mimeburger" - filling_color = "#FFFFFF" + filling_color = COLOR_WHITE /obj/item/reagent_container/food/snacks/mimeburger/Initialize() . = ..() @@ -1360,7 +1360,7 @@ name = "Tomato soup" desc = "Smells like copper" icon_state = "tomatosoup" - filling_color = "#FF0000" + filling_color = COLOR_RED /obj/item/reagent_container/food/snacks/bloodsoup/Initialize() . = ..() @@ -2120,7 +2120,7 @@ desc = "A tasty dessert that won't make it through a metal detector." icon_state = "gappletart" trash = /obj/item/trash/plate - filling_color = "#FFFF00" + filling_color = COLOR_YELLOW /obj/item/reagent_container/food/snacks/appletart/Initialize() . = ..() diff --git a/code/game/objects/items/reagent_containers/food/snacks/grown.dm b/code/game/objects/items/reagent_containers/food/snacks/grown.dm index 32423c121b61..4c988f18ac7c 100644 --- a/code/game/objects/items/reagent_containers/food/snacks/grown.dm +++ b/code/game/objects/items/reagent_containers/food/snacks/grown.dm @@ -62,7 +62,7 @@ name = "cherries" desc = "Great for toppings!" icon_state = "cherry" - filling_color = "#FF0000" + filling_color = COLOR_RED gender = PLURAL plantname = "cherry" @@ -357,7 +357,7 @@ name = "chili" desc = "It's spicy! Wait... IT'S BURNING ME!!" icon_state = "chilipepper" - filling_color = "#FF0000" + filling_color = COLOR_RED plantname = "chili" /obj/item/reagent_container/food/snacks/grown/eggplant @@ -379,7 +379,7 @@ name = "tomato" desc = "I say to-mah-to, you say tom-mae-to." icon_state = "tomato" - filling_color = "#FF0000" + filling_color = COLOR_RED potency = 10 plantname = "tomato" @@ -395,7 +395,7 @@ desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!" icon_state = "killertomato" potency = 10 - filling_color = "#FF0000" + filling_color = COLOR_RED potency = 30 plantname = "killertomato" @@ -414,7 +414,7 @@ desc = "So bloody...so...very...bloody....AHHHH!!!!" icon_state = "bloodtomato" potency = 10 - filling_color = "#FF0000" + filling_color = COLOR_RED plantname = "bloodtomato" /obj/item/reagent_container/food/snacks/grown/bloodtomato/launch_impact(atom/hit_atom) @@ -502,7 +502,7 @@ desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." icon_state = "amanita" potency = 10 - filling_color = "#FF0000" + filling_color = COLOR_RED plantname = "amanita" /obj/item/reagent_container/food/snacks/grown/mushroom/angel diff --git a/code/game/objects/items/stacks/cable_coil.dm b/code/game/objects/items/stacks/cable_coil.dm index e846979c00b4..077cb801c90d 100644 --- a/code/game/objects/items/stacks/cable_coil.dm +++ b/code/game/objects/items/stacks/cable_coil.dm @@ -33,7 +33,7 @@ /obj/item/stack/cable_coil/proc/updateicon() if (!color) - color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_MAGENTA, COLOR_YELLOW, COLOR_CYAN) if(amount == 1) icon_state = "coil1" name = "cable piece" @@ -298,11 +298,11 @@ color = "#a8c1dd" /obj/item/stack/cable_coil/white - color = "#FFFFFF" + color = COLOR_WHITE /obj/item/stack/cable_coil/random/Initialize() . = ..() - color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_MAGENTA, COLOR_YELLOW, COLOR_CYAN) /obj/item/stack/cable_coil/attack(mob/M as mob, mob/user as mob) if(ishuman(M)) diff --git a/code/game/objects/items/stacks/flags.dm b/code/game/objects/items/stacks/flags.dm index bc55096211d4..484d2779f5f8 100644 --- a/code/game/objects/items/stacks/flags.dm +++ b/code/game/objects/items/stacks/flags.dm @@ -71,7 +71,7 @@ var/obj/item/stack/flag/newflag = new src.type(T) newflag.amount = 1 newflag.upright = TRUE - anchored = TRUE + newflag.anchored = TRUE newflag.name = newflag.singular_name newflag.icon_state = "[newflag.base_state]_open" newflag.visible_message("[user] plants [newflag] firmly in the ground.") diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a0814290ca40..f394758e5f7d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_INIT_TYPED(metal_recipes, /datum/stack_recipe, list ( \ new/datum/stack_recipe("wall girder", /obj/structure/girder, 2, time = 50, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI), \ new/datum/stack_recipe("window frame", /obj/structure/window_frame/almayer, 5, time = 50, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI), \ new/datum/stack_recipe("airlock assembly", /obj/structure/airlock_assembly, 5, time = 50, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI), \ + new/datum/stack_recipe("large airlock assembly", /obj/structure/airlock_assembly/multi_tile, 5, time = 50, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI), \ null, \ new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1), \ new/datum/stack_recipe("chair", /obj/structure/bed/chair, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1), \ diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 412dcf164cd4..29c4ec15d03a 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -461,6 +461,12 @@ icon_state = "marinebigsatch" max_storage_space = 20 +/obj/item/storage/backpack/marine/satchel/intel/chestrig + name = "\improper USCM expedition chestrig" + desc = "A heavy-duty IMP based chestrig, can quickly be accessed with only one hand. Usually issued to USCM intelligence officers." + icon_state = "intel_chestrig" + max_storage_space = 20 + /obj/item/storage/backpack/marine/satchel name = "\improper USCM satchel" desc = "A heavy-duty satchel carried by some USCM soldiers and support personnel." diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index acb87e988879..7369df548045 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -976,7 +976,7 @@ to_chat(user, SPAN_WARNING("[O] is empty!")) return - var/amt_to_remove = Clamp(O.reagents.total_volume, 0, inner.volume) + var/amt_to_remove = clamp(O.reagents.total_volume, 0, inner.volume) if(!amt_to_remove) to_chat(user, SPAN_WARNING("[O] is empty!")) return @@ -989,7 +989,7 @@ fill_autoinjector(contents[1]) //Top up our inner reagent canister after filling up the injector - amt_to_remove = Clamp(O.reagents.total_volume, 0, inner.volume) + amt_to_remove = clamp(O.reagents.total_volume, 0, inner.volume) if(amt_to_remove) O.reagents.trans_to(inner, amt_to_remove) diff --git a/code/game/objects/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm index 82870f7ed8d1..d5cd708f29b3 100644 --- a/code/game/objects/items/tools/flame_tools.dm +++ b/code/game/objects/items/tools/flame_tools.dm @@ -180,7 +180,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM flags_atom = CAN_BE_SYRINGED attack_verb = list("burnt", "singed") blood_overlay_type = "" - light_color = LIGHT_COLOUR_ORANGE + light_color = LIGHT_COLOR_ORANGE /// Note - these are in masks.dmi not in cigarette.dmi var/icon_on = "cigon" var/icon_off = "cigoff" @@ -685,7 +685,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon = 'icons/obj/items/items.dmi' icon_state = "lighter_g" item_state = "lighter_g" - light_color = LIGHT_COLOUR_LAVA + light_color = LIGHT_COLOR_LAVA var/icon_on = "lighter_g_on" var/icon_off = "lighter_g" var/clr = "g" @@ -721,6 +721,22 @@ CIGARETTE PACKETS ARE IN FANCY.DM log_admin("[user] has engraved \the [src] with engraving \"[str]\". (CKEY: ([user.ckey]))") +/obj/item/tool/lighter/zippo/black + name = "black Zippo lighter" + desc = "A fancy black Zippo lighter. Ignite in style." + icon_state = "blackzippo" + item_state = "blackzippo" + icon_on = "blackzippoon" + icon_off = "blackzippo" + +/obj/item/tool/lighter/zippo/blue + name = "blue Zippo lighter" + desc = "A fancy blue Zippo lighter. Ignite in style." + icon_state = "bluezippo" + item_state = "bluezippo" + icon_on = "bluezippoon" + icon_off = "bluezippo" + /obj/item/tool/lighter/zippo/gold name = "golden Zippo lighter" desc = "A gold-anodized Zippo lighter. Ostentatious, but it certainly stands out." @@ -730,6 +746,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_off = "goldzippo" black_market_value = 30 +/obj/item/tool/lighter/zippo/executive + name = "Weyland-Yutani executive Zippo lighter" + desc = "A remarkable Zippo lighter embellished in the Company's black and gold shade." + icon_state = "execzippo" + item_state = "execzippo" + icon_on = "execzippoon" + icon_off = "execzippo" + black_market_value = 40 + /obj/item/tool/lighter/random /obj/item/tool/lighter/random/Initialize() diff --git a/code/game/objects/items/tools/misc_tools.dm b/code/game/objects/items/tools/misc_tools.dm index 44aaab771db8..06f42aacd56c 100644 --- a/code/game/objects/items/tools/misc_tools.dm +++ b/code/game/objects/items/tools/misc_tools.dm @@ -161,7 +161,7 @@ matter = list("metal" = 10) inherent_traits = list(TRAIT_TOOL_PEN) /// what color the ink is! - var/pen_colour = "black" + var/pen_color = "black" var/on = TRUE var/clicky = FALSE @@ -180,7 +180,7 @@ /obj/item/tool/pen/proc/update_pen_state() overlays.Cut() if(on) - overlays += "+[pen_colour]_tip" + overlays += "+[pen_color]_tip" /obj/item/tool/pen/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() @@ -246,7 +246,7 @@ /obj/item/tool/pen/blue desc = "It's a normal blue ink pen." - pen_colour = "blue" + pen_color = "blue" /obj/item/tool/pen/blue/clicky desc = "It's a WY brand extra clicky blue ink pen." @@ -255,7 +255,7 @@ /obj/item/tool/pen/red desc = "It's a normal red ink pen." - pen_colour = "red" + pen_color = "red" /obj/item/tool/pen/red/clicky desc = "It's a WY brand extra clicky red ink pen." @@ -264,7 +264,7 @@ /obj/item/tool/pen/green desc = "It's a normal green ink pen." - pen_colour = "green" + pen_color = "green" /obj/item/tool/pen/green/clicky desc = "It's a WY brand extra clicky green ink pen." @@ -273,7 +273,7 @@ /obj/item/tool/pen/invisible desc = "It's an invisible pen marker." - pen_colour = "white" + pen_color = "white" /obj/item/tool/pen/fountain desc = "A lavish testament to the ingenuity of ARMAT's craftsmanship, this fountain pen is a paragon of design and functionality. Detailed with golden accents and intricate mechanics, the pen allows for a swift change between a myriad of ink colors with a simple twist. A product of precision engineering, each mechanism inside the pen is designed to provide a seamless, effortless transition from one color to the next, creating an instrument of luxurious versatility." @@ -282,8 +282,8 @@ icon_state = "fountain_pen" item_state = "fountain_pen" matter = list("metal" = 20, "gold" = 10) - var/static/list/colour_list = list("red", "blue", "green", "yellow", "purple", "pink", "brown", "black", "orange") // Can add more colors as required - var/current_colour_index = 1 + var/static/list/color_list = list("red", "blue", "green", "yellow", "purple", "pink", "brown", "black", "orange") // Can add more colors as required + var/current_color_index = 1 var/owner_name /obj/item/tool/pen/fountain/pickup(mob/user, silent) @@ -305,9 +305,9 @@ /obj/item/tool/pen/fountain/attack_self(mob/living/carbon/human/user) if(on) - current_colour_index = (current_colour_index % length(colour_list)) + 1 - pen_colour = colour_list[current_colour_index] - balloon_alert(user,"you twist the pen and change the ink color to [pen_colour].") + current_color_index = (current_color_index % length(color_list)) + 1 + pen_color = color_list[current_color_index] + balloon_alert(user,"you twist the pen and change the ink color to [pen_color].") if(clicky) playsound(user.loc, 'sound/items/pen_click_on.ogg', 100, 1, 5) update_pen_state() @@ -415,6 +415,10 @@ name = "\improper DENIED rubber stamp" icon_state = "stamp-deny" +/obj/item/tool/stamp/approved + name = "\improper APPROVED rubber stamp" + icon_state = "stamp-approve" + /obj/item/tool/stamp/clown name = "clown's rubber stamp" icon_state = "stamp-clown" diff --git a/code/game/objects/items/toys/crayons.dm b/code/game/objects/items/toys/crayons.dm index c02b59289fa1..c8dc85b95a1a 100644 --- a/code/game/objects/items/toys/crayons.dm +++ b/code/game/objects/items/toys/crayons.dm @@ -37,21 +37,21 @@ /obj/item/toy/crayon/mime icon_state = "crayonmime" desc = "A very sad-looking crayon." - crayon_color = "#FFFFFF" - shadeColour = "#000000" + crayon_color = COLOR_WHITE + shadeColour = COLOR_BLACK colourName = "mime" uses = 0 /obj/item/toy/crayon/mime/attack_self(mob/living/user) //inversion ..() - if(crayon_color != "#FFFFFF" && shadeColour != "#000000") - crayon_color = "#FFFFFF" - shadeColour = "#000000" + if(crayon_color != COLOR_WHITE && shadeColour != COLOR_BLACK) + crayon_color = COLOR_WHITE + shadeColour = COLOR_BLACK to_chat(user, "You will now draw in white and black with this crayon.") else - crayon_color = "#000000" - shadeColour = "#FFFFFF" + crayon_color = COLOR_BLACK + shadeColour = COLOR_WHITE to_chat(user, "You will now draw in black and white with this crayon.") /obj/item/toy/crayon/rainbow diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm index b31be0790a53..0a37e4bcec59 100644 --- a/code/game/objects/structures/barricade/barricade.dm +++ b/code/game/objects/structures/barricade/barricade.dm @@ -338,7 +338,7 @@ /obj/structure/barricade/update_health(damage, nomessage) health -= damage - health = Clamp(health, 0, maxhealth) + health = clamp(health, 0, maxhealth) if(!health) if(!nomessage) diff --git a/code/game/objects/structures/bookcase.dm b/code/game/objects/structures/bookcase.dm index ce338de47b35..b310bd00aa07 100644 --- a/code/game/objects/structures/bookcase.dm +++ b/code/game/objects/structures/bookcase.dm @@ -71,7 +71,6 @@ /obj/structure/bookcase/manuals/medical/Initialize() . = ..() - new /obj/item/book/manual/medical_cloning(src) new /obj/item/book/manual/medical_diagnostics_manual(src) new /obj/item/book/manual/medical_diagnostics_manual(src) new /obj/item/book/manual/medical_diagnostics_manual(src) @@ -84,11 +83,9 @@ /obj/structure/bookcase/manuals/engineering/Initialize() . = ..() new /obj/item/book/manual/engineering_construction(src) - new /obj/item/book/manual/engineering_particle_accelerator(src) new /obj/item/book/manual/engineering_hacking(src) new /obj/item/book/manual/engineering_guide(src) new /obj/item/book/manual/atmospipes(src) - new /obj/item/book/manual/engineering_singularity_safety(src) new /obj/item/book/manual/evaguide(src) update_icon() diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 078eac70bd14..39a659c5f397 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -268,22 +268,22 @@ GLOBAL_LIST_EMPTY(rbarrel_cap_states) // Will be set up in generate_barrel_states GLOBAL_LIST_INIT(rbarrel_center_states, generate_barrel_states()) -GLOBAL_LIST_INIT(rbarrel_color_list, list(COLOUR_SILVER, - COLOUR_FLOORTILE_GRAY, - COLOUR_MAROON, - COLOUR_SOFT_RED, - COLOUR_LIGHT_GRAYISH_RED, - COLOUR_VERY_SOFT_YELLOW, - COLOUR_OLIVE, - COLOUR_DARK_MODERATE_LIME_GREEN, - COLOUR_TEAL, - COLOUR_MODERATE_BLUE, - COLOUR_PURPLE, - COLOUR_STRONG_VIOLET, - COLOUR_BEIGE, - COLOUR_DARK_MODERATE_ORANGE, - COLOUR_BROWN, - COLOUR_DARK_BROWN)) +GLOBAL_LIST_INIT(rbarrel_color_list, list(COLOR_SILVER, + COLOR_FLOORTILE_GRAY, + COLOR_MAROON, + COLOR_SOFT_RED, + COLOR_LIGHT_GRAYISH_RED, + COLOR_VERY_SOFT_YELLOW, + COLOR_OLIVE, + COLOR_DARK_MODERATE_LIME_GREEN, + COLOR_TEAL, + COLOR_MODERATE_BLUE, + COLOR_PURPLE, + COLOR_STRONG_VIOLET, + LIGHT_BEIGE, + COLOR_DARK_MODERATE_ORANGE, + COLOR_BROWN, + COLOR_DARK_BROWN)) /proc/generate_barrel_states() var/list/rbarrel_center_states = list() diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 9d007a0c8c80..0c763378ede1 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -1,80 +1,111 @@ +#define MAX_NOTICES 8 + /obj/structure/noticeboard name = "notice board" desc = "A board for pinning important notices upon." icon = 'icons/obj/structures/props/stationobjs.dmi' - icon_state = "nboard00" + icon_state = "noticeboard" density = FALSE anchored = TRUE var/notices = 0 -/obj/structure/noticeboard/Initialize() +/obj/structure/noticeboard/Initialize(mapload) . = ..() + if(!mapload) + return + for(var/obj/item/I in loc) - if(notices > 4) break + if(notices >= MAX_NOTICES) + break if(istype(I, /obj/item/paper)) I.forceMove(src) notices++ - icon_state = "nboard0[notices]" + update_overlays() //attaching papers!! -/obj/structure/noticeboard/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/paper)) - if(notices < 5) - O.add_fingerprint(user) - add_fingerprint(user) - user.drop_held_item() - O.forceMove(src) +/obj/structure/noticeboard/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo)) + if(!allowed(user)) + to_chat(user, SPAN_WARNING("You are not authorized to add notices!")) + return + if(notices < MAX_NOTICES) + if(!user.drop_inv_item_to_loc(O, src)) + return notices++ - icon_state = "nboard0[notices]" //update sprite - to_chat(user, SPAN_NOTICE("You pin the paper to the noticeboard.")) + update_overlays() + to_chat(user, SPAN_NOTICE("You pin the [O] to the noticeboard.")) else - to_chat(user, SPAN_NOTICE("You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.")) + to_chat(user, SPAN_WARNING("The notice board is full!")) + else if(istype(O, /obj/item/tool/pen)) + user.set_interaction(src) + tgui_interact(user) + else + return ..() -/obj/structure/noticeboard/attack_hand(user as mob) - var/dat = "Noticeboard
" - for(var/obj/item/paper/P in src) - dat += "
[P.name] Write Remove
" - user << browse("Notices[dat]","window=noticeboard") - onclose(user, "noticeboard") +/obj/structure/noticeboard/attack_hand(mob/user) + . = ..() + user.set_interaction(src) + tgui_interact(user) +/obj/structure/noticeboard/ui_state(mob/user) + return GLOB.physical_state -/obj/structure/noticeboard/Topic(href, href_list) - ..() - usr.set_interaction(src) - if(href_list["remove"]) - if((usr.stat || usr.is_mob_restrained())) //For when a player is handcuffed while they have the notice window open - return - var/obj/item/P = locate(href_list["remove"]) - if((P && P.loc == src)) - P.forceMove(get_turf(src) )//dump paper on the floor because you're a clumsy fuck - P.add_fingerprint(usr) - add_fingerprint(usr) - notices-- - icon_state = "nboard0[notices]" +/obj/structure/noticeboard/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "NoticeBoard", name) + ui.open() - if(href_list["write"]) - if((usr.stat || usr.is_mob_restrained())) //For when a player is handcuffed while they have the notice window open - return - var/obj/item/P = locate(href_list["write"]) +/obj/structure/noticeboard/ui_data(mob/user) + var/list/data = list() + data["allowed"] = allowed(user) + data["items"] = list() + for(var/obj/item/content in contents) + var/list/content_data = list( + name = content.name, + ref = REF(content) + ) + data["items"] += list(content_data) + return data + +/obj/structure/noticeboard/ui_act(action, params) + . = ..() + if(.) + return + + var/obj/item/item = locate(params["ref"]) in contents + if(!istype(item) || item.loc != src) + return + + var/mob/user = usr + + switch(action) + if("examine") + user.examinate(item) + return TRUE + if("write") + var/obj/item/writing_tool = user.get_held_item() + if(!istype(writing_tool, /obj/item/tool/pen)) + balloon_alert(user, "you need a pen for that!") + return + item.attackby(writing_tool, user) + return TRUE + if("remove") + if(!allowed(user)) + return + remove_item(item, user) + return TRUE + +/obj/structure/noticeboard/proc/update_overlays() + if(overlays) overlays.Cut() + if(notices) + overlays += image(icon, "notices_[notices]") - if((P && P.loc == src)) //ifthe paper's on the board - if(HAS_TRAIT(usr.r_hand, TRAIT_TOOL_PEN)) - add_fingerprint(usr) - P.attackby(usr.r_hand, usr) //then do ittttt - else - if(HAS_TRAIT(usr.l_hand, TRAIT_TOOL_PEN)) //check other hand for pen - add_fingerprint(usr) - P.attackby(usr.l_hand, usr) - else - to_chat(usr, SPAN_NOTICE("You'll need something to write with!")) +/obj/structure/noticeboard/proc/remove_item(obj/item/item, mob/user) + item.forceMove(loc) + if(user) + user.put_in_hands(item) + balloon_alert(user, "removed from board") + notices-- + update_overlays() - if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) - if((P && P.loc == src)) - if(!( istype(usr, /mob/living/carbon/human) )) - usr << browse("[P.name][stars(P.info)]", "window=[P.name]") - onclose(usr, "[P.name]") - else - usr << browse("[P.name][P.info]", "window=[P.name]") - onclose(usr, "[P.name]") - return diff --git a/code/game/objects/structures/pipes/vents/vents.dm b/code/game/objects/structures/pipes/vents/vents.dm index 298fbc57f4ad..d7e090c581c5 100644 --- a/code/game/objects/structures/pipes/vents/vents.dm +++ b/code/game/objects/structures/pipes/vents/vents.dm @@ -176,7 +176,7 @@ addtimer(CALLBACK(src, PROC_REF(release_gas), radius), warning_time) /obj/structure/pipes/vents/proc/release_gas(radius = 4) - radius = Clamp(radius, 1, 10) + radius = clamp(radius, 1, 10) if(!gas_holder || welded) return FALSE playsound(loc, 'sound/effects/smoke.ogg', 25, 1, 4) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index ee2c2bcee882..7469a568f7e0 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -420,6 +420,8 @@ GLOBAL_LIST_EMPTY(activated_medevac_stretchers) buckling_y = 0 foldabletype = /obj/item/roller/bedroll accepts_bodybag = FALSE + debris = null + buildstacktype = null /obj/item/roller/bedroll name = "folded bedroll" diff --git a/code/game/objects/structures/surface.dm b/code/game/objects/structures/surface.dm index 13a81af2dc3d..ac8cf51a407e 100644 --- a/code/game/objects/structures/surface.dm +++ b/code/game/objects/structures/surface.dm @@ -27,8 +27,8 @@ var/mouse_x = text2num(click_data["icon-x"])-1 // Ranging from 0 to 31 var/mouse_y = text2num(click_data["icon-y"])-1 - var/cell_x = Clamp(round(mouse_x/CELLSIZE), 0, CELLS-1) // Ranging from 0 to CELLS-1 - var/cell_y = Clamp(round(mouse_y/CELLSIZE), 0, CELLS-1) + var/cell_x = clamp(round(mouse_x/CELLSIZE), 0, CELLS-1) // Ranging from 0 to CELLS-1 + var/cell_y = clamp(round(mouse_y/CELLSIZE), 0, CELLS-1) var/list/center = cached_key_number_decode(new_item.center_of_mass) diff --git a/code/game/sound.dm b/code/game/sound.dm index ac863a3bc51e..f2b71d9a64c7 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -100,8 +100,8 @@ //This is the replacement for playsound_local. Use this for sending sounds directly to a client -/proc/playsound_client(client/C, soundin, atom/origin, vol = 100, random_freq, vol_cat = VOLUME_SFX, channel = 0, status, list/echo, y_s_offset, x_s_offset) - if(!istype(C) || !C.soundOutput) return FALSE +/proc/playsound_client(client/client, soundin, atom/origin, vol = 100, random_freq, vol_cat = VOLUME_SFX, channel = 0, status, list/echo, y_s_offset, x_s_offset) + if(!istype(client) || !client.soundOutput) return FALSE var/datum/sound_template/S = new() if(origin) var/turf/T = get_turf(origin) @@ -126,7 +126,7 @@ S.echo = echo S.y_s_offset = y_s_offset S.x_s_offset = x_s_offset - SSsound.queue(S, list(C)) + SSsound.queue(S, list(client)) /// Plays sound to all mobs that are map-level contents of an area /proc/playsound_area(area/A, soundin, vol = 100, channel = 0, status, vol_cat = VOLUME_SFX, list/echo, y_s_offset, x_s_offset) diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 7d9dd6303c64..ac1635f151dd 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -115,10 +115,10 @@ scorchedness = 1 if(2 to 30) - scorchedness = Clamp(scorchedness + 1, 0, 3) //increase scorch by 1 (not that hot of a fire) + scorchedness = clamp(scorchedness + 1, 0, 3) //increase scorch by 1 (not that hot of a fire) if(31 to 60) - scorchedness = Clamp(scorchedness + 2, 0, 3) //increase scorch by 2 (hotter fire) + scorchedness = clamp(scorchedness + 2, 0, 3) //increase scorch by 2 (hotter fire) if(61 to INFINITY) scorchedness = 3 //max out the scorchedness (hottest fire) diff --git a/code/game/turfs/walls/r_wall.dm b/code/game/turfs/walls/r_wall.dm index 98ec3881600f..9d256b257090 100644 --- a/code/game/turfs/walls/r_wall.dm +++ b/code/game/turfs/walls/r_wall.dm @@ -6,7 +6,6 @@ density = TRUE damage_cap = HEALTH_WALL_REINFORCED - max_temperature = 6000 walltype = WALL_REINFORCED diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm index 05c97a681be9..3e87af54c7e0 100644 --- a/code/game/turfs/walls/wall_types.dm +++ b/code/game/turfs/walls/wall_types.dm @@ -12,8 +12,6 @@ damage = 0 damage_cap = HEALTH_WALL //Wall will break down to girders if damage reaches this point - max_temperature = 18000 //K, walls will take damage if they're next to a fire hotter than this - opacity = TRUE density = TRUE @@ -225,14 +223,12 @@ hull = 0 //Can't be deconstructed damage_cap = HEALTH_WALL - max_temperature = 28000 //K, walls will take damage if they're next to a fire hotter than this walltype = WALL_SULACO //Changes all the sprites and icons. /turf/closed/wall/sulaco/hull name = "outer hull" desc = "A reinforced outer hull, probably to prevent breaches" hull = 1 - max_temperature = 50000 // Nearly impossible to melt walltype = WALL_SULACO @@ -240,7 +236,6 @@ name = "outer hull" desc = "A reinforced outer hull, probably to prevent breaches" hull = 1 - max_temperature = 50000 // Nearly impossible to melt walltype = WALL_SULACO @@ -550,7 +545,6 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) desc = "A thick and chunky metal wall covered in jagged ribs." walltype = WALL_STRATA_OUTPOST_RIBBED damage_cap = HEALTH_WALL_REINFORCED - max_temperature = 28000 /turf/closed/wall/strata_outpost name = "bare outpost walls" @@ -565,7 +559,6 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) desc = "A thick and chunky metal wall covered in jagged ribs." walltype = WALL_STRATA_OUTPOST_RIBBED damage_cap = HEALTH_WALL_REINFORCED - max_temperature = 28000 /turf/closed/wall/strata_outpost/reinforced/hull hull = 1 @@ -586,7 +579,6 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) icon_state = "solaris_interior_r" walltype = WALL_SOLARISR damage_cap = HEALTH_WALL_REINFORCED - max_temperature = 28000 /turf/closed/wall/solaris/reinforced/hull name = "heavy reinforced colony wall" @@ -619,7 +611,6 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) desc = "Just like in the orange box! This one is reinforced" walltype = WALL_DEVWALL_R damage_cap = HEALTH_WALL_REINFORCED - max_temperature = 28000 /turf/closed/wall/dev/reinforced/hull name = "greybox hull wall" @@ -653,7 +644,6 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) desc = "Dusty worn down walls that were once built to last. This one is reinforced" walltype = WALL_KUTJEVO_COLONYR damage_cap = HEALTH_WALL_REINFORCED - max_temperature = 28000 /turf/closed/wall/kutjevo/colony/reinforced/hull icon_state = "colonyh" diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm index bc5eee0c3587..cb58ad2274a4 100644 --- a/code/game/turfs/walls/walls.dm +++ b/code/game/turfs/walls/walls.dm @@ -5,9 +5,11 @@ icon_state = "0" opacity = TRUE layer = WALL_LAYER - var/hull = 0 //1 = Can't be deconstructed by tools or thermite. Used for Sulaco walls + /// 1 = Can't be deconstructed by tools or thermite. Used for Sulaco walls + var/hull = 0 var/walltype = WALL_METAL - var/junctiontype //when walls smooth with one another, the type of junction each wall is. + /// when walls smooth with one another, the type of junction each wall is. + var/junctiontype var/thermite = 0 var/melting = FALSE var/claws_minimum = CLAW_TYPE_SHARP @@ -21,7 +23,8 @@ ) var/damage = 0 - var/damage_cap = HEALTH_WALL //Wall will break down to girders if damage reaches this point + /// Wall will break down to girders if damage reaches this point + var/damage_cap = HEALTH_WALL var/damage_overlay var/global/damage_overlays[8] @@ -30,12 +33,12 @@ var/image/bullet_overlay = null var/list/wall_connections = list("0", "0", "0", "0") var/neighbors_list = 0 - var/max_temperature = 1800 //K, walls will take damage if they're next to a fire hotter than this var/repair_materials = list("wood"= 0.075, "metal" = 0.15, "plasteel" = 0.3) //Max health % recovered on a nailgun repair var/d_state = 0 //Normal walls are now as difficult to remove as reinforced walls - var/obj/effect/acid_hole/acided_hole //the acid hole inside the wall + /// the acid hole inside the wall + var/obj/effect/acid_hole/acided_hole var/acided_hole_dir = SOUTH var/special_icon = 0 diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 9cad56cdabe8..5871fdc7a152 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -42,6 +42,8 @@ var/list/Lines = list() if(admin_holder && ((R_ADMIN & admin_holder.rights) || (R_MOD & admin_holder.rights))) for(var/client/C in GLOB.clients) + if(!CLIENT_HAS_RIGHTS(src, R_STEALTH) && (CLIENT_IS_STEALTHED(C))) + continue var/entry = "[C.key]" if(C.mob) //Juuuust in case if(istype(C.mob, /mob/new_player)) @@ -139,7 +141,7 @@ else for(var/client/C in GLOB.clients) - if(C.admin_holder && C.admin_holder.fakekey) + if((C.admin_holder && C.admin_holder.fakekey) || (CLIENT_IS_STEALTHED(C))) continue Lines += C.key @@ -172,6 +174,8 @@ LAZYSET(listings, category, list()) for(var/client/C in GLOB.admins) + if(CLIENT_IS_STEALTHED(C) && !CLIENT_HAS_RIGHTS(src, R_STEALTH)) + continue if(C.admin_holder?.fakekey && !CLIENT_IS_STAFF(src)) continue for(var/category in mappings) @@ -187,7 +191,9 @@ for(var/srank in entry.admin_holder.extra_titles) dat += " & [srank]" if(CLIENT_IS_STAFF(src)) - if(entry.admin_holder?.fakekey) + if(CLIENT_IS_STEALTHED(entry)) + dat += " (STEALTHED)" + else if(entry.admin_holder?.fakekey) dat += " (HIDDEN)" if(istype(entry.mob, /mob/dead/observer)) dat += " - Observing" diff --git a/code/global.dm b/code/global.dm index 6847fbd2b7fe..f141dc5d68ac 100644 --- a/code/global.dm +++ b/code/global.dm @@ -33,6 +33,7 @@ #define CLIENT_HAS_RIGHTS(cli, flags) ((cli?.admin_holder?.rights & flags) == flags) #define CLIENT_IS_STAFF(cli) (cli?.admin_holder?.rights & (R_MOD|R_ADMIN)) #define CLIENT_IS_MENTOR(cli) CLIENT_HAS_RIGHTS(cli, R_MENTOR) +#define CLIENT_IS_STEALTHED(cli) (CLIENT_HAS_RIGHTS(cli, R_STEALTH) && cli.prefs?.toggles_admin & ADMIN_STEALTHMODE) #define AHOLD_IS_MOD(ahold) (ahold && (ahold.rights & R_MOD)) #define AHOLD_IS_ADMIN(ahold) (ahold && (ahold.rights & R_ADMIN)) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 85996fca1927..4623df8a5dc5 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -250,6 +250,10 @@ GLOBAL_LIST_INIT(admin_verbs_color, list( /client/proc/set_ooc_color_self )) +GLOBAL_LIST_INIT(admin_verbs_stealth, list( + /client/proc/toggle_admin_stealth +)) + GLOBAL_LIST_INIT(admin_mob_event_verbs_hideable, list( /client/proc/hide_event_mob_verbs, /client/proc/cmd_admin_select_mob_rank, @@ -341,6 +345,8 @@ GLOBAL_LIST_INIT(roundstart_mod_verbs, list( add_verb(src, GLOB.admin_verbs_sounds) if(CLIENT_HAS_RIGHTS(src, R_SPAWN)) add_verb(src, GLOB.admin_verbs_spawn) + if(CLIENT_HAS_RIGHTS(src, R_STEALTH)) + add_verb(src, GLOB.admin_verbs_stealth) if(GLOB.RoleAuthority && (GLOB.RoleAuthority.roles_whitelist[ckey] & WHITELIST_YAUTJA_LEADER)) add_verb(src, GLOB.clan_verbs) @@ -370,6 +376,7 @@ GLOBAL_LIST_INIT(roundstart_mod_verbs, list( GLOB.admin_mob_event_verbs_hideable, GLOB.admin_verbs_hideable, GLOB.debug_verbs, + GLOB.admin_verbs_stealth, )) /client/proc/jobbans() @@ -595,6 +602,14 @@ GLOBAL_LIST_INIT(roundstart_mod_verbs, list( else to_chat(usr, SPAN_BOLDNOTICE("You will no longer hear an audio cue for ARES and Prayer messages.")) +/client/proc/toggle_admin_stealth() + set name = "Toggle Admin Stealth" + set category = "Preferences" + prefs.toggles_admin ^= ADMIN_STEALTHMODE + if(prefs.toggles_admin & ADMIN_STEALTHMODE) + to_chat(usr, SPAN_BOLDNOTICE("You enabled admin stealth mode.")) + else + to_chat(usr, SPAN_BOLDNOTICE("You disabled admin stealth mode.")) #undef MAX_WARNS #undef AUTOBANTIME diff --git a/code/modules/admin/player_panel/player_panel.dm b/code/modules/admin/player_panel/player_panel.dm index bc2d390692d8..772e9d4e3f91 100644 --- a/code/modules/admin/player_panel/player_panel.dm +++ b/code/modules/admin/player_panel/player_panel.dm @@ -188,6 +188,8 @@ for(var/mob/M in mobs) if(!M.ckey) continue + if(!CLIENT_HAS_RIGHTS(usr.client, R_STEALTH) && (M.client && (CLIENT_IS_STEALTHED(M.client)))) + continue var/color = i % 2 == 0 ? "#6289b7" : "#48709d" diff --git a/code/modules/admin/view_variables/get_variables.dm b/code/modules/admin/view_variables/get_variables.dm index a2b87b0909d0..9ec449e4c3f6 100644 --- a/code/modules/admin/view_variables/get_variables.dm +++ b/code/modules/admin/view_variables/get_variables.dm @@ -121,12 +121,12 @@ switch(.["class"]) if(VV_TEXT) - .["value"] = tgui_input_text(usr, "Enter new text:", "Text", current_value, encode = FALSE) + .["value"] = tgui_input_text(usr, "Enter new text:", "Text", current_value, encode = FALSE, trim = FALSE) if(.["value"] == null) .["class"] = null return if(VV_MESSAGE) - .["value"] = tgui_input_text(usr, "Enter new text:", "Text", current_value, encode = FALSE) + .["value"] = tgui_input_text(usr, "Enter new text:", "Text", current_value, encode = FALSE, trim = FALSE) if(.["value"] == null) .["class"] = null return diff --git a/code/modules/animations/animation_library.dm b/code/modules/animations/animation_library.dm index d4fd8feeaf24..f153338487cd 100644 --- a/code/modules/animations/animation_library.dm +++ b/code/modules/animations/animation_library.dm @@ -47,22 +47,22 @@ Instead of being uniform, it starts out a littler slower, goes fast in the middl animate(A, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) //Flashes a color, then goes back to regular. -/proc/animation_flash_color(atom/A, flash_color = "#FF0000", speed = 3) //Flashes red on default. +/proc/animation_flash_color(atom/A, flash_color = COLOR_RED, speed = 3) //Flashes red on default. var/oldcolor = A.color animate(A, color = flash_color, time = speed, flags = ANIMATION_PARALLEL) animate(color = oldcolor, time = speed) /* fuck this, only halloween uses this -spookydonut //Gives it a spooky overlay and animation. Same as above, mostly, only adds a cool overlay effect. -/proc/animation_horror_flick(atom/A, flash_color = "#000000", speed = 4) +/proc/animation_horror_flick(atom/A, flash_color = COLOR_BLACK, speed = 4) animate(A, color = flash_color, time = speed) - animate(color = "#FFFFFF", time = speed) + animate(color = COLOR_WHITE, time = speed) var/image/I = image('icons/mob/mob.dmi',A,"spook") I.flick_overlay(A,7) /proc/animation_blood_spatter(atom/A, flash_color = "#8A0707", speed = 4) animate(A, color = flash_color, time = speed) - animate(color = "#FFFFFF", time = speed) + animate(color = COLOR_WHITE, time = speed) var/image/I = image('icons/mob/mob.dmi',A,"blood_spatter") if(prob(50)) I.transform = matrix(rand(0,45), MATRIX_ROTATE) @@ -91,13 +91,13 @@ Instead of being uniform, it starts out a littler slower, goes fast in the middl /proc/animation_teleport_quick_in(atom/A, speed = 10) A.transform = matrix(0, 4, MATRIX_SCALE) A.alpha = 0 //Start with transparency, just in case. - animate(A, alpha = 255, transform = null, color = "#FFFFFF", time = speed, easing = BACK_EASING) + animate(A, alpha = 255, transform = null, color = COLOR_WHITE, time = speed, easing = BACK_EASING) /*A magical teleport animation, for when the person is transported with some magic. Good for Halloween type events. Can look good elsewhere as well.*/ /*proc/animation_teleport_magic_out(atom/A, speed = 6) animate(A, transform = matrix(1.5, 0, MATRIX_SCALE), time = speed, easing = BACK_EASING) - animate(transform = matrix(0, 4, MATRIX_SCALE) * matrix(0, 6, MATRIX_TRANSLATE), color = "#FFFF00", time = speed, alpha = 100, easing = BOUNCE_EASING|EASE_IN) + animate(transform = matrix(0, 4, MATRIX_SCALE) * matrix(0, 6, MATRIX_TRANSLATE), color = COLOR_YELLOW, time = speed, alpha = 100, easing = BOUNCE_EASING|EASE_IN) animate(alpha = 0, time = speed) var/image/I = image('icons/effects/effects.dmi',A,"sparkle") I.flick_overlay(A,9) @@ -106,8 +106,8 @@ Can look good elsewhere as well.*/ /proc/animation_teleport_magic_in(atom/A, speed = 6) A.transform = matrix(0,3.5, MATRIX_SCALE) A.alpha = 0 - animate(A, alpha = 255, color = "#FFFF00", time = speed, easing = BACK_EASING) - animate(transform = matrix(1.5, 0, MATRIX_SCALE), color = "#FFFFFF", time = speed, easing = CIRCULAR_EASING|EASE_OUT) + animate(A, alpha = 255, color = COLOR_YELLOW, time = speed, easing = BACK_EASING) + animate(transform = matrix(1.5, 0, MATRIX_SCALE), color = COLOR_WHITE, time = speed, easing = CIRCULAR_EASING|EASE_OUT) animate(transform = null, time = speed-1) var/image/I = image('icons/effects/effects.dmi',A,"sparkle") I.flick_overlay(A,10) @@ -115,7 +115,7 @@ Can look good elsewhere as well.*/ //A spooky teleport for evil dolls, horrors, and whatever else. Halloween type stuff. /proc/animation_teleport_spooky_out(atom/A, speed = 6, sleep_duration = 0) animate(A, transform = matrix() * 1.5, color = "#551a8b", time = speed, easing = BACK_EASING) - animate(transform = matrix() * 0.2, alpha = 100, color = "#000000", time = speed, easing = BACK_EASING) + animate(transform = matrix() * 0.2, alpha = 100, color = COLOR_BLACK, time = speed, easing = BACK_EASING) animate(alpha = 0, time = speed) var/image/I = image('icons/effects/effects.dmi',A,"spooky") I.flick_overlay(A,9,RESET_COLOR|RESET_ALPHA|TILE_BOUND) @@ -125,7 +125,7 @@ Can look good elsewhere as well.*/ A.transform *= 1.2 A.alpha = 0 animate(A, alpha = 255, color = "#551a8b", time = speed) - animate(transform = null, color = "#FFFFFF", time = speed, easing = QUAD_EASING|EASE_OUT) + animate(transform = null, color = COLOR_WHITE, time = speed, easing = QUAD_EASING|EASE_OUT) var/image/I = image('icons/effects/effects.dmi',A,"spooky") I.flick_overlay(A,10)*/ @@ -135,7 +135,7 @@ Can look good elsewhere as well.*/ A.mouse_opacity = MOUSE_OPACITY_TRANSPARENT //We don't want them to click this while the animation is still playing. A.density = FALSE //So it doesn't block anything. var/i = 1 + (0.1 * rand(1,5)) - animate(A, transform = matrix() * i, color = "#808080", time = speed, easing = SINE_EASING) + animate(A, transform = matrix() * i, color = COLOR_GRAY, time = speed, easing = SINE_EASING) animate(alpha = 0, time = speed) return speed @@ -166,7 +166,7 @@ Can look good elsewhere as well.*/ animate(alpha = 100, matrix(rand(45,90) * pick(1,-1), MATRIX_ROTATE), time = speed) animate(pixel_x = x_o+rand(-x_n, x_n), pixel_y = y_o+rand(-y_n, y_n), time = speed, easing = ELASTIC_EASING|EASE_IN) animate(pixel_x = x_o, pixel_y = y_o, time = speed, easing = CIRCULAR_EASING|EASE_OUT) - animate(alpha = 0, color = "#808080", time = speed) + animate(alpha = 0, color = COLOR_GRAY, time = speed) var/image/I = image('icons/effects/effects.dmi',A,"red_particles") I.flick_overlay(A,25) return speed*9*/ diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index eeab65ec031a..bc20a714027d 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -80,7 +80,7 @@ var/pos_idx = 0 for(var/thing in elements) var/x = pos_idx % switch_width - var/y = FLOOR(pos_idx / switch_width, 1) + var/y = Floor(pos_idx / switch_width) var/atom/movable/screen/buildmode/B = new buttontype(src, thing) // extra .5 for a nice offset look B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]" diff --git a/code/modules/character_traits/biology_traits.dm b/code/modules/character_traits/biology_traits.dm index c90ea7b8751e..efd894fe20cf 100644 --- a/code/modules/character_traits/biology_traits.dm +++ b/code/modules/character_traits/biology_traits.dm @@ -59,13 +59,10 @@ return ADD_TRAIT(target, TRAIT_LISPING, ROUNDSTART_TRAIT) - target.speech_problem_flag = TRUE - ..() /datum/character_trait/biology/lisp/unapply_trait(mob/living/carbon/human/target) REMOVE_TRAIT(target, TRAIT_LISPING, ROUNDSTART_TRAIT) - target.speech_problem_flag = FALSE ..() /datum/character_trait/biology/bad_leg diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index a085cb7634d6..3dfe2d38d81f 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -330,7 +330,6 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( admin_holder = GLOB.admin_datums[ckey] if(admin_holder) admin_holder.associate(src) - notify_login() add_pref_verbs() //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) @@ -343,6 +342,8 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( prefs.last_id = computer_id //these are gonna be used for banning fps = prefs.fps + notify_login() + load_xeno_name() human_name_ban = prefs.human_name_ban @@ -476,7 +477,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( SSping.currentrun -= src log_access("Logout: [key_name(src)]") - if(CLIENT_IS_STAFF(src)) + if(CLIENT_IS_STAFF(src) && !CLIENT_IS_STEALTHED(src)) message_admins("Admin logout: [key_name(src)]") var/list/adm = get_admin_counts(R_MOD) @@ -493,7 +494,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( /// Handles login-related logging and associated notifications /client/proc/notify_login() log_access("Login: [key_name(src)] from [address ? address : "localhost"]-[computer_id] || BYOND v[byond_version].[byond_build]") - if(CLIENT_IS_STAFF(src)) + if(CLIENT_IS_STAFF(src) && !CLIENT_IS_STEALTHED(src)) message_admins("Admin login: [key_name(src)]") var/list/adm = get_admin_counts(R_MOD) diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index a71f7dbcb3e9..1337cadf5228 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -863,6 +863,14 @@ GLOBAL_LIST_EMPTY(gear_datums_by_name) display_name = "Lighter, zippo" path = /obj/item/tool/lighter/zippo +/datum/gear/smoking/zippo/black + display_name = "Black lighter, zippo" + path = /obj/item/tool/lighter/zippo/black + +/datum/gear/smoking/zippo/blue + display_name = "Blue lighter, zippo" + path = /obj/item/tool/lighter/zippo/blue + /datum/gear/smoking/electronic_cigarette display_name = "Electronic cigarette" path = /obj/item/clothing/mask/electronic_cigarette @@ -891,7 +899,7 @@ GLOBAL_LIST_EMPTY(gear_datums_by_name) /datum/gear/misc/facepaint_skull display_name = "Facepaint, skull" path = /obj/item/facepaint/skull - cost = 3 + cost = 3 /datum/gear/misc/facepaint_body display_name = "Fullbody paint" diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index dae7f633f05d..b5345795644e 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -87,6 +87,36 @@ if(istype(A, /datum/action/item_action/toggle)) A.update_button_icon() +/obj/item/clothing/glasses/proc/try_make_offhand_prescription(mob/user) + if(!prescription) + return FALSE + + var/obj/item/clothing/glasses/offhand = user.get_inactive_hand() + if(istype(offhand) && !offhand.prescription) + if(tgui_alert(user, "Do you wish to take out the prescription lenses and put them in [offhand]?", "Insert Prescription Lenses", list("Yes", "No")) == "Yes") + if(QDELETED(src) || offhand != user.get_inactive_hand()) + return FALSE + offhand.prescription = TRUE + offhand.AddElement(/datum/element/poor_eyesight_correction) + offhand.desc += " Fitted with prescription lenses." + user.visible_message(SPAN_DANGER("[user] takes the lenses out of [src] and puts them in [offhand]."), SPAN_NOTICE("You take the lenses out of [src] and put them in [offhand].")) + qdel(src) + return TRUE + + return FALSE + +/obj/item/clothing/glasses/sunglasses/prescription/attack_self(mob/user) + if(try_make_offhand_prescription(user)) + return + + return ..() + +/obj/item/clothing/glasses/regular/attack_self(mob/user) + if(try_make_offhand_prescription(user)) + return + + return ..() + /obj/item/clothing/glasses/equipped(mob/user, slot) if(active && slot == WEAR_EYES) if(!can_use_active_effect(user)) @@ -225,7 +255,7 @@ desc = "The Corps may call them Regulation Prescription Glasses but you know them as Rut Prevention Glasses. These ones actually have a proper prescribed lens." icon_state = "mBCG" item_state = "mBCG" - prescription = 1 + prescription = TRUE flags_equip_slot = SLOT_EYES|SLOT_FACE /obj/item/clothing/glasses/m42_goggles diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index c39e6a620833..18ffacf57b1f 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -52,19 +52,6 @@ siemens_coefficient = 0.9 flags_armor_protection = BODY_FLAG_HEAD|BODY_FLAG_FACE|BODY_FLAG_EYES -/obj/item/clothing/mask/horsehead - name = "horse head mask" - desc = "A mask made of soft vinyl and latex, representing the head of a horse." - icon_state = "horsehead" - item_state = "horsehead" - flags_inventory = COVERMOUTH|COVEREYES - flags_inv_hide = HIDEFACE|HIDEALLHAIR|HIDEEYES|HIDEEARS - flags_armor_protection = BODY_FLAG_HEAD|BODY_FLAG_FACE|BODY_FLAG_EYES - w_class = SIZE_SMALL - var/voicechange = 0 - siemens_coefficient = 0.9 - - /obj/item/clothing/mask/balaclava name = "balaclava" desc = "A basic single eye-hole balaclava, available in almost every sporting goods, outdoor supply, or military surplus store in existance, protects your face from the cold almost as well as it conceals it. This one is in a standard black color." diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index 844655049a69..afefa2903ab4 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -190,7 +190,7 @@ if(. != CHECKS_PASSED) return set_light_range(initial(light_range)) - set_light_power(FLOOR(initial(light_power) * 0.5, 1)) + set_light_power(Floor(initial(light_power) * 0.5)) set_light_on(toggle_on) flags_marine_armor ^= ARMOR_LAMP_ON @@ -1011,7 +1011,7 @@ if(camo_active) if(current_camo < full_camo_alpha) current_camo = full_camo_alpha - current_camo = Clamp(current_camo + incremental_shooting_camo_penalty, full_camo_alpha, 255) + current_camo = clamp(current_camo + incremental_shooting_camo_penalty, full_camo_alpha, 255) H.alpha = current_camo addtimer(CALLBACK(src, PROC_REF(fade_out_finish), H), camouflage_break, TIMER_OVERRIDE|TIMER_UNIQUE) animate(H, alpha = full_camo_alpha + 5, time = camouflage_break, easing = LINEAR_EASING, flags = ANIMATION_END_NOW) diff --git a/code/modules/cm_aliens/structures/fruit.dm b/code/modules/cm_aliens/structures/fruit.dm index a1d3624c7337..00272cf90341 100644 --- a/code/modules/cm_aliens/structures/fruit.dm +++ b/code/modules/cm_aliens/structures/fruit.dm @@ -239,7 +239,7 @@ /obj/effect/alien/resin/fruit/unstable/consume_effect(mob/living/carbon/xenomorph/recipient, do_consume = TRUE) if(mature && recipient && !QDELETED(recipient)) - recipient.add_xeno_shield(Clamp(overshield_amount, 0, recipient.maxHealth * 0.3), XENO_SHIELD_SOURCE_GARDENER, duration = shield_duration, decay_amount_per_second = shield_decay) + recipient.add_xeno_shield(clamp(overshield_amount, 0, recipient.maxHealth * 0.3), XENO_SHIELD_SOURCE_GARDENER, duration = shield_duration, decay_amount_per_second = shield_decay) to_chat(recipient, SPAN_XENONOTICE("We feel our defense being bolstered, and begin to regenerate rapidly.")) // Every seconds, heal him for 5. new /datum/effects/heal_over_time(recipient, regeneration_amount_total, regeneration_ticks, 1) @@ -403,7 +403,8 @@ if(cant_consume) user.affected_message(affected_xeno, SPAN_HELPFUL("You fail to [user == affected_xeno ? "eat" : "feed [affected_xeno]"] [current_fruit]."), - SPAN_HELPFUL("[user] fails to feed you [current_fruit].")) + SPAN_HELPFUL("[user] fails to feed you [current_fruit]."), + SPAN_NOTICE("[user] fails to [user == affected_xeno ? "eat" : "feed [affected_xeno]"] [current_fruit].")) return user.affected_message(affected_xeno, SPAN_HELPFUL("You start [user == affected_xeno ? "eating" : "feeding [affected_xeno]"] [current_fruit]."), @@ -417,7 +418,8 @@ if(cant_consume) //Check again after the timer incase they ate another fruit user.affected_message(affected_xeno, SPAN_HELPFUL("You fail to [user == affected_xeno ? "eat" : "feed [affected_xeno]"] [current_fruit]."), - SPAN_HELPFUL("[user] fails to feed you [current_fruit].")) + SPAN_HELPFUL("[user] fails to feed you [current_fruit]."), + SPAN_NOTICE("[user] fails to [user == affected_xeno ? "eat" : "feed [affected_xeno]"] [current_fruit].")) return user.affected_message(affected_xeno, diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index 13f3e488459e..add9646c56ac 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -159,7 +159,7 @@ xeno_announcement(SPAN_XENOANNOUNCE("We have lost our control of the tall's communication relay at [get_area(src)]."), hivenumber, XENO_GENERAL_ANNOUNCE) else xeno_announcement(SPAN_XENOANNOUNCE("Another hive has lost control of the tall's communication relay at [get_area(src)]."), hivenumber, XENO_GENERAL_ANNOUNCE) - + linked_hive.hive_ui.update_pylon_status() return ..() /// Checks if all comms towers are connected and then starts end game content on all pylons if they are @@ -177,11 +177,9 @@ xeno_announcement(SPAN_XENOANNOUNCE("Another hive has harnessed the tall's communication relay at [get_area(src)].[linked_hive.faction_is_ally(checked_hive.name) ? "" : " Stop them!"]"), hivenumber, XENO_GENERAL_ANNOUNCE) activated = TRUE + linked_hive.check_if_hit_larva_from_pylon_limit() addtimer(CALLBACK(src, PROC_REF(give_larva)), XENO_PYLON_ACTIVATION_COOLDOWN, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_LOOP|TIMER_DELETE_ME) -#define ENDGAME_LARVA_CAP_MULTIPLIER 0.4 -#define LARVA_ADDITION_MULTIPLIER 0.10 - /// Looped proc via timer to give larva after time /obj/effect/alien/resin/special/pylon/endgame/proc/give_larva() if(!activated) @@ -190,24 +188,13 @@ if(!linked_hive.hive_location || !linked_hive.living_xeno_queen) return - var/list/hive_xenos = linked_hive.totalXenos.Copy() - - for(var/mob/living/carbon/xenomorph/xeno in hive_xenos) - if(!xeno.counts_for_slots) - hive_xenos -= xeno - - var/real_total_xeno_count = length(hive_xenos) + linked_hive.stored_larva - - if(real_total_xeno_count > (length(GLOB.alive_human_list) * ENDGAME_LARVA_CAP_MULTIPLIER)) + if(linked_hive.check_if_hit_larva_from_pylon_limit()) return - linked_hive.partial_larva += real_total_xeno_count * LARVA_ADDITION_MULTIPLIER + linked_hive.partial_larva += (linked_hive.get_real_total_xeno_count() + linked_hive.stored_larva) * LARVA_ADDITION_MULTIPLIER linked_hive.convert_partial_larva_to_full_larva() linked_hive.hive_ui.update_burrowed_larva() -#undef ENDGAME_LARVA_CAP_MULTIPLIER -#undef LARVA_ADDITION_MULTIPLIER - //Hive Core - Generates strong weeds, supports other buildings /obj/effect/alien/resin/special/pylon/core name = XENO_STRUCTURE_CORE diff --git a/code/modules/cm_aliens/structures/tunnel.dm b/code/modules/cm_aliens/structures/tunnel.dm index 8e2993704f31..33f50ab06326 100644 --- a/code/modules/cm_aliens/structures/tunnel.dm +++ b/code/modules/cm_aliens/structures/tunnel.dm @@ -48,8 +48,22 @@ if(resin_trap) qdel(resin_trap) + if(hivenumber == XENO_HIVE_NORMAL) + RegisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING, PROC_REF(forsaken_handling)) + SSminimaps.add_marker(src, z, get_minimap_flag_for_faction(hivenumber), "xenotunnel") +/obj/structure/tunnel/proc/forsaken_handling() + SIGNAL_HANDLER + if(is_ground_level(z)) + hive.tunnels -= src + hivenumber = XENO_HIVE_FORSAKEN + set_hive_data(src, XENO_HIVE_FORSAKEN) + hive = GLOB.hive_datum[XENO_HIVE_FORSAKEN] + hive.tunnels += src + + UnregisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING) + /obj/structure/tunnel/Destroy() if(hive) hive.tunnels -= src @@ -130,15 +144,17 @@ if(!istype(X) || X.is_mob_incapacitated(TRUE) || !isfriendly(X) || !hive) return FALSE if(X in contents) - var/list/tunnels = list() - for(var/obj/structure/tunnel/T in hive.tunnels) + var/list/input_tunnels = list() + + var/list/sorted_tunnels = sort_list_dist(hive.tunnels, get_turf(X)) + for(var/obj/structure/tunnel/T in sorted_tunnels) if(T == src) continue if(!is_ground_level(T.z)) continue - tunnels += list(T.tunnel_desc = T) - var/pick = tgui_input_list(usr, "Which tunnel would you like to move to?", "Tunnel", tunnels, theme="hive_status") + input_tunnels += list(T.tunnel_desc = T) + var/pick = tgui_input_list(usr, "Which tunnel would you like to move to?", "Tunnel", input_tunnels, theme="hive_status") if(!pick) return FALSE @@ -159,7 +175,7 @@ if(!do_after(X, tunnel_time, INTERRUPT_NO_NEEDHAND, 0)) return FALSE - var/obj/structure/tunnel/T = tunnels[pick] + var/obj/structure/tunnel/T = input_tunnels[pick] if(T.contents.len > 2)// max 3 xenos in a tunnel to_chat(X, SPAN_WARNING("The tunnel is too crowded, wait for others to exit!")) diff --git a/code/modules/cm_aliens/weeds.dm b/code/modules/cm_aliens/weeds.dm index 45c78b979105..5298e7ab02f1 100644 --- a/code/modules/cm_aliens/weeds.dm +++ b/code/modules/cm_aliens/weeds.dm @@ -58,9 +58,9 @@ if(spread_on_semiweedable && weed_strength < WEED_LEVEL_HIVE) if(color) var/list/RGB = ReadRGB(color) - RGB[1] = Clamp(RGB[1] + 35, 0, 255) - RGB[2] = Clamp(RGB[2] + 35, 0, 255) - RGB[3] = Clamp(RGB[3] + 35, 0, 255) + RGB[1] = clamp(RGB[1] + 35, 0, 255) + RGB[2] = clamp(RGB[2] + 35, 0, 255) + RGB[3] = clamp(RGB[3] + 35, 0, 255) color = rgb(RGB[1], RGB[2], RGB[3]) else color = "#a1a1a1" diff --git a/code/modules/cm_marines/Donator_Items.dm b/code/modules/cm_marines/Donator_Items.dm index 72cfa9724ebd..320ec2844b70 100644 --- a/code/modules/cm_marines/Donator_Items.dm +++ b/code/modules/cm_marines/Donator_Items.dm @@ -421,12 +421,12 @@ item_state = "merc_armor" /obj/item/clothing/suit/storage/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) - name = "M4X Armor" - desc = "Armor to the M4X!!!! DONOR ITEM" + name = "M4-X Armor" + desc = "A next generation body armor system intended for Marines fighting against xenomorphs, the system is coated in a unique acid resistant polymer coating, as well as enhanced ballistics protection. This prototype version lacks those two features. DONOR ITEM" + flags_atom = FPRINT|CONDUCT|NO_NAME_OVERRIDE icon_state = "steelpoint_armor" item_state = "steelpoint_armor" - /obj/item/clothing/suit/storage/marine/fluff/valentine //CKEY=markvalentine name = "Shocky's Armor" desc = "Shockingly good armor. DONOR ITEM" @@ -842,10 +842,11 @@ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR /obj/item/clothing/head/helmet/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) - name = "M4X Helmet" - desc = "Helmets to the M4X!!! DONOR ITEM" + name = "M4-X Helmet" + desc = "A next generation combat helmet intended to be paired with the M4-X armor. The full faced helmet provides complete light ballistic-resistant protection alongside enchanced acid resistance. This prototype version lacks those features. DONOR ITEM" icon_state = "steelpoint_helmet" item_state = "steelpoint_helmet" + flags_atom = FPRINT|CONDUCT|NO_NAME_OVERRIDE flags_inventory = BLOCKSHARPOBJ flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR @@ -1148,8 +1149,8 @@ flags_jumpsuit = FALSE /obj/item/clothing/under/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) - name = "M4X Jumpsuit" - desc = "Jumpsuit to the M4X!!! DONOR ITEM" + name = "M4-X Jumpsuit" + desc = "Jumpsuit issued alongside the M4-X armor. Considered outdated compared to the more modern armor system. DONOR ITEM" icon_state = "steelpoint_jumpsuit" worn_state = "steelpoint_jumpsuit" flags_jumpsuit = FALSE @@ -1319,10 +1320,10 @@ item_state = "doom_boots" /obj/item/clothing/shoes/marine/fluff/steelpoint //CKEY=steelpoint (UNIQUE) - name = "M4X Boot" - desc = "Boots to the M4X. DONOR ITEM" - icon_state = "jackboots" - item_state = "jackboots" + name = "M4-X Boot" + desc = "Standard issue boots issued alongside M4-X armor, features a special coating of acid-resistant layering to allow its operator to move through acid-dretched enviroments safely. This prototype version lacks that feature. DONOR ITEM" + icon_state = "marine" + item_state = "marine" //GENERIC GLASSES, GLOVES, AND MISC //////////////////// diff --git a/code/modules/cm_marines/altitude_control_console.dm b/code/modules/cm_marines/altitude_control_console.dm index a8281806be10..7e0a8c395152 100644 --- a/code/modules/cm_marines/altitude_control_console.dm +++ b/code/modules/cm_marines/altitude_control_console.dm @@ -63,7 +63,7 @@ GLOBAL_VAR_INIT(ship_alt, SHIP_ALT_MED) temperature_change = COOLING if(SHIP_ALT_HIGH) temperature_change = COOLING - GLOB.ship_temp = Clamp(GLOB.ship_temp += temperature_change, 0, 120) + GLOB.ship_temp = clamp(GLOB.ship_temp += temperature_change, 0, 120) if(prob(50)) return if(GLOB.ship_alt == SHIP_ALT_LOW) diff --git a/code/modules/cm_marines/dropship_equipment.dm b/code/modules/cm_marines/dropship_equipment.dm index 59aa1428e23e..785283541eb8 100644 --- a/code/modules/cm_marines/dropship_equipment.dm +++ b/code/modules/cm_marines/dropship_equipment.dm @@ -332,11 +332,11 @@ /obj/structure/dropship_equipment/mg_holder/ui_data(mob/user) . = list() - var/is_deployed = deployed_mg.loc == src + var/is_deployed = deployed_mg.loc != src .["name"] = name .["selection_state"] = list() .["health"] = health - .["health_max"] = 100 + .["health_max"] = initial(health) .["rounds"] = deployed_mg.rounds .["max_rounds"] = deployed_mg.rounds_max .["deployed"] = is_deployed @@ -486,8 +486,6 @@ point_cost = 0 -#define LIGHTING_MAX_LUMINOSITY_SHIPLIGHTS 12 - /obj/structure/dropship_equipment/electronics/spotlights name = "\improper AN/LEN-15 Spotlight" shorthand = "Spotlight" @@ -502,7 +500,7 @@ if(spotlights_cooldown > world.time) to_chat(user, SPAN_WARNING("[src] is busy.")) return //prevents spamming deployment/undeployment - if(luminosity != brightness) + if(!light_on) set_light(brightness) icon_state = "spotlights_on" to_chat(user, SPAN_NOTICE("You turn on [src].")) @@ -515,13 +513,13 @@ /obj/structure/dropship_equipment/electronics/spotlights/update_equipment() ..() if(ship_base) - if(luminosity != brightness) + if(!light_on) icon_state = "spotlights_off" else icon_state = "spotlights_on" else icon_state = "spotlights" - if(luminosity) + if(light_on) set_light(0) /obj/structure/dropship_equipment/electronics/spotlights/on_launch() @@ -530,7 +528,13 @@ /obj/structure/dropship_equipment/electronics/spotlights/on_arrival() set_light(brightness) -#undef LIGHTING_MAX_LUMINOSITY_SHIPLIGHTS +/obj/structure/dropship_equipment/electronics/spotlights/ui_data(mob/user) + . = list() + var/is_deployed = light_on + .["name"] = name + .["health"] = health + .["health_max"] = initial(health) + .["deployed"] = is_deployed @@ -887,7 +891,8 @@ if (evaccee_triagecard_color && evaccee_triagecard_color == "none") evaccee_triagecard_color = null - .["[evaccee_name] [evaccee_triagecard_color ? "\[" + uppertext(evaccee_triagecard_color) + "\]" : ""] ([AR.name])"] = MS + var/key_name = strip_improper("[evaccee_name] [evaccee_triagecard_color ? "\[" + uppertext(evaccee_triagecard_color) + "\]" : ""] ([AR.name])") + .[key_name] = MS /obj/structure/dropship_equipment/medevac_system/proc/can_medevac(mob/user) if(!linked_shuttle) @@ -907,7 +912,7 @@ var/list/possible_stretchers = get_targets() - if(!possible_stretchers.len) + if(!length(possible_stretchers)) to_chat(user, SPAN_WARNING("No active medevac stretcher detected.")) return FALSE return TRUE diff --git a/code/modules/cm_marines/equipment/weapons.dm b/code/modules/cm_marines/equipment/weapons.dm index 858b9dbeb79d..50ad5dcaf385 100644 --- a/code/modules/cm_marines/equipment/weapons.dm +++ b/code/modules/cm_marines/equipment/weapons.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/items/storage.dmi' icon_state = "kit_case" w_class = SIZE_HUGE - storage_slots = 4 + storage_slots = 7 slowdown = 1 can_hold = list() //Nada. Once you take the stuff out it doesn't fit back in. foldable = null @@ -16,6 +16,8 @@ new /obj/item/weapon/gun/smartgun(src) new /obj/item/smartgun_battery(src) new /obj/item/clothing/suit/storage/marine/smartgunner(src) + for(var/i in 1 to 3) + new /obj/item/ammo_magazine/smartgun(src) update_icon() /obj/item/storage/box/m56_system/update_icon() diff --git a/code/modules/cm_marines/m2c.dm b/code/modules/cm_marines/m2c.dm index f61c9ef89659..4001e72b02f3 100644 --- a/code/modules/cm_marines/m2c.dm +++ b/code/modules/cm_marines/m2c.dm @@ -137,15 +137,15 @@ M.anchored = TRUE playsound(M, 'sound/items/m56dauto_setup.ogg', 75, TRUE) to_chat(user, SPAN_NOTICE("You deploy [M].")) - if((rounds > 0) && !user.get_inactive_hand()) - user.set_interaction(M) - give_action(user, /datum/action/human_action/mg_exit) M.rounds = rounds M.overheat_value = overheat_value M.health = health M.update_icon() qdel(src) + if(M.rounds > 0) + M.try_mount_gun(user) + /obj/item/device/m2c_gun/attackby(obj/item/O as obj, mob/user as mob) if(!ishuman(user)) return @@ -446,39 +446,20 @@ //ATTACK WITH BOTH HANDS COMBO /obj/structure/machinery/m56d_hmg/auto/attack_hand(mob/living/user) - ..() + if(..()) + return TRUE - var/turf/user_turf = get_turf(user) - for(var/opp_dir in reverse_nearby_direction(src.dir)) - if(get_step(src, opp_dir) == user_turf) - if(operator) //If there is already a operator then they're manning it. - if(operator.interactee == null) - operator = null //this shouldn't happen, but just in case - else - to_chat(user, "Someone's already controlling it.") - return - if(!(user.alpha > 60)) - to_chat(user, SPAN_WARNING("You aren't going to be setting up while cloaked.")) - return - else - if(user.interactee) //Make sure we're not manning two guns at once, tentacle arms. - to_chat(user, "You're already manning something!") - return - - if(user.get_active_hand() == null && user.get_inactive_hand() == null) - ADD_TRAIT(user, TRAIT_IMMOBILIZED, INTERACTION_TRAIT) - user.set_interaction(src) - give_action(user, /datum/action/human_action/mg_exit) - else - to_chat(usr, SPAN_NOTICE("Your hands are too busy holding things to grab the handles!")) - else - to_chat(usr, SPAN_NOTICE("You are too far from the handles to man [src]!")) + try_mount_gun(user) // DISASSEMBLY /obj/structure/machinery/m56d_hmg/auto/MouseDrop(over_object, src_location, over_location) - if(!ishuman(usr)) return + if(!ishuman(usr)) + return var/mob/living/carbon/human/user = usr + // If the user is unconscious or dead. + if(user.stat) + return if(over_object == user && in_range(src, user)) if((rounds > 0) && (user.a_intent & (INTENT_GRAB))) @@ -515,7 +496,6 @@ ..() ADD_TRAIT(user, TRAIT_OVERRIDE_CLICKDRAG, TRAIT_SOURCE_WEAPON) RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(disable_interaction)) - RegisterSignal(user, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(body_position_changed)) // DISMOUNT THE MG @@ -601,12 +581,6 @@ if(user.body_position != STANDING_UP || get_dist(user,src) > 0 || user.is_mob_incapacitated() || !user.client) user.unset_interaction() -/obj/structure/machinery/m56d_hmg/auto/proc/body_position_changed(mob/living/user, body_position, old_body_position) - SIGNAL_HANDLER - - if(body_position != STANDING_UP) - user.unset_interaction() - /obj/structure/machinery/m56d_hmg/auto/proc/handle_rotating_gun(mob/user) var/angle = get_dir(src, target) if(world.time > rotate_timer && !((dir & angle) && target.loc != src.loc && target.loc != operator.loc)) diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm index b003237f68ee..23bce06fdc1a 100644 --- a/code/modules/cm_marines/orbital_cannon.dm +++ b/code/modules/cm_marines/orbital_cannon.dm @@ -224,8 +224,8 @@ GLOBAL_LIST_EMPTY(orbital_cannon_cancellation) var/area/area = get_area(T) var/off_x = (inaccurate_fuel + 1) * round(rand(-3,3), 1) var/off_y = (inaccurate_fuel + 1) * round(rand(-3,3), 1) - var/target_x = Clamp(T.x + off_x, 1, world.maxx) - var/target_y = Clamp(T.y + off_y, 1, world.maxy) + var/target_x = clamp(T.x + off_x, 1, world.maxx) + var/target_y = clamp(T.y + off_y, 1, world.maxy) var/turf/target = locate(target_x, target_y, T.z) var/area/target_area = get_area(target) diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index 270fee4ab61e..e68ef467faa9 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -316,10 +316,12 @@ has_supply_pad = TRUE data["can_launch_crates"] = has_supply_pad data["has_crate_loaded"] = supply_crate - data["supply_cooldown"] = COOLDOWN_TIMELEFT(current_squad, next_supplydrop) - data["ob_cooldown"] = COOLDOWN_TIMELEFT(GLOB.almayer_orbital_cannon, ob_firing_cooldown) - data["ob_loaded"] = GLOB.almayer_orbital_cannon.chambered_tray + data["can_launch_obs"] = GLOB.almayer_orbital_cannon + if(GLOB.almayer_orbital_cannon) + data["ob_cooldown"] = COOLDOWN_TIMELEFT(GLOB.almayer_orbital_cannon, ob_firing_cooldown) + data["ob_loaded"] = GLOB.almayer_orbital_cannon.chambered_tray + data["supply_cooldown"] = COOLDOWN_TIMELEFT(current_squad, next_supplydrop) data["operator"] = operator.name return data diff --git a/code/modules/cm_marines/shuttle_backend.dm b/code/modules/cm_marines/shuttle_backend.dm index 142caa81eb8a..6974e078e2de 100644 --- a/code/modules/cm_marines/shuttle_backend.dm +++ b/code/modules/cm_marines/shuttle_backend.dm @@ -123,8 +123,8 @@ DOCUMENTATION ON HOW TO ADD A NEW SHUTTLE: Fourkhan, 6/7/19 y = C.y_pos C1.x_pos = x*cos(deg) + y*sin(deg) C1.y_pos = y*cos(deg) - x*sin(deg) - C1.x_pos = roundNearest(C.x_pos) //Sometimes you get very close to the right number but off by around 1e-15 and I want integers dammit - C1.y_pos = roundNearest(C.y_pos) + C1.x_pos = round(C.x_pos, 1) //Sometimes you get very close to the right number but off by around 1e-15 and I want integers dammit + C1.y_pos = round(C.y_pos, 1) toReturn += i toReturn[i] = C1 diff --git a/code/modules/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm index ecb592f5f30b..dbfdf03e0b76 100644 --- a/code/modules/cm_marines/smartgun_mount.dm +++ b/code/modules/cm_marines/smartgun_mount.dm @@ -45,7 +45,7 @@ ///How many rounds are in the weapon. This is useful if we break down our guns. var/rounds = 0 ///Indicates whether the M56D will come with its folding mount already attached - var/has_mount = FALSE + var/has_mount = FALSE ///The distance this has to be away from other m56d_hmg and m56d_post to be placed. var/defense_check_range = 5 @@ -476,7 +476,6 @@ /// What firemodes this gun has var/static/list/gun_firemodes = list( GUN_FIREMODE_SEMIAUTO, - GUN_FIREMODE_BURSTFIRE, GUN_FIREMODE_AUTOMATIC, ) /// A multiplier for how slow this gun should fire in automatic as opposed to burst. 1 is normal, 1.2 is 20% slower, 0.8 is 20% faster, etc. @@ -812,84 +811,117 @@ I.flick_overlay(src, 3) /obj/structure/machinery/m56d_hmg/MouseDrop(over_object, src_location, over_location) //Drag the MG to us to man it. - if(!ishuman(usr) || usr.stat) + // If the gun sprite wasn't dragged onto the user, or the user isn't adjacent. + if(over_object != usr || !in_range(src, usr)) return - var/mob/living/carbon/human/user = usr //this is us + // If the user is already manning the gun. + if(operator == usr) + // Exit the gun. + usr.unset_interaction() + else + // Try to man the gun + try_mount_gun(usr) - var/user_turf = get_turf(user) - - for(var/opp_dir in reverse_nearby_direction(src.dir)) - if(get_step(src, opp_dir) == user_turf) //Players must be behind, or left or right of that back tile - src.add_fingerprint(usr) - if((over_object == user && (in_range(src, user) || locate(src) in user))) //Make sure its on ourselves - if(user.interactee == src) - user.unset_interaction() - user.visible_message("[icon2html(src, viewers(src))] [SPAN_NOTICE("[user] lets go of \the [src].")]", SPAN_NOTICE("You let go of \the [src].")) - return - if(operator) //If there is already a operator then they're manning it. - if(operator.interactee == null) - operator = null //this shouldn't happen, but just in case - else - to_chat(user, "Someone's already controlling it.") - return - else - if(user.interactee) //Make sure we're not manning two guns at once, tentacle arms. - to_chat(user, "You're already manning something!") - return - if(user.get_active_hand() != null) - to_chat(user, SPAN_WARNING("You need a free hand to man \the [src].")) - - if(!user.allow_gun_usage) - to_chat(user, SPAN_WARNING("You aren't allowed to use firearms!")) - return - else - ADD_TRAIT(user, TRAIT_IMMOBILIZED, INTERACTION_TRAIT) - user.set_interaction(src) - give_action(user, /datum/action/human_action/mg_exit) +/obj/structure/machinery/m56d_hmg/proc/try_mount_gun(mob/living/carbon/human/user) + // If the user isn't a human. + if(!istype(user)) + return + // If the user is unconscious or dead. + if(user.stat) + return + + // If the user isn't actually allowed to use guns. + if(!user.allow_gun_usage) + to_chat(user, SPAN_WARNING("You aren't allowed to use firearms!")) + return + + // If the user is invisible. + if(user.alpha <= 60) + to_chat(user, SPAN_WARNING("You can't use [src] while cloaked!")) + return + + // Make sure we're not manning two guns at once, tentacle arms. + if(user.interactee) + to_chat(user, SPAN_WARNING("You're already manning something!")) + return + + // Check the directions opposite of where the gun is facing. + var/found_user = FALSE + var/turf/user_turf = get_turf(user) + for(var/opposite_dir in reverse_nearby_direction(src.dir)) + if(get_step(src, opposite_dir) == user_turf) + found_user = TRUE + break + // If the user isn't standing behind or on top of the gun. + if(!found_user && user_turf != get_turf(src)) + to_chat(user, SPAN_WARNING("You are too far from the handles to man [src]!")) + return + // If there's already someone manning it. + if(operator) + // This shouldn't happen, but just in case. + if(operator.interactee == null) + operator = null else - to_chat(usr, SPAN_NOTICE("You are too far from the handles to man [src]!")) + to_chat(user, SPAN_WARNING("Someone's already controlling [src]!")) + return + + // If both hands aren't empty. + if(user.get_active_hand() || user.get_inactive_hand()) + to_chat(user, SPAN_WARNING("You need both hands free to grab the handles!")) + return + + // Man the gun! + user.set_interaction(src) /obj/structure/machinery/m56d_hmg/on_set_interaction(mob/user) - RegisterSignal(user, list(COMSIG_MOB_MG_EXIT, COMSIG_MOB_RESISTED, COMSIG_MOB_DEATH, COMSIG_LIVING_SET_BODY_POSITION), PROC_REF(exit_interaction)) - flags_atom |= RELAY_CLICK - user.status_flags |= IMMOBILE_ACTION - user.visible_message(SPAN_NOTICE("[user] mans \the [src]."),SPAN_NOTICE("You man \the [src], locked and loaded!")) - RegisterSignal(user, COMSIG_MOB_MOUSEDOWN, PROC_REF(start_fire)) - RegisterSignal(user, COMSIG_MOB_MOUSEDRAG, PROC_REF(change_target)) - RegisterSignal(user, COMSIG_MOB_MOUSEUP, PROC_REF(stop_fire)) + ADD_TRAIT(user, TRAIT_IMMOBILIZED, INTERACTION_TRAIT) + give_action(user, /datum/action/human_action/mg_exit) user.forceMove(src.loc) user.setDir(dir) + user.reset_view(src) + user.status_flags |= IMMOBILE_ACTION + user.visible_message(SPAN_NOTICE("[user] mans [src]."), SPAN_NOTICE("You man [src], locked and loaded!")) user_old_x = user.pixel_x user_old_y = user.pixel_y - user.reset_view(src) update_pixels(user) + + RegisterSignal(user, list(COMSIG_MOB_MG_EXIT, COMSIG_MOB_RESISTED, COMSIG_MOB_DEATH, COMSIG_LIVING_SET_BODY_POSITION), PROC_REF(exit_interaction)) + RegisterSignal(user, COMSIG_MOB_MOUSEDOWN, PROC_REF(start_fire)) + RegisterSignal(user, COMSIG_MOB_MOUSEDRAG, PROC_REF(change_target)) + RegisterSignal(user, COMSIG_MOB_MOUSEUP, PROC_REF(stop_fire)) + operator = user + flags_atom |= RELAY_CLICK -/obj/structure/machinery/m56d_hmg/on_unset_interaction(mob/living/user) - flags_atom &= ~RELAY_CLICK - SEND_SIGNAL(src, COMSIG_GUN_INTERRUPT_FIRE) - user.status_flags &= ~IMMOBILE_ACTION - user.visible_message(SPAN_NOTICE("[user] lets go of \the [src]."),SPAN_NOTICE("You let go of \the [src], letting the gun rest.")) +/obj/structure/machinery/m56d_hmg/on_unset_interaction(mob/user) REMOVE_TRAIT(user, TRAIT_IMMOBILIZED, INTERACTION_TRAIT) - UnregisterSignal(user, list(COMSIG_MOB_MOUSEUP, COMSIG_MOB_MOUSEDOWN, COMSIG_MOB_MOUSEDRAG)) - user.reset_view(null) - user.remove_temp_pass_flags(PASS_MOB_THRU) // this is necessary because being knocked over while using the gun makes you incorporeal + remove_action(user, /datum/action/human_action/mg_exit) user.Move(get_step(src, reverse_direction(src.dir))) user.setDir(dir) //set the direction of the player to the direction the gun is facing + user.reset_view(null) + user.status_flags &= ~IMMOBILE_ACTION + user.visible_message(SPAN_NOTICE("[user] lets go of [src]."), SPAN_NOTICE("You let go of [src], letting the gun rest.")) user_old_x = 0 //reset our x user_old_y = 0 //reset our y update_pixels(user, FALSE) - if(operator == user) //We have no operator now - operator = null - remove_action(user, /datum/action/human_action/mg_exit) + user.remove_temp_pass_flags(PASS_MOB_THRU) // this is necessary because being knocked over while using the gun makes you incorporeal + + SEND_SIGNAL(src, COMSIG_GUN_INTERRUPT_FIRE) UnregisterSignal(user, list( COMSIG_MOB_MG_EXIT, COMSIG_MOB_RESISTED, COMSIG_MOB_DEATH, COMSIG_LIVING_SET_BODY_POSITION, + COMSIG_MOB_MOUSEUP, + COMSIG_MOB_MOUSEDOWN, + COMSIG_MOB_MOUSEDRAG, )) + if(operator == user) //We have no operator now + operator = null + flags_atom &= ~RELAY_CLICK + /obj/structure/machinery/m56d_hmg/proc/update_pixels(mob/user, mounting = TRUE) if(mounting) diff --git a/code/modules/cm_preds/falcon.dm b/code/modules/cm_preds/falcon.dm index dc898a2b76ba..eb97a19c2233 100644 --- a/code/modules/cm_preds/falcon.dm +++ b/code/modules/cm_preds/falcon.dm @@ -35,40 +35,57 @@ return "on [t_his] shoulder" return ..() +/obj/item/falcon_drone/equipped(mob/user, slot, silent) + . = ..() + if(!(slot == WEAR_L_EAR || slot == WEAR_R_EAR)) + return + add_verb(user, /obj/item/falcon_drone/proc/can_control_falcon_drone) + var/datum/action/predator_action/mask/control_falcon_drone/falcon_action = give_action(user, /datum/action/predator_action/mask/control_falcon_drone) + falcon_action.linked_falcon_drone = src + +/obj/item/falcon_drone/dropped(mob/user) + . = ..() + remove_verb(user, /obj/item/falcon_drone/proc/can_control_falcon_drone) + remove_action(user, /datum/action/predator_action/mask/control_falcon_drone) + /obj/item/falcon_drone/attack_self(mob/user) ..() - control_falcon_drone() + can_control_falcon_drone() -/obj/item/falcon_drone/verb/control_falcon_drone() +/obj/item/falcon_drone/proc/can_control_falcon_drone() set name = "Control Falcon Drone" set desc = "Activates your falcon drone." set category = "Yautja.Misc" - set src in usr if(usr.is_mob_incapacitated()) return - var/mob/living/carbon/human/H = usr - if(!istype(H) || !HAS_TRAIT(usr, TRAIT_YAUTJA_TECH)) + var/mob/living/carbon/human/human = usr + if(!istype(human) || !HAS_TRAIT(usr, TRAIT_YAUTJA_TECH)) to_chat(usr, SPAN_WARNING("You do not know how to use this.")) return - if(!istype(H.gloves, /obj/item/clothing/gloves/yautja)) + if(!istype(human.gloves, /obj/item/clothing/gloves/yautja)) to_chat(usr, SPAN_WARNING("You need your bracers to control \the [src]!")) return + control_falcon_drone(human, human.gloves) - var/mob/hologram/falcon/hologram = new /mob/hologram/falcon(usr.loc, usr, src, H.gloves) - usr.drop_inv_item_to_loc(src, hologram) +/obj/item/falcon_drone/proc/control_falcon_drone(mob/living/user, obj/item/clothing/gloves/yautja/bracers) + var/mob/hologram/falcon/hologram = new /mob/hologram/falcon(get_turf(user), user, src, bracers) + user.drop_inv_item_to_loc(src, hologram) /mob/hologram/falcon name = "falcon drone" + desc = "An agile drone used by Yautja to survey the hunting grounds." icon = 'icons/obj/items/hunter/pred_gear.dmi' + action_icon_state = "falcon_drone" icon_state = "falcon_drone_active" hud_possible = list(HUNTER_HUD) + motion_sensed = TRUE + initial_leave_button = /datum/action/leave_hologram/falcon + var/obj/item/falcon_drone/parent_drone var/obj/item/clothing/gloves/yautja/owned_bracers - desc = "An agile drone used by Yautja to survey the hunting grounds." - motion_sensed = TRUE /mob/hologram/falcon/Initialize(mapload, mob/M, obj/item/falcon_drone/drone, obj/item/clothing/gloves/yautja/bracers) . = ..() @@ -129,6 +146,11 @@ qdel(src) +/datum/action/leave_hologram/falcon + icon_file = 'icons/mob/hud/actions_yautja.dmi' + button_icon_state = "pred_template" + action_icon_state = "falcon_drone" + /obj/item/trash/falcon_drone name = "destroyed falcon drone" desc = "The wreckage of a Yautja drone." diff --git a/code/modules/cm_preds/yaut_actions.dm b/code/modules/cm_preds/yaut_actions.dm new file mode 100644 index 000000000000..f55f58e0a557 --- /dev/null +++ b/code/modules/cm_preds/yaut_actions.dm @@ -0,0 +1,329 @@ +#define PREDATOR_ACTION_ON_CLICK 2 //If the action is on click, and not toggled on or off +/datum/action/predator_action + icon_file = 'icons/mob/hud/actions_yautja.dmi' + button_icon_state = "pred_template" + ///If the action requires bracers worn or in-hand + var/require_bracers = FALSE + ///If the action requires a yautja mask to be worn + var/require_mask = FALSE + ///The mob calling the action + var/mob/living/carbon/human/yautja + ///The bracers on the mob (if applicable) + var/obj/item/clothing/gloves/yautja/hunter/bracers + ///The mask on the mob (if applicable) + var/obj/item/clothing/mask/gas/yautja/mask + ///If the action is currently on or in use + var/active = FALSE + +/datum/action/predator_action/can_use_action() + . = ..() + if(!.) + return FALSE + + yautja = null + bracers = null + mask = null + + var/mob/living/carbon/human/mob = owner + if(!isyautja(mob)) + return FALSE + if(mob.is_mob_incapacitated()) + return FALSE + yautja = mob + + if(require_bracers) + if(istype(yautja.gloves, /obj/item/clothing/gloves/yautja/hunter)) + bracers = yautja.gloves + else if(istype(yautja.get_held_item(), /obj/item/clothing/gloves/yautja/hunter)) + bracers = yautja.get_held_item() + if(!bracers) + to_chat(yautja, SPAN_WARNING("You don't have bracers.")) + return FALSE + + if(require_mask) + if(!istype(yautja.wear_mask, /obj/item/clothing/mask/gas/yautja)) + to_chat(yautja, SPAN_WARNING("You don't have a clan mask.")) + return FALSE + mask = yautja.wear_mask + + return TRUE + +/datum/action/predator_action/action_activate() + if(!can_use_action()) + return FALSE + +/datum/action/predator_action/update_button_icon(enabled) + . = ..() + if(active == PREDATOR_ACTION_ON_CLICK) + return + + if(isnull(enabled)) + active = !active + else + active = enabled + + button.icon_state = initial(button_icon_state) + if(active) + button.icon_state += "_on" + +/datum/action/predator_action/mark_for_hunt + name = "Mark for Hunt" + action_icon_state = "mark_for_hunt" + listen_signal = COMSIG_KB_YAUTJA_TOGGLE_MARK_FOR_HUNT + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/mark_for_hunt/action_activate() + . = ..() + if(yautja.hunter_data.prey) //You can only hunt one person at a time + yautja.remove_from_hunt() + return + yautja.mark_for_hunt() + +/datum/action/predator_action/mark_panel + name = "Open Mark Panel" + action_icon_state = "mark_panel" + listen_signal = COMSIG_KB_YAUTJA_MARK_PANEL + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/mark_panel/action_activate() + . = ..() + yautja.mark_panel() + +/datum/action/predator_action/claim_equipment + name = "Claim Equipment" + action_icon_state = "claim_equipment" + listen_signal = COMSIG_KB_YAUTJA_PRED_BUY + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/claim_equipment/action_activate() + . = ..() + yautja.pred_buy() + +//Actions that require wearing a mask +/datum/action/predator_action/mask + require_mask = TRUE + +/datum/action/predator_action/mask/zoom + name = "Toggle Mask Zoom" + action_icon_state = "zoom" + listen_signal = COMSIG_KB_YAUTJA_MASK_TOGGLE_ZOOM + +/datum/action/predator_action/mask/zoom/action_activate() + . = ..() + mask.toggle_zoom() + +/datum/action/predator_action/mask/visor + name = "Toggle Mask Visor" + action_icon_state = "visor" + require_bracers = TRUE //Needs bracer power to operate + listen_signal = COMSIG_KB_YAUTJA_MASK_TOGGLESIGHT + +/datum/action/predator_action/mask/visor/action_activate() + . = ..() + mask.togglesight() + +/datum/action/predator_action/mask/visor/update_button_icon(enabled) //Open or close the eye + . = ..() //Overlays + + var/new_icon_state = action_icon_state + if(enabled) + new_icon_state += "_on" + + button.overlays.Cut() + var/image/new_overlays + new_overlays = image(icon_file, button, new_icon_state) + + button.overlays += new_overlays + +/datum/action/predator_action/mask/control_falcon_drone + name = "Control Falcon Drone" + action_icon_state = "falcon_drone" + listen_signal = COMSIG_KB_YAUTJA_CONTROL_FALCON + active = PREDATOR_ACTION_ON_CLICK + require_bracers = TRUE + ///The falcon drone that will be sent when the action is pressed + var/obj/item/falcon_drone/linked_falcon_drone + +/datum/action/predator_action/mask/control_falcon_drone/action_activate() + . = ..() + linked_falcon_drone.control_falcon_drone(yautja, bracers) + + +//Actions that require wearing bracers +/datum/action/predator_action/bracer + require_bracers = TRUE + +/datum/action/predator_action/bracer/wristblade + name = "Toggle Wristblades" + action_icon_state = "wristblade" + listen_signal = COMSIG_KB_YAUTJA_WRISTBLADES + +/datum/action/predator_action/bracer/wristblade/action_activate() + . = ..() + bracers.wristblades() + +/datum/action/predator_action/bracer/combistick + name = "Yank Combi-stick" + action_icon_state = "combi" + listen_signal = COMSIG_KB_YAUTJA_CALL_COMBI + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/bracer/combistick/action_activate() + . = ..() + yautja.call_combi_internal(yautja, forced = FALSE) + +/datum/action/predator_action/bracer/smartdisc + name = "Recall nearby smart-discs" + action_icon_state = "smartdisc" + listen_signal = COMSIG_KB_YAUTJA_CALL_DISC + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/bracer/smartdisc/action_activate() + . = ..() + bracers.call_disc() + +/datum/action/predator_action/bracer/caster + name = "Toggle Plasma Caster" + action_icon_state = "plasma_caster" + listen_signal = COMSIG_KB_YAUTJA_CASTER + +/datum/action/predator_action/bracer/caster/action_activate() + . = ..() + bracers.caster() + +/datum/action/predator_action/bracer/cloak + name = "Toggle Cloak" + action_icon_state = "cloak" + listen_signal = COMSIG_KB_YAUTJA_CLOAKER + +/datum/action/predator_action/bracer/cloak/action_activate() + . = ..() + bracers.cloaker() + +/datum/action/predator_action/bracer/thwei + name = "Create Stabilizing Crystal" + action_icon_state = "thwei" + listen_signal = COMSIG_KB_YAUTJA_INJECTORS + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/bracer/thwei/action_activate() + . = ..() + bracers.injectors() + +/datum/action/predator_action/bracer/capsule + name = "Create Healing Capsule" + action_icon_state = "thwei" + listen_signal = COMSIG_KB_YAUTJA_CAPSULE + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/bracer/capsule/action_activate() + . = ..() + bracers.healing_capsule() + +/datum/action/predator_action/bracer/translator + name = "Use Translator" + action_icon_state = "translator" + listen_signal = COMSIG_KB_YAUTJA_TRANSLATE + active = PREDATOR_ACTION_ON_CLICK + +/datum/action/predator_action/bracer/translator/action_activate() + . = ..() + bracers.translate() + +/datum/action/predator_action/bracer/self_destruct + name = "Self Destruct" + action_icon_state = "self_destruct" + listen_signal = COMSIG_KB_YAUTJA_ACTIVATE_SUICIDE + +/datum/action/predator_action/bracer/self_destruct/action_activate() + . = ..() + bracers.activate_suicide() + +#undef PREDATOR_ACTION_ON_CLICK + +//Misc actions +/datum/action/yautja_emote_panel + name = "Open Emote Panel" + button_icon_state = "pred_template" + action_icon_state = "looc_toggle" + +/datum/action/yautja_emote_panel/action_activate() + var/mob/living/carbon/human/human_owner = owner + var/datum/species/yautja/yautja_species = human_owner.species + yautja_species.open_emote_panel() + +/datum/yautja_emote_panel + /// Static dict ("category" : (emotes)) of every yautja emote typepath + var/static/list/yautja_emotes + /// Static list of categories + var/static/list/yautja_categories = list() + /// Panel allows you to spam, so a manual CD is added here + COOLDOWN_DECLARE(panel_emote_cooldown) + +/datum/yautja_emote_panel/New() + if(length(yautja_emotes)) + return + var/list/emotes_to_add = list() + for(var/datum/emote/living/carbon/human/yautja/emote as anything in subtypesof(/datum/emote/living/carbon/human/yautja)) + if(!initial(emote.key) || initial(emote.no_panel)) + continue + + if(!(initial(emote.category) in yautja_categories)) + yautja_categories += initial(emote.category) + emotes_to_add += emote + yautja_emotes = emotes_to_add + +/datum/yautja_emote_panel/proc/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "YautjaEmotes") + ui.open() + +/datum/yautja_emote_panel/ui_data(mob/user) + var/list/data = list() + + data["on_cooldown"] = !COOLDOWN_FINISHED(src, panel_emote_cooldown) + + return data + +/datum/yautja_emote_panel/ui_state(mob/user) + return GLOB.conscious_state + +/datum/yautja_emote_panel/ui_static_data(mob/user) + var/list/data = list() + + data["categories"] = yautja_categories + data["emotes"] = list() + + for(var/datum/emote/living/carbon/human/yautja/emote as anything in yautja_emotes) + data["emotes"] += list(list( + "id" = initial(emote.key), + "text" = (initial(emote.override_say) || initial(emote.say_message) || initial(emote.key)), + "category" = initial(emote.category), + "path" = "[emote]", + )) + + return data + +/datum/yautja_emote_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("emote") + var/datum/emote/living/carbon/human/yautja/path + if(!params["emotePath"]) + return FALSE + + path = text2path(params["emotePath"]) + + if(!path || !COOLDOWN_FINISHED(src, panel_emote_cooldown)) + return + + if(!(path in subtypesof(/datum/emote/living/carbon/human/yautja))) + return FALSE + + COOLDOWN_START(src, panel_emote_cooldown, 2.5 SECONDS) + ui.user.emote(initial(path.key)) + return TRUE diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index b575021685fe..1cf8310a607e 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -260,8 +260,6 @@ cloak_alpha = 10 var/exploding = 0 - var/inject_timer = 0 - var/healing_capsule_timer = 0 var/disc_timer = 0 var/explosion_type = 1 //0 is BIG explosion, 1 ONLY gibs the user. var/name_active = TRUE @@ -278,6 +276,9 @@ var/obj/item/weapon/wristblades/left_wristblades var/obj/item/weapon/wristblades/right_wristblades + ///A list of all intrinsic bracer actions + var/list/bracer_actions = list(/datum/action/predator_action/bracer/wristblade, /datum/action/predator_action/bracer/caster, /datum/action/predator_action/bracer/cloak, /datum/action/predator_action/bracer/thwei, /datum/action/predator_action/bracer/capsule, /datum/action/predator_action/bracer/translator, /datum/action/predator_action/bracer/self_destruct, /datum/action/predator_action/bracer/smartdisc) + /obj/item/clothing/gloves/yautja/hunter/Initialize(mapload, new_translator_type, new_caster_material, new_owner_rank) . = ..() if(new_owner_rank) @@ -312,6 +313,10 @@ if(embedded_id.registered_name) embedded_id.set_user_data(user) + for(var/datum/action/action as anything in bracer_actions) + give_action(user, action) + + //Any projectile can decloak a predator. It does defeat one free bullet though. /obj/item/clothing/gloves/yautja/hunter/proc/bullet_hit(mob/living/carbon/human/H, obj/projectile/P) SIGNAL_HANDLER @@ -351,6 +356,10 @@ move_chip_to_bracer() if(HAS_TRAIT(user, TRAIT_CLOAKED)) decloak(user, TRUE) + + for(var/datum/action/action as anything in bracer_actions) + remove_action(user, action) + ..() /obj/item/clothing/gloves/yautja/hunter/on_enter_storage(obj/item/storage/S) @@ -362,8 +371,8 @@ //We use this to activate random verbs for non-Yautja /obj/item/clothing/gloves/yautja/hunter/proc/activate_random_verb(mob/caller) - var/option = rand(1, 11) - //we have options from 1 to 8, but we're giving the user a higher probability of being punished if they already rolled this bad + var/option = rand(1, 10) + //we have options from 1 to 7, but we're giving the user a higher probability of being punished if they already rolled this bad switch(option) if(1) . = wristblades_internal(caller, TRUE) @@ -379,8 +388,6 @@ . = call_disc_internal(caller, TRUE) if(7) . = translate_internal(caller, TRUE) - if(8) - . = call_combi_internal(caller, TRUE) else . = delimb_user(caller) @@ -451,6 +458,12 @@ to_chat(caller, SPAN_NOTICE("You activate your [left_wristblades.plural_name].")) playsound(caller, 'sound/weapons/wristblades_on.ogg', 15, TRUE) + var/datum/action/predator_action/bracer/wristblade/wb_action + for(wb_action as anything in caller.actions) + if(istypestrict(wb_action, /datum/action/predator_action/bracer/wristblade)) + wb_action.update_button_icon(wristblades_deployed) + break + return TRUE /obj/item/clothing/gloves/yautja/hunter/verb/track_gear() @@ -597,6 +610,12 @@ XI.remove_from_hud(M) anim(M.loc,M,'icons/mob/mob.dmi',,"cloak",,M.dir) + var/datum/action/predator_action/bracer/cloak/cloak_action + for(cloak_action as anything in M.actions) + if(istypestrict(cloak_action, /datum/action/predator_action/bracer/cloak)) + cloak_action.update_button_icon(HAS_TRAIT(caller, TRAIT_CLOAKED)) + break + return TRUE /obj/item/clothing/gloves/yautja/hunter/proc/wrapper_fizzle_camouflage() @@ -675,6 +694,12 @@ to_chat(caller, SPAN_NOTICE("You activate your plasma caster. It is in [caster.mode] mode.")) playsound(src, 'sound/weapons/pred_plasmacaster_on.ogg', 15, TRUE) + var/datum/action/predator_action/bracer/caster/caster_action + for(caster_action as anything in caller.actions) + if(istypestrict(caster_action, /datum/action/predator_action/bracer/caster)) + caster_action.update_button_icon(caster_deployed) + break + return TRUE @@ -793,10 +818,19 @@ to_chat(M, SPAN_NOTICE("Your bracers stop beeping.")) message_all_yautja("[M.real_name] has cancelled their bracer's self-destruction sequence.") message_admins("[key_name(M)] has deactivated their Self-Destruct.") + + var/datum/action/predator_action/bracer/self_destruct/sd_action + for(sd_action as anything in M.actions) + if(istypestrict(sd_action, /datum/action/predator_action/bracer/self_destruct)) + sd_action.update_button_icon(exploding) + break + return + if(istype(M.wear_mask,/obj/item/clothing/mask/facehugger) || (M.status_flags & XENO_HOST)) to_chat(M, SPAN_WARNING("Strange...something seems to be interfering with your bracer functions...")) return + if(forced || alert("Detonate the bracers? Are you sure?\n\nNote: If you activate SD for any non-accidental reason during or after a fight, you commit to the SD. By initially activating the SD, you have accepted your impending death to preserve any lost honor.","Explosive Bracers", "Yes", "No") == "Yes") if(M.gloves != src) return @@ -815,10 +849,16 @@ log_attack("[key_name(M)] triggered their predator self-destruct sequence in [A ? "in [A.name]":""]") message_all_yautja("[M.real_name] has triggered their bracer's self-destruction sequence.") explode(M) - return 1 + var/datum/action/predator_action/bracer/self_destruct/sd_action + for(sd_action as anything in M.actions) + if(istypestrict(sd_action, /datum/action/predator_action/bracer/self_destruct)) + sd_action.update_button_icon(exploding) + break + return TRUE +#define YAUTJA_CREATE_CRYSTAL_COOLDOWN "yautja_create_crystal_cooldown" /obj/item/clothing/gloves/yautja/hunter/verb/injectors() set name = "Create Stabilising Crystal" set category = "Yautja.Utility" @@ -826,7 +866,6 @@ set src in usr . = injectors_internal(usr, FALSE) - /obj/item/clothing/gloves/yautja/hunter/proc/injectors_internal(mob/caller, forced = FALSE) if(caller.is_mob_incapacitated()) return FALSE @@ -839,26 +878,22 @@ to_chat(caller, SPAN_WARNING("Your active hand must be empty!")) return FALSE - if(inject_timer) - to_chat(caller, SPAN_WARNING("You recently activated the stabilising crystal. Be patient.")) + if(TIMER_COOLDOWN_CHECK(src, YAUTJA_CREATE_CRYSTAL_COOLDOWN)) + var/remaining_time = DisplayTimeText(S_TIMER_COOLDOWN_TIMELEFT(src, YAUTJA_CREATE_CRYSTAL_COOLDOWN)) + to_chat(caller, SPAN_WARNING("You recently synthesized a stabilising crystal. A new crystal will be available in [remaining_time].")) return FALSE if(!drain_power(caller, 400)) return FALSE - inject_timer = TRUE - addtimer(CALLBACK(src, PROC_REF(injectors_ready)), 2 MINUTES) + S_TIMER_COOLDOWN_START(src, YAUTJA_CREATE_CRYSTAL_COOLDOWN, 2 MINUTES) to_chat(caller, SPAN_NOTICE("You feel a faint hiss and a crystalline injector drops into your hand.")) var/obj/item/reagent_container/hypospray/autoinjector/yautja/O = new(caller) caller.put_in_active_hand(O) playsound(src, 'sound/machines/click.ogg', 15, 1) return TRUE - -/obj/item/clothing/gloves/yautja/hunter/proc/injectors_ready() - if(ismob(loc)) - to_chat(loc, SPAN_NOTICE("Your bracers beep faintly and inform you that a new stabilising crystal is ready to be created.")) - inject_timer = FALSE +#undef YAUTJA_CREATE_CRYSTAL_COOLDOWN /obj/item/clothing/gloves/yautja/hunter/verb/healing_capsule() set name = "Create Healing Capsule" @@ -867,7 +902,7 @@ set src in usr . = healing_capsule_internal(usr, FALSE) - +#define YAUTJA_CREATE_CAPSULE_COOLDOWN "yautja_create_capsule_cooldown" /obj/item/clothing/gloves/yautja/hunter/proc/healing_capsule_internal(mob/caller, forced = FALSE) if(caller.is_mob_incapacitated()) return FALSE @@ -880,26 +915,22 @@ to_chat(caller, SPAN_WARNING("Your active hand must be empty!")) return FALSE - if(healing_capsule_timer) - to_chat(usr, SPAN_WARNING("Your bracer is still generating a new healing capsule!")) + if(TIMER_COOLDOWN_CHECK(src, YAUTJA_CREATE_CAPSULE_COOLDOWN)) + var/remaining_time = DisplayTimeText(S_TIMER_COOLDOWN_TIMELEFT(src, YAUTJA_CREATE_CAPSULE_COOLDOWN)) + to_chat(caller, SPAN_WARNING("You recently synthesized a healing capsule. A new capsule will be available in [remaining_time].")) return FALSE if(!drain_power(caller, 600)) return FALSE - healing_capsule_timer = TRUE - addtimer(CALLBACK(src, PROC_REF(healing_capsule_ready)), 4 MINUTES) + S_TIMER_COOLDOWN_START(src, YAUTJA_CREATE_CAPSULE_COOLDOWN, 4 MINUTES) to_chat(caller, SPAN_NOTICE("You feel your bracer churn as it pops out a healing capsule.")) var/obj/item/tool/surgery/healing_gel/O = new(caller) caller.put_in_active_hand(O) playsound(src, 'sound/machines/click.ogg', 15, 1) return TRUE - -/obj/item/clothing/gloves/yautja/hunter/proc/healing_capsule_ready() - if(ismob(loc)) - to_chat(loc, SPAN_NOTICE("Your bracers beep faintly and inform you that a new healing capsule is ready to be created.")) - healing_capsule_timer = FALSE +#undef YAUTJA_CREATE_CAPSULE_COOLDOWN /obj/item/clothing/gloves/yautja/hunter/verb/call_disc() set name = "Call Smart-Disc" @@ -991,26 +1022,6 @@ to_chat(caller, SPAN_NOTICE("You add \the [untracked_item] to the tracking system.")) return TRUE -/obj/item/clothing/gloves/yautja/hunter/verb/call_combi() - set name = "Yank combi-stick" - set category = "Yautja.Weapons" - set desc = "Yank on your combi-stick's chain, if it's in range. Otherwise... recover it yourself." - set src in usr - . = call_combi_internal(usr, FALSE) - -/obj/item/clothing/gloves/yautja/hunter/proc/call_combi_internal(mob/caller, forced = FALSE) - if(caller.is_mob_incapacitated()) - return FALSE - - . = check_random_function(caller, forced) - if(.) - return - - for(var/datum/effects/tethering/tether in caller.effects_list) - if(istype(tether.tethered.affected_atom, /obj/item/weapon/yautja/combistick)) - var/obj/item/weapon/yautja/combistick/stick = tether.tethered.affected_atom - stick.recall() - /obj/item/clothing/gloves/yautja/hunter/verb/translate() set name = "Translator" set desc = "Emit a message from your bracer to those nearby." diff --git a/code/modules/cm_preds/yaut_hudprocs.dm b/code/modules/cm_preds/yaut_hudprocs.dm index 6131ac135cb7..460cad894c6d 100644 --- a/code/modules/cm_preds/yaut_hudprocs.dm +++ b/code/modules/cm_preds/yaut_hudprocs.dm @@ -442,3 +442,18 @@ T.hud_set_hunter() else to_chat(src, SPAN_YAUTJABOLD("You cannot undo the actions of a living brother or sister!")) + +/mob/living/carbon/human/proc/call_combi() + set name = "Yank combi-stick" + set category = "Yautja.Weapons" + set desc = "Yank on your combi-stick's chain, if it's in range. Otherwise... recover it yourself." + + if(usr.is_mob_incapacitated()) + return FALSE + call_combi_internal(usr) + +/mob/living/carbon/human/proc/call_combi_internal(mob/caller, forced = FALSE) + for(var/datum/effects/tethering/tether in caller.effects_list) + if(istype(tether.tethered.affected_atom, /obj/item/weapon/yautja/combistick)) + var/obj/item/weapon/yautja/combistick/stick = tether.tethered.affected_atom + stick.recall() diff --git a/code/modules/cm_preds/yaut_mask.dm b/code/modules/cm_preds/yaut_mask.dm index 7e8e661e8a5e..f87c7a48c2e0 100644 --- a/code/modules/cm_preds/yaut_mask.dm +++ b/code/modules/cm_preds/yaut_mask.dm @@ -43,6 +43,8 @@ var/list/mask_huds = list(MOB_HUD_XENO_STATUS, MOB_HUD_HUNTER, MOB_HUD_HUNTER_CLAN, MOB_HUD_MEDICAL_OBSERVER) var/thrall = FALSE //Used to affect icon generation. + ///A list of all intrinsic mask actions + var/list/mask_actions = list(/datum/action/predator_action/mask/zoom, /datum/action/predator_action/mask/visor) /obj/item/clothing/mask/gas/yautja/New(location, mask_number = rand(1,12), armor_material = "ebony", legacy = "None") ..() @@ -96,8 +98,8 @@ if(istype(visor, /obj/item/clothing/glasses/night/yautja))//To change if any new vision modes are made human_holder.temp_drop_inv_item(visor) qdel(visor) - human_holder.update_inv_glasses() human_holder.update_sight() + add_vision(human_holder) /obj/item/clothing/mask/gas/yautja/proc/drain_power(mob/living/carbon/human/human_holder, drain_amount) var/obj/item/clothing/gloves/yautja/bracer = human_holder.gloves @@ -115,6 +117,18 @@ return zoom(usr, 11, 12) + update_zoom_action(src, usr) + if(zoom) + RegisterSignal(src, COMSIG_ITEM_UNZOOM, PROC_REF(update_zoom_action)) + return + +/obj/item/clothing/mask/gas/yautja/proc/update_zoom_action(source, mob/living/user) + UnregisterSignal(src, COMSIG_ITEM_UNZOOM) + var/datum/action/predator_action/mask/zoom/zoom_action + for(zoom_action as anything in user.actions) + if(istypestrict(zoom_action, /datum/action/predator_action/mask/zoom)) + zoom_action.update_button_icon(zoom) + break /obj/item/clothing/mask/gas/yautja/verb/togglesight() set name = "Toggle Mask Visors" @@ -165,12 +179,21 @@ playsound(src, 'sound/effects/pred_vision.ogg', 15, 1) user.update_inv_glasses() + var/datum/action/predator_action/mask/visor/visor_action + for(visor_action as anything in user.actions) + if(istypestrict(visor_action, /datum/action/predator_action/mask/visor)) + visor_action.update_button_icon(current_goggles) + break + #undef VISION_MODE_OFF #undef VISION_MODE_NVG /obj/item/clothing/mask/gas/yautja/dropped(mob/living/carbon/human/user) //Clear the gogglors if the helmet is removed. STOP_PROCESSING(SSobj, src) if(istype(user) && user.wear_mask == src) //inventory reference is only cleared after dropped(). + for(var/datum/action/action as anything in mask_actions) + remove_action(user, action) + for(var/listed_hud in mask_huds) var/datum/mob_hud/H = GLOB.huds[listed_hud] H.remove_hud_from(user, src) @@ -185,6 +208,9 @@ /obj/item/clothing/mask/gas/yautja/equipped(mob/living/carbon/human/user, slot) if(slot == WEAR_FACE) + for(var/datum/action/action as anything in mask_actions) + give_action(user, action) + START_PROCESSING(SSobj, src) for(var/listed_hud in mask_huds) var/datum/mob_hud/H = GLOB.huds[listed_hud] diff --git a/code/modules/cm_preds/yaut_procs.dm b/code/modules/cm_preds/yaut_procs.dm index 728e548dfd2f..d8ad1c297a37 100644 --- a/code/modules/cm_preds/yaut_procs.dm +++ b/code/modules/cm_preds/yaut_procs.dm @@ -337,3 +337,4 @@ equip_to_slot_if_possible(new /obj/item/falcon_drone(src.loc), WEAR_R_EAR, disable_warning = TRUE) remove_verb(src, /mob/living/carbon/human/proc/pred_buy) + remove_action(src, /datum/action/predator_action/claim_equipment) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 0ea527847d72..9cb8a8bef3fc 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -128,6 +128,7 @@ attack_speed = 5 attack_verb = list("sliced", "slashed", "jabbed", "torn", "gored") force = MELEE_FORCE_TIER_5 + has_speed_bonus = FALSE /*######################################### ########### One Handed Weapons ############ @@ -248,14 +249,16 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("speared", "stabbed", "impaled") - var/on = 1 - var/charged + var/on = TRUE + var/charged = FALSE var/force_wielded = MELEE_FORCE_TIER_6 var/force_unwielded = MELEE_FORCE_TIER_2 var/force_storage = MELEE_FORCE_TIER_1 /// Ref to the tether effect when thrown var/datum/effects/tethering/chain + ///The mob the chain is linked to + var/mob/living/linked_to /obj/item/weapon/yautja/combistick/Destroy() cleanup_chain() @@ -273,11 +276,13 @@ charged = FALSE remove_filter("combistick_charge") unwield(user) //Otherwise stays wielded even when thrown - if(on) - setup_chain(user) return TRUE /obj/item/weapon/yautja/combistick/proc/setup_chain(mob/living/user) + give_action(user, /datum/action/predator_action/bracer/combistick) + add_verb(user, /mob/living/carbon/human/proc/call_combi) + linked_to = user + var/list/tether_effects = apply_tether(user, src, range = 6, resistable = FALSE) chain = tether_effects["tetherer_tether"] RegisterSignal(chain, COMSIG_PARENT_QDELETING, PROC_REF(cleanup_chain)) @@ -293,6 +298,10 @@ /// Clean up the chain, deleting/nulling/unregistering as needed /obj/item/weapon/yautja/combistick/proc/cleanup_chain() SIGNAL_HANDLER + if(linked_to) + remove_action(linked_to, /datum/action/predator_action/bracer/combistick) + remove_verb(linked_to, /mob/living/carbon/human/proc/call_combi) + if(!QDELETED(chain)) QDEL_NULL(chain) @@ -1238,6 +1247,13 @@ /obj/item/weapon/gun/energy/yautja/plasma_caster/dropped(mob/living/carbon/human/M) playsound(M, 'sound/weapons/pred_plasmacaster_off.ogg', 15, 1) to_chat(M, SPAN_NOTICE("You deactivate your plasma caster.")) + + var/datum/action/predator_action/bracer/caster/caster_action + for(caster_action as anything in M.actions) + if(istypestrict(caster_action, /datum/action/predator_action/bracer/caster)) + caster_action.update_button_icon(FALSE) + break + if(source) forceMove(source) source.caster_deployed = FALSE diff --git a/code/modules/cm_tech/hologram.dm b/code/modules/cm_tech/hologram.dm index 3509c0a73a7d..1fcba71a4560 100644 --- a/code/modules/cm_tech/hologram.dm +++ b/code/modules/cm_tech/hologram.dm @@ -14,6 +14,7 @@ GLOBAL_LIST_EMPTY_TYPED(hologram_list, /mob/hologram) var/action_icon_state = "hologram_exit" var/mob/linked_mob + var/initial_leave_button = /datum/action/leave_hologram var/datum/action/leave_hologram/leave_button ///If can be detected on motion detectors. var/motion_sensed = FALSE @@ -45,7 +46,7 @@ GLOBAL_LIST_EMPTY_TYPED(hologram_list, /mob/hologram) name = "[initial(name)] ([M.name])" - leave_button = new(null, action_icon_state) + leave_button = new initial_leave_button(null, action_icon_state) leave_button.linked_hologram = src leave_button.give_to(M) diff --git a/code/modules/cm_tech/resources/resource.dm b/code/modules/cm_tech/resources/resource.dm index 44af2234afd3..02c46e3e8910 100644 --- a/code/modules/cm_tech/resources/resource.dm +++ b/code/modules/cm_tech/resources/resource.dm @@ -82,7 +82,7 @@ update_icon() /obj/structure/resource_node/proc/take_damage(damage) - health = Clamp(health - damage, 0, max_health) + health = clamp(health - damage, 0, max_health) healthcheck() /obj/structure/resource_node/bullet_act(obj/projectile/P) diff --git a/code/modules/cm_tech/tech_tiers.dm b/code/modules/cm_tech/tech_tiers.dm index 498c267afa05..b2d2c0a08de3 100644 --- a/code/modules/cm_tech/tech_tiers.dm +++ b/code/modules/cm_tech/tech_tiers.dm @@ -4,8 +4,8 @@ var/flags = NO_FLAGS - var/disabled_color = "#FFFFFF" - var/color = "#FFFFFF" + var/disabled_color = COLOR_WHITE + var/color = COLOR_WHITE var/max_techs = INFINITE_TECHS // Infinite var/list/turf/tier_turfs @@ -19,22 +19,22 @@ /datum/tier/free name = "Initial Tier" tier = 0 - color = "#000000" - disabled_color = "#000000" + color = COLOR_BLACK + disabled_color = COLOR_BLACK flags = TIER_FLAG_TRANSITORY /datum/tier/one name = "Tier 1" tier = 1 - color = "#00FF00" + color = COLOR_GREEN disabled_color = "#007d00" /datum/tier/one_transition_two name = "Tier 1 to Tier 2 transition" tier = 1 - color = "#000000" - disabled_color = "#000000" + color = COLOR_BLACK + disabled_color = COLOR_BLACK flags = TIER_FLAG_TRANSITORY /datum/tier/two @@ -47,27 +47,27 @@ /datum/tier/two_transition_three name = "Tier 2 to Tier 3 transition" tier = 2 - color = "#000000" - disabled_color = "#000000" + color = COLOR_BLACK + disabled_color = COLOR_BLACK flags = TIER_FLAG_TRANSITORY /datum/tier/three name = "Tier 3" tier = 3 - color = "#FF0000" + color = COLOR_RED disabled_color = "#7d0000" /datum/tier/three_transition_four name = "Tier 3 to Tier 4 transition" tier = 3 - color = "#000000" - disabled_color = "#000000" + color = COLOR_BLACK + disabled_color = COLOR_BLACK flags = TIER_FLAG_TRANSITORY /datum/tier/four name = "Tier 4" tier = 4 - color = "#FF00FF" + color = COLOR_MAGENTA disabled_color = "#7d007d" max_techs = 1 diff --git a/code/modules/defenses/bell_tower.dm b/code/modules/defenses/bell_tower.dm index 52207298c4b0..8ef4fe913079 100644 --- a/code/modules/defenses/bell_tower.dm +++ b/code/modules/defenses/bell_tower.dm @@ -210,7 +210,7 @@ if(turned_on) if(cloak_alpha_current < cloak_alpha_max) cloak_alpha_current = cloak_alpha_max - cloak_alpha_current = Clamp(cloak_alpha_current + incremental_ring_camo_penalty, cloak_alpha_max, 255) + cloak_alpha_current = clamp(cloak_alpha_current + incremental_ring_camo_penalty, cloak_alpha_max, 255) cloakebelltower.alpha = cloak_alpha_current addtimer(CALLBACK(src, PROC_REF(cloaker_fade_out_finish), cloakebelltower), camouflage_break, TIMER_OVERRIDE|TIMER_UNIQUE) animate(cloakebelltower, alpha = cloak_alpha_max, time = camouflage_break, easing = LINEAR_EASING, flags = ANIMATION_END_NOW) diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index ad09eaf3fa09..6ab8164c248d 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -88,7 +88,7 @@ ..() var/oldloc = loc var/amount = tgui_input_number(user, "How many dollars do you want to take? (0 to [src.worth])", "Take Money", 0, src.worth, 0) - amount = round(Clamp(amount, 0, src.worth)) + amount = round(clamp(amount, 0, src.worth)) if(amount == 0) return if(QDELETED(src) || loc != oldloc) diff --git a/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm b/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm index f0d812026491..248c1a00d353 100644 --- a/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm +++ b/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm @@ -1,9 +1,9 @@ -/datum/equipment_preset/survivor/scientist/florina - name = "Survivor - Florina Researcher" - assignment = "Florina Researcher" +/datum/equipment_preset/survivor/scientist/fiorina + name = "Survivor - Fiorina Researcher" + assignment = "Fiorina Researcher" -/datum/equipment_preset/survivor/scientist/florina/load_gear(mob/living/carbon/human/new_human) +/datum/equipment_preset/survivor/scientist/fiorina/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/purple(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(new_human), WEAR_JACKET) @@ -15,20 +15,20 @@ ..() -/datum/equipment_preset/survivor/doctor/florina - name = "Survivor - Florina Doctor" - assignment = "Florina Doctor" +/datum/equipment_preset/survivor/doctor/fiorina + name = "Survivor - Fiorina Doctor" + assignment = "Fiorina Doctor" -/datum/equipment_preset/survivor/doctor/florina/load_gear(mob/living/carbon/human/new_human) +/datum/equipment_preset/survivor/doctor/fiorina/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) ..() -/datum/equipment_preset/survivor/security/florina - name = "Survivor - Florina Prison Guard" - assignment = "Florina Prison Guard" +/datum/equipment_preset/survivor/security/fiorina + name = "Survivor - Fiorina Prison Guard" + assignment = "Fiorina Prison Guard" -/datum/equipment_preset/survivor/security/florina/load_gear(mob/living/carbon/human/new_human) +/datum/equipment_preset/survivor/security/fiorina/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) @@ -37,11 +37,11 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(new_human), WEAR_FEET) ..() -/datum/equipment_preset/survivor/colonial_marshal/florina +/datum/equipment_preset/survivor/colonial_marshal/fiorina name = "Survivor - United Americas Riot Officer" assignment = "United Americas Riot Officer" -/datum/equipment_preset/survivor/colonial_marshal/florina/load_gear(mob/living/carbon/human/new_human) +/datum/equipment_preset/survivor/colonial_marshal/fiorina/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/ua_riot(new_human), WEAR_JACKET) @@ -52,11 +52,11 @@ ..() -/datum/equipment_preset/survivor/engineer/florina - name = "Survivor - Florina Engineer" - assignment = "Florina Engineer" +/datum/equipment_preset/survivor/engineer/fiorina + name = "Survivor - Fiorina Engineer" + assignment = "Fiorina Engineer" -/datum/equipment_preset/survivor/engineer/florina/load_gear(mob/living/carbon/human/new_human) +/datum/equipment_preset/survivor/engineer/fiorina/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron/overalls(new_human), WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/eng(new_human), WEAR_BACK) diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm index b5ef13f35b2b..0b6a3b4b1ed7 100644 --- a/code/modules/gear_presets/uscm_ship.dm +++ b/code/modules/gear_presets/uscm_ship.dm @@ -624,7 +624,7 @@ minimum_age = 27 skills = /datum/skills/auxiliary_officer - minimap_icon = list("cic" = MINIMAP_ICON_COLOR_SILVER) + minimap_icon = list("cic" = COLOR_SILVER) minimap_background = MINIMAP_ICON_BACKGROUND_CIC /datum/equipment_preset/uscm_ship/auxiliary_officer/New() diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 2abe8c598032..edc5f4baf880 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -112,14 +112,14 @@ /atom/proc/flash_lighting_fx( _range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, - _color = LIGHT_COLOR_WHITE, + _color = COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE, _flash_times = 1) new /obj/effect/light_flash(get_turf(src), _range, _power, _color, _duration, _flash_times) -/obj/effect/light_flash/Initialize(mapload, _range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _flash_times = 1) +/obj/effect/light_flash/Initialize(mapload, _range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _flash_times = 1) light_range = _range light_power = _power light_color = _color diff --git a/code/modules/lighting/lighting_mask/shadow_calculator.dm b/code/modules/lighting/lighting_mask/shadow_calculator.dm index 42f98b47e789..cfd4a86f5f3a 100644 --- a/code/modules/lighting/lighting_mask/shadow_calculator.dm +++ b/code/modules/lighting/lighting_mask/shadow_calculator.dm @@ -95,7 +95,7 @@ SSlighting.total_shadow_calculations ++ //Ceiling the range since we need it in integer form - var/range = CEILING(radius, 1) + var/range = Ceiling(radius) DO_SOMETHING_IF_DEBUGGING_SHADOWS(var/timer = TICK_USAGE) //Work out our position diff --git a/code/modules/lighting/lighting_static/static_lighting_source.dm b/code/modules/lighting/lighting_static/static_lighting_source.dm index e650a432fc63..cfbfb49ceda3 100644 --- a/code/modules/lighting/lighting_static/static_lighting_source.dm +++ b/code/modules/lighting/lighting_static/static_lighting_source.dm @@ -223,8 +223,8 @@ var/list/turf/turfs = list() if (source_turf) var/oldlum = source_turf.luminosity - source_turf.luminosity = CEILING(light_range, 1) - for(var/turf/T in view(CEILING(light_range, 1), source_turf)) + source_turf.luminosity = Ceiling(light_range) + for(var/turf/T in view(Ceiling(light_range), source_turf)) if(!IS_OPAQUE_TURF(T)) if (!T.lighting_corners_initialised) T.static_generate_missing_corners() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 529d13636b2d..2c06d28de8bb 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -262,6 +262,9 @@ var/mob/living/carbon/human/human_target = target client.eye = human_target + observe_target_mob = human_target + RegisterSignal(observe_target_mob, COMSIG_PARENT_QDELETING, PROC_REF(clean_observe_target)) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(observer_move_react)) if(!human_target.hud_used) return @@ -290,19 +293,14 @@ break - observe_target_mob = human_target - RegisterSignal(observe_target_mob, COMSIG_PARENT_QDELETING, PROC_REF(clean_observe_target)) RegisterSignal(observe_target_mob, COMSIG_MOB_GHOSTIZE, PROC_REF(observe_target_ghosting)) RegisterSignal(observe_target_mob, COMSIG_MOB_NEW_MIND, PROC_REF(observe_target_new_mind)) RegisterSignal(observe_target_mob, COMSIG_MOB_LOGIN, PROC_REF(observe_target_login)) - RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(observer_move_react)) - if(human_target.client) observe_target_client = human_target.client RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD, PROC_REF(observe_target_screen_add)) RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE, PROC_REF(observe_target_screen_remove)) - return /mob/dead/observer/reset_perspective(atom/A) if(observe_target_mob) @@ -1235,7 +1233,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp . += "" if(timeofdeath) - . += "Time Since Death: [duration2text_sec(world.time - timeofdeath)]" + var/time_since_death = world.time - timeofdeath + var/format = (time_since_death >= 1 HOURS ? "hh:mm:ss" : "mm:ss") + + . += "Time Since Death: [time2text(time_since_death, format)]" /proc/message_ghosts(message) diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 5973e7cde9fe..173de5338196 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -110,7 +110,7 @@ if(isliving(M)) var/mob/living/player = M - serialized["health"] = FLOOR((player.health / player.maxHealth * 100), 1) + serialized["health"] = Floor(player.health / player.maxHealth * 100) if(isxeno(player)) var/mob/living/carbon/xenomorph/xeno = player @@ -126,7 +126,7 @@ var/obj/item/card/id/id_card = human.get_idcard() var/datum/species/human_species = human.species var/max_health = human_species.total_health != human.maxHealth ? human_species.total_health : human.maxHealth - serialized["health"] = FLOOR((player.health / max_health * 100), 1) + serialized["health"] = Floor(player.health / max_health * 100) serialized["job"] = id_card?.assignment ? id_card.assignment : human.job serialized["nickname"] = human.real_name diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 5890a44f4168..af0da452d13e 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -75,14 +75,22 @@ // Finding the last guy for anti-delay. if(SSticker.mode && SSticker.mode.is_in_endgame && SSticker.current_state != GAME_STATE_FINISHED && is_mainship_level(z)) var/mob/last_living_human + var/shipside_humans_count = 0 + var/datum/hive_status/main_hive = GLOB.hive_datum[XENO_HIVE_NORMAL] + var/see_humans_on_tacmap = main_hive.see_humans_on_tacmap for(var/mob/living/carbon/human/cur_human as anything in GLOB.alive_human_list) if(!is_mainship_level(cur_human.z)) continue - if(last_living_human) + shipside_humans_count++ + if(last_living_human && see_humans_on_tacmap) last_living_human = null break last_living_human = cur_human - if(last_living_human && (GLOB.last_qm_callout + 2 MINUTES) < world.time) + + if(!see_humans_on_tacmap && shipside_humans_count < (main_hive.get_real_total_xeno_count() * HIJACK_RATIO_FOR_TACMAP)) + xeno_announcement("There is only a handful of tallhosts left, they are now visible on our hive mind map.", XENO_HIVE_NORMAL, SPAN_ANNOUNCEMENT_HEADER_BLUE("[QUEEN_MOTHER_ANNOUNCE]")) + main_hive.see_humans_on_tacmap = TRUE + if(last_living_human && shipside_humans_count <= 1 && (GLOB.last_qm_callout + 2 MINUTES) < world.time) GLOB.last_qm_callout = world.time // Tell the xenos where the human is. xeno_announcement("I sense the last tallhost hiding in [get_area(last_living_human)].", XENO_HIVE_NORMAL, SPAN_ANNOUNCEMENT_HEADER_BLUE("[QUEEN_MOTHER_ANNOUNCE]")) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 25e890399daf..da17bf8a15f0 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -129,7 +129,7 @@ if(gloves && !skipgloves) msg += "[t_He] [t_has] [gloves.get_examine_line(user)] [gloves.get_examine_location(src, user, WEAR_HANDS, t_He, t_his, t_him, t_has, t_is)].\n" else if(hands_blood_color) - msg += SPAN_WARNING("[t_He] [t_has] [(hands_blood_color != "#030303") ? "blood" : "oil"]-stained hands!\n") + msg += SPAN_WARNING("[t_He] [t_has] [(hands_blood_color != COLOR_OIL) ? "blood" : "oil"]-stained hands!\n") //belt if(belt) @@ -139,7 +139,7 @@ if(shoes && !skipshoes) msg += "[t_He] [t_is] wearing [shoes.get_examine_line(user)] [shoes.get_examine_location(src, user, WEAR_FEET, t_He, t_his, t_him, t_has, t_is)].\n" else if(feet_blood_color) - msg += SPAN_WARNING("[t_He] [t_has] [(feet_blood_color != "#030303") ? "blood" : "oil"]-stained feet!\n") + msg += SPAN_WARNING("[t_He] [t_has] [(feet_blood_color != COLOR_OIL) ? "blood" : "oil"]-stained feet!\n") //mask if(wear_mask && !skipmask) diff --git a/code/modules/mob/living/carbon/human/human_abilities.dm b/code/modules/mob/living/carbon/human/human_abilities.dm index b5a401bc5649..a568e93df5c0 100644 --- a/code/modules/mob/living/carbon/human/human_abilities.dm +++ b/code/modules/mob/living/carbon/human/human_abilities.dm @@ -124,7 +124,7 @@ CULT /datum/action/human_action/activable/can_use_action() var/mob/living/carbon/human/H = owner - if(istype(H) && !H.is_mob_incapacitated() && !H.dazed) + if(istype(H) && !H.is_mob_incapacitated() && !HAS_TRAIT(H, TRAIT_DAZED)) return TRUE // Called when the action is clicked on. diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index e09e9e2ebb7b..942c20482230 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -34,7 +34,7 @@ var/datum/internal_organ/brain/sponge = internal_organs_by_name["brain"] if(sponge) sponge.take_damage(amount) - sponge.damage = Clamp(sponge.damage, 0, maxHealth*2) + sponge.damage = clamp(sponge.damage, 0, maxHealth*2) brainloss = sponge.damage else brainloss = 200 @@ -49,7 +49,7 @@ if(species.has_organ["brain"]) var/datum/internal_organ/brain/sponge = internal_organs_by_name["brain"] if(sponge) - sponge.damage = Clamp(amount, 0, maxHealth*2) + sponge.damage = clamp(amount, 0, maxHealth*2) brainloss = sponge.damage else brainloss = 200 @@ -287,7 +287,6 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t apply_damage(burn, BURN, picked, sharp, edge) UpdateDamageIcon() updatehealth() - speech_problem_flag = TRUE //Heal MANY limbs, in random order @@ -308,7 +307,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t parts -= picked updatehealth() - speech_problem_flag = TRUE + if(update) UpdateDamageIcon() // damage MANY limbs, in random order diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index dd25a13538af..9ec9d0b05ec5 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -66,8 +66,6 @@ var/voice - var/speech_problem_flag = FALSE - var/special_voice = "" // For changing our voice. Used by a symptom. var/last_dam = -1 //Used for determining if we need to process all limbs or just some or even none. diff --git a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm index 77358ca45b89..2d7498f53167 100644 --- a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm +++ b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm @@ -1,42 +1,7 @@ //Refer to life.dm for caller /mob/living/carbon/human/proc/handle_disabilities() - - if(disabilities & EPILEPSY) - if(prob(1) && !HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) - visible_message(SPAN_DANGER("\The [src] starts having a seizure!"), \ - SPAN_DANGER("You start having a seizure!"), null, 5) - apply_effect(10, PARALYZE) - make_jittery(1000) - return - - if(disabilities & COUGHING) - if(prob(5) && !HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) - drop_held_item() - INVOKE_ASYNC(src, PROC_REF(emote), "cough") - return - - if(disabilities & TOURETTES) - speech_problem_flag = TRUE - if((prob(10) && !HAS_TRAIT(src, TRAIT_KNOCKEDOUT))) - apply_effect(10, STUN) - spawn() - switch(rand(1, 3)) - if(1) - emote("twitch") - if(2 to 3) - say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") - var/old_x = pixel_x - var/old_y = pixel_y - pixel_x += rand(-2, 2) - pixel_y += rand(-1, 1) - sleep(2) - pixel_x = old_x - pixel_y = old_y - return - if(disabilities & NERVOUS) - speech_problem_flag = TRUE if(prob(10)) stuttering = max(10, stuttering) return diff --git a/code/modules/mob/living/carbon/human/life/handle_environment.dm b/code/modules/mob/living/carbon/human/life/handle_environment.dm index 143d9d500793..65bc7213810e 100644 --- a/code/modules/mob/living/carbon/human/life/handle_environment.dm +++ b/code/modules/mob/living/carbon/human/life/handle_environment.dm @@ -19,7 +19,7 @@ if(thermal_protection < 1) temp_adj = (1 - thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) - bodytemperature += Clamp(temp_adj, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX) + bodytemperature += clamp(temp_adj, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX) //+/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. if(bodytemperature > species.heat_level_1) diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm index 5d706518f5e3..b84c8e9d24c2 100644 --- a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm +++ b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm @@ -60,10 +60,6 @@ else clear_fullscreen("blind") - if(dazed) - overlay_fullscreen("eye_blurry", /atom/movable/screen/fullscreen/impaired, 5) - else - clear_fullscreen("eye_blurry") ///Pain should override the SetEyeBlur(0) should the pain be painful enough to cause eyeblur in the first place. Also, peepers is essential to make sure eye damage isn't overriden. var/datum/internal_organ/eyes/peepers = internal_organs_by_name["eyes"] if((disabilities & NEARSIGHTED) && !HAS_TRAIT(src, TRAIT_NEARSIGHTED_EQUIPMENT) && pain.current_pain < 80 && peepers.organ_status == ORGAN_HEALTHY) @@ -163,6 +159,12 @@ interactee.check_eye(src) return TRUE +/mob/living/carbon/human/on_dazed_trait_gain(datum/source) + . = ..() + overlay_fullscreen("eye_blurry", /atom/movable/screen/fullscreen/impaired, 5) +/mob/living/carbon/human/on_dazed_trait_loss(datum/source) + . = ..() + clear_fullscreen("eye_blurry") /mob/living/carbon/human/proc/check_status_effects() var/status_effect_placement = 1 diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm index e9bb307d7335..5b37238d28ab 100644 --- a/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm +++ b/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm @@ -58,7 +58,6 @@ if(regular_update && halloss > 0) apply_damage(-3, HALLOSS) else if(sleeping) - speech_problem_flag = TRUE if(regular_update) handle_dreams() apply_damage(-3, HALLOSS) @@ -100,13 +99,14 @@ AdjustEarDeafness(-1) - if(!ear_deaf && client && client.soundOutput) - client.soundOutput.status_flags ^= EAR_DEAF_MUTE - client.soundOutput.apply_status() - else if(ear_damage) ear_damage = max(ear_damage - 0.05, 0) + // This should be done only on updates abvoe, or even better in the AdjsutEarDeafnes handlers + if(!ear_deaf && (client?.soundOutput?.status_flags & EAR_DEAF_MUTE)) + client.soundOutput.status_flags ^= EAR_DEAF_MUTE + client.soundOutput.apply_status() + //Resting if(resting) dizziness = max(0, dizziness - 15) @@ -121,7 +121,6 @@ handle_statuses() if(paralyzed) - speech_problem_flag = TRUE apply_effect(1, WEAKEN) silent = 1 blinded = TRUE diff --git a/code/modules/mob/living/carbon/human/life/life_helpers.dm b/code/modules/mob/living/carbon/human/life/life_helpers.dm index bf254b9da1ed..cab3ae21a782 100644 --- a/code/modules/mob/living/carbon/human/life/life_helpers.dm +++ b/code/modules/mob/living/carbon/human/life/life_helpers.dm @@ -187,31 +187,6 @@ if(G.lighting_alpha < lighting_alpha) lighting_alpha = G.lighting_alpha -/mob/living/carbon/human/handle_silent() - if(..()) - speech_problem_flag = TRUE - return silent - -/mob/living/carbon/human/handle_slurring() - if(..()) - speech_problem_flag = TRUE - return slurring - -/mob/living/carbon/human/handle_dazed() - if(dazed) - var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.1 : 0 - - var/final_reduction = skill_resistance + 1 - adjust_effect(-final_reduction, DAZE, EFFECT_FLAG_LIFE) - if(dazed) - speech_problem_flag = TRUE - return dazed - -/mob/living/carbon/human/handle_stuttering() - if(..()) - speech_problem_flag = TRUE - return stuttering - #define HUMAN_TIMER_TO_EFFECT_CONVERSION (0.05) //(1/20) //once per 2 seconds, with effect equal to endurance, which is used later /mob/living/carbon/human/GetStunDuration(amount) @@ -232,6 +207,13 @@ var/final_reduction = (1 - skill_resistance) / species.knock_out_reduction return . * final_reduction +/mob/living/carbon/human/GetDazeDuration(amount) + . = ..() + var/skill_resistance = skills ? (skills.get_skill_level(SKILL_ENDURANCE)-1)*0.08 : 0 + var/final_reduction = (1 - skill_resistance) + return . * final_reduction + + /mob/living/carbon/human/proc/handle_revive() SEND_SIGNAL(src, COMSIG_HUMAN_REVIVED) track_revive(job) diff --git a/code/modules/mob/living/carbon/human/powers/issue_order.dm b/code/modules/mob/living/carbon/human/powers/issue_order.dm index 775c4f645516..1becf805c027 100644 --- a/code/modules/mob/living/carbon/human/powers/issue_order.dm +++ b/code/modules/mob/living/carbon/human/powers/issue_order.dm @@ -72,14 +72,14 @@ switch(order) if(COMMAND_ORDER_MOVE) mobility_aura_count++ - mobility_aura = Clamp(mobility_aura, strength, ORDER_MOVE_MAX_LEVEL) + mobility_aura = clamp(mobility_aura, strength, ORDER_MOVE_MAX_LEVEL) if(COMMAND_ORDER_HOLD) protection_aura_count++ - protection_aura = Clamp(protection_aura, strength, ORDER_HOLD_MAX_LEVEL) + protection_aura = clamp(protection_aura, strength, ORDER_HOLD_MAX_LEVEL) pain.apply_pain_reduction(protection_aura * PAIN_REDUCTION_AURA) if(COMMAND_ORDER_FOCUS) marksman_aura_count++ - marksman_aura = Clamp(marksman_aura, strength, ORDER_FOCUS_MAX_LEVEL) + marksman_aura = clamp(marksman_aura, strength, ORDER_FOCUS_MAX_LEVEL) hud_set_order() diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index b31604d2cdd6..e8702e56c05f 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -115,12 +115,9 @@ message = capitalize(trim(message)) message = process_chat_markup(message, list("~", "_")) - if(speech_problem_flag) - var/list/handle_r = handle_speech_problems(message) - message = handle_r[1] - verb = handle_r[2] - speech_problem_flag = handle_r[3] - + var/list/handle_r = handle_speech_problems(message) + message = handle_r[1] + verb = handle_r[2] if(!message) return @@ -260,40 +257,25 @@ for it but just ignore it. return verb /mob/living/carbon/human/proc/handle_speech_problems(message) - var/list/returns[3] + var/list/returns[2] var/verb = "says" - var/handled = FALSE if(silent) message = "" - handled = TRUE if(sdisabilities & DISABILITY_MUTE) message = "" - handled = TRUE - if(wear_mask) - if(istype(wear_mask, /obj/item/clothing/mask/horsehead)) - var/obj/item/clothing/mask/horsehead/hoers = wear_mask - if(hoers.voicechange) - message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") - verb = pick("whinnies","neighs", "says") - handled = TRUE - var/braindam = getBrainLoss() - if(slurring || stuttering || dazed || braindam >= 60) + if(slurring || stuttering || HAS_TRAIT(src, TRAIT_DAZED) || braindam >= 60) msg_admin_niche("[key_name(src)] stuttered while saying: \"[message]\"") //Messages that get modified by the 4 reasons below have their original message logged too if(slurring) message = slur(message) verb = pick("stammers","stutters") - handled = TRUE if(stuttering) message = NewStutter(message) verb = pick("stammers", "stutters") - handled = TRUE - if(dazed) + if(HAS_TRAIT(src, TRAIT_DAZED)) message = DazedText(message) verb = pick("mumbles", "babbles") - handled = TRUE if(braindam >= 60) - handled = TRUE if(prob(braindam/4)) message = stutter(message, stuttering) verb = pick("stammers", "stutters") @@ -301,7 +283,6 @@ for it but just ignore it. message = uppertext(message) verb = pick("yells like an idiot","says rather loudly") if(HAS_TRAIT(src, TRAIT_LISPING)) - handled = TRUE var/old_message = message message = lisp_replace(message) if(old_message != message) @@ -309,8 +290,6 @@ for it but just ignore it. returns[1] = message returns[2] = verb - returns[3] = handled - return returns /mob/living/carbon/human/hear_apollo() diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index add78365a350..684bfa672b19 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -28,7 +28,7 @@ else if(chem_effect_flags & CHEM_EFFECT_ORGAN_STASIS) b_volume *= 1 else if(heart.damage >= heart.organ_status >= ORGAN_BRUISED) - b_volume *= Clamp(100 - (2 * heart.damage), 30, 100) / 100 + b_volume *= clamp(100 - (2 * heart.damage), 30, 100) / 100 //Effects of bloodloss if(b_volume <= BLOOD_VOLUME_SAFE) @@ -37,7 +37,7 @@ /// How much oxyloss will there be from the next time blood processes var/additional_oxyloss = (100 - blood_percentage) / 5 /// The limit of the oxyloss gained, ignoring oxyloss from the switch statement - var/maximum_oxyloss = Clamp((100 - blood_percentage) / 2, oxyloss, 100) + var/maximum_oxyloss = clamp((100 - blood_percentage) / 2, oxyloss, 100) if(oxyloss < maximum_oxyloss) oxyloss += round(max(additional_oxyloss, 0)) diff --git a/code/modules/mob/living/carbon/human/species/yautja/_species.dm b/code/modules/mob/living/carbon/human/species/yautja/_species.dm index a69d94afaca7..f871bfe02407 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/_species.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/_species.dm @@ -211,7 +211,10 @@ limb.time_to_knit = 600 // 1 minute to self heal bone break, time is in tenths of a second hunter.set_languages(list(LANGUAGE_YAUTJA)) + give_action(hunter, /datum/action/predator_action/claim_equipment) give_action(hunter, /datum/action/yautja_emote_panel) + give_action(hunter, /datum/action/predator_action/mark_for_hunt) + give_action(hunter, /datum/action/predator_action/mark_panel) return ..() /datum/species/yautja/get_hairstyle(style) @@ -228,100 +231,3 @@ /datum/species/yautja/open_emote_panel() var/datum/yautja_emote_panel/ui = new(usr) ui.ui_interact(usr) - -/datum/action/yautja_emote_panel - name = "Open Emote Panel" - action_icon_state = "looc_toggle" - -/datum/action/yautja_emote_panel/can_use_action() - . = ..() - if(!.) - return FALSE - - if(!isyautja(owner)) - return FALSE - - return TRUE - -/datum/action/yautja_emote_panel/action_activate() - if(!can_use_action()) - return - - var/mob/living/carbon/human/human_owner = owner - var/datum/species/yautja/yautja_species = human_owner.species - yautja_species.open_emote_panel() - -/datum/yautja_emote_panel - /// Static dict ("category" : (emotes)) of every yautja emote typepath - var/static/list/yautja_emotes - /// Static list of categories - var/static/list/yautja_categories = list() - /// Panel allows you to spam, so a manual CD is added here - COOLDOWN_DECLARE(panel_emote_cooldown) - -/datum/yautja_emote_panel/New() - if(!length(yautja_emotes)) - var/list/emotes_to_add = list() - for(var/datum/emote/living/carbon/human/yautja/emote as anything in subtypesof(/datum/emote/living/carbon/human/yautja)) - if(!initial(emote.key) || initial(emote.no_panel)) - continue - - if(!(initial(emote.category) in yautja_categories)) - yautja_categories += initial(emote.category) - emotes_to_add += emote - yautja_emotes = emotes_to_add - -/datum/yautja_emote_panel/proc/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "YautjaEmotes") - ui.open() - -/datum/yautja_emote_panel/ui_data(mob/user) - var/list/data = list() - - data["on_cooldown"] = !COOLDOWN_FINISHED(src, panel_emote_cooldown) - - return data - -/datum/yautja_emote_panel/ui_state(mob/user) - return GLOB.conscious_state - -/datum/yautja_emote_panel/ui_static_data(mob/user) - var/list/data = list() - - data["categories"] = yautja_categories - data["emotes"] = list() - - for(var/datum/emote/living/carbon/human/yautja/emote as anything in yautja_emotes) - data["emotes"] += list(list( - "id" = initial(emote.key), - "text" = (initial(emote.override_say) || initial(emote.say_message) || initial(emote.key)), - "category" = initial(emote.category), - "path" = "[emote]", - )) - - return data - -/datum/yautja_emote_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - - switch(action) - if("emote") - var/datum/emote/living/carbon/human/yautja/path - if(!params["emotePath"]) - return FALSE - - path = text2path(params["emotePath"]) - - if(!path || !COOLDOWN_FINISHED(src, panel_emote_cooldown)) - return - - if(!(path in subtypesof(/datum/emote/living/carbon/human/yautja))) - return FALSE - - COOLDOWN_START(src, panel_emote_cooldown, 2.5 SECONDS) - usr.emote(initial(path.key)) - return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/Abilities.dm b/code/modules/mob/living/carbon/xenomorph/Abilities.dm index dc44260187a7..5c8dcb9a2032 100644 --- a/code/modules/mob/living/carbon/xenomorph/Abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/Abilities.dm @@ -323,21 +323,6 @@ return return ..() -/datum/action/xeno_action/onclick/queen_award - name = "Give Royal Jelly (500)" - action_icon_state = "queen_award" - plasma_cost = 500 - -/datum/action/xeno_action/onclick/queen_award/use_ability(atom/target) - var/mob/living/carbon/xenomorph/queen/xeno = owner - if(!xeno.check_state()) - return - if(!xeno.check_plasma(plasma_cost)) - return - if(give_jelly_award(xeno.hive)) - xeno.use_plasma(plasma_cost) - return ..() - /datum/action/xeno_action/onclick/queen_word name = "Word of the Queen (50)" action_icon_state = "queen_word" diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 08f884d3a69d..3f83451a6386 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -248,7 +248,6 @@ var/pounce_distance = 0 // Life reduction variables. - var/life_daze_reduction = -1.5 var/life_slow_reduction = -1.5 ////////////////////////////////////////////////////////////////// diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm index ef084c9b5b59..bd01376c9f9d 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm @@ -17,6 +17,8 @@ if(xeno.crest_defense) to_chat(xeno, SPAN_XENOWARNING("We lower our crest.")) + xeno.balloon_alert(xeno, "crest lowered") + xeno.ability_speed_modifier += speed_debuff xeno.armor_deflection_buff += armor_buff xeno.mob_size = MOB_SIZE_BIG //knockback immune @@ -24,6 +26,8 @@ xeno.update_icons() else to_chat(xeno, SPAN_XENOWARNING("We raise our crest.")) + xeno.balloon_alert(xeno, "crest raised") + xeno.ability_speed_modifier -= speed_debuff xeno.armor_deflection_buff -= armor_buff xeno.mob_size = MOB_SIZE_XENO //no longer knockback immune @@ -313,4 +317,3 @@ /datum/action/xeno_action/onclick/soak/proc/remove_enrage() owner.remove_filter("steelcrest_enraged") - diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm index a6e79401c9bd..966e9ce84309 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm @@ -326,6 +326,8 @@ else if (LAZYLEN(targets) >= 3) xeno.balloon_alert(xeno, "our tail catches and stuns [LAZYLEN(targets)] targets!", text_color = "#51a16c") + apply_cooldown() + for (var/mob/living/carbon/target in targets) xeno.visible_message(SPAN_XENODANGER("\The [xeno]'s hooked tail coils itself around [target]!"), SPAN_XENODANGER("Our hooked tail coils itself around [target]!")) @@ -359,7 +361,6 @@ qdel(tail_beam) // hook beam catches target, throws them back, is deleted (throw_atom has sleeps), then hook beam catches another target, repeat addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_abduct/proc/remove_tail_overlay, target, tail_image), 0.5 SECONDS) //needed so it can actually be seen as it gets deleted too quickly otherwise. - apply_cooldown() return ..() /datum/action/xeno_action/activable/prae_abduct/proc/remove_tail_overlay(mob/living/carbon/human/overlayed_human, image/tail_image) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm index 50fa9fd92b2c..d245449fa2cf 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm @@ -1,8 +1,3 @@ -/datum/action/xeno_action/onclick/deevolve - name = "De-Evolve a Xenomorph (500)" - action_icon_state = "xeno_deevolve" - plasma_cost = 500 - /datum/action/xeno_action/onclick/remove_eggsac name = "Remove Eggsac" action_icon_state = "grow_ovipositor" @@ -45,23 +40,10 @@ var/node_plant_plasma_cost = 300 var/turf_build_cooldown = 7 SECONDS -/datum/action/xeno_action/onclick/give_evo_points - name = "Trade Larva for Evolution Points (100)" - action_icon_state = "queen_give_evo_points" - plasma_cost = 100 - xeno_cooldown = 60 SECONDS - var/evo_points_per_larva = 250 - var/required_larva = 3 - -/datum/action/xeno_action/onclick/banish - name = "Banish a Xenomorph (500)" - action_icon_state = "xeno_banish" - plasma_cost = 500 - -/datum/action/xeno_action/onclick/readmit - name = "Readmit a Xenomorph (100)" +/datum/action/xeno_action/onclick/manage_hive + name = "Manage The Hive" action_icon_state = "xeno_readmit" - plasma_cost = 100 + plasma_cost = 0 /datum/action/xeno_action/activable/secrete_resin/remote/queen name = "Projected Resin (100)" diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm index 917a7b1c9af7..cbbc6ae21013 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm @@ -1,6 +1,7 @@ // devolve a xeno - lots of old, vaguely shitty code here -/datum/action/xeno_action/onclick/deevolve/use_ability(atom/Atom) +/datum/action/xeno_action/onclick/manage_hive/proc/de_evolve_other() var/mob/living/carbon/xenomorph/queen/user_xeno = owner + var/plasma_cost_devolve = 500 if(!user_xeno.check_state()) return if(!user_xeno.observed_xeno) @@ -8,7 +9,7 @@ return var/mob/living/carbon/xenomorph/target_xeno = user_xeno.observed_xeno - if(!user_xeno.check_plasma(plasma_cost)) + if(!user_xeno.check_plasma(plasma_cost_devolve)) return if(target_xeno.hivenumber != user_xeno.hivenumber) @@ -130,7 +131,7 @@ SSround_recording.recorder.stop_tracking(target_xeno) SSround_recording.recorder.track_player(new_xeno) qdel(target_xeno) - return ..() + return /datum/action/xeno_action/onclick/remove_eggsac/use_ability(atom/A) var/mob/living/carbon/xenomorph/queen/X = owner @@ -292,12 +293,15 @@ to_chat(X, SPAN_XENONOTICE("You channel your plasma to heal your sisters' wounds around this area.")) return ..() -/datum/action/xeno_action/onclick/give_evo_points/use_ability(atom/Atom) +/datum/action/xeno_action/onclick/manage_hive/proc/give_evo_points() var/mob/living/carbon/xenomorph/queen/user_xeno = owner + var/plasma_cost_givepoints = 100 + + if(!user_xeno.check_state()) return - if(!user_xeno.check_plasma(plasma_cost)) + if(!user_xeno.check_plasma(plasma_cost_givepoints)) return if(world.time < SSticker.mode.round_time_lobby + SHUTTLE_TIME_LOCK) @@ -308,7 +312,8 @@ if(!choice) return - + var/evo_points_per_larva = 250 + var/required_larva = 3 var/mob/living/carbon/xenomorph/target_xeno for(var/mob/living/carbon/xenomorph/xeno in user_xeno.hive.totalXenos) @@ -351,14 +356,45 @@ target_xeno.evolution_stored += evo_points_per_larva user_xeno.hive.stored_larva-- - return ..() + return + + + +/datum/action/xeno_action/onclick/manage_hive/proc/give_jelly_reward() + var/mob/living/carbon/xenomorph/queen/xeno = owner + var/plasma_cost_jelly = 500 + if(!xeno.check_state()) + return + if(!xeno.check_plasma(plasma_cost_jelly)) + return + if(give_jelly_award(xeno.hive)) + xeno.use_plasma(plasma_cost_jelly) + return +/datum/action/xeno_action/onclick/manage_hive/use_ability(atom/Atom) + var/mob/living/carbon/xenomorph/queen/queenbanish = owner + plasma_cost = 0 -/datum/action/xeno_action/onclick/banish/use_ability(atom/Atom) + var/choice = tgui_input_list(queenbanish, "Manage The Hive", "Hive Management", list("Banish (500)", "Re-Admit (100)", "De-evolve (500)", "Reward Jelly (500)", "Exchange larva for evolution (100)",), theme="hive_status") + switch(choice) + if("Banish (500)") + banish() + if("Re-Admit (100)") + readmit() + if("De-evolve (500)") + de_evolve_other() + if("Reward Jelly (500)") + give_jelly_reward(queenbanish.hive) + if("Exchange larva for evolution (100)") + give_evo_points() + + +/datum/action/xeno_action/onclick/manage_hive/proc/banish() var/mob/living/carbon/xenomorph/queen/user_xeno = owner + var/plasma_cost_banish = 500 if(!user_xeno.check_state()) return - if(!user_xeno.check_plasma(plasma_cost)) + if(!user_xeno.check_plasma(plasma_cost_banish)) return var/choice = tgui_input_list(user_xeno, "Choose a xenomorph to banish:", "Banish", user_xeno.hive.totalXenos, theme="hive_status") @@ -399,7 +435,7 @@ to_chat(user_xeno, SPAN_XENOWARNING("You must provide a reason for banishing [target_xeno].")) return - if(!user_xeno.check_state() || !check_and_use_plasma_owner(plasma_cost) || target_xeno.health < 0) + if(!user_xeno.check_state() || !check_and_use_plasma_owner(plasma_cost_banish) || target_xeno.health < 0) return // Let everyone know they were banished @@ -413,20 +449,21 @@ addtimer(CALLBACK(src, PROC_REF(remove_banish), user_xeno.hive, target_xeno.name), 30 MINUTES) message_admins("[key_name_admin(user_xeno)] has banished [key_name_admin(target_xeno)]. Reason: [reason]") - return ..() + return -/datum/action/xeno_action/onclick/banish/proc/remove_banish(datum/hive_status/hive, name) +/datum/action/xeno_action/proc/remove_banish(datum/hive_status/hive, name) hive.banished_ckeys.Remove(name) // Readmission = un-banish -/datum/action/xeno_action/onclick/readmit/use_ability(atom/Atom) +/datum/action/xeno_action/onclick/manage_hive/proc/readmit() var/mob/living/carbon/xenomorph/queen/user_xeno = owner + var/plasma_cost_readmit = 100 if(!user_xeno.check_state()) return - if(!user_xeno.check_plasma(plasma_cost)) + if(!user_xeno.check_plasma(plasma_cost_readmit)) return var/choice = tgui_input_list(user_xeno, "Choose a xenomorph to readmit:", "Re-admit", user_xeno.hive.banished_ckeys, theme="hive_status") @@ -470,7 +507,7 @@ target_xeno.lock_evolve = FALSE user_xeno.hive.banished_ckeys.Remove(banished_name) - return ..() + return /datum/action/xeno_action/onclick/eye name = "Enter Eye Form" diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm index 5f8853a066a7..daad0362e91e 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm @@ -340,7 +340,7 @@ // Negative stat effects if (debilitate) - carbon.dazed += daze_amount + carbon.AdjustDaze(daze_amount) apply_cooldown() return ..() @@ -366,9 +366,9 @@ if (behavior.rage == 0) to_chat(xeno, SPAN_XENODANGER("We cannot eviscerate when we have 0 rage!")) return - damage = damage_at_rage_levels[Clamp(behavior.rage, 1, behavior.max_rage)] - range = range_at_rage_levels[Clamp(behavior.rage, 1, behavior.max_rage)] - windup_reduction = windup_reduction_at_rage_levels[Clamp(behavior.rage, 1, behavior.max_rage)] + damage = damage_at_rage_levels[clamp(behavior.rage, 1, behavior.max_rage)] + range = range_at_rage_levels[clamp(behavior.rage, 1, behavior.max_rage)] + windup_reduction = windup_reduction_at_rage_levels[clamp(behavior.rage, 1, behavior.max_rage)] behavior.decrement_rage(behavior.rage) apply_cooldown() @@ -420,7 +420,7 @@ // This is the heal if(!xeno.on_fire) - xeno.gain_health(Clamp(valid_count * lifesteal_per_marine, 0, max_lifesteal)) + xeno.gain_health(clamp(valid_count * lifesteal_per_marine, 0, max_lifesteal)) REMOVE_TRAIT(xeno, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Eviscerate")) xeno.anchored = FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm b/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm index 0ed15debb963..8ed720c7ed91 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm @@ -71,7 +71,7 @@ if(!owner) return FALSE var/mob/living/carbon/xenomorph/X = owner - if(X && !X.is_mob_incapacitated() && !X.dazed && X.body_position == STANDING_UP && !X.buckled && X.plasma_stored >= plasma_cost) + if(X && !X.is_mob_incapacitated() && !HAS_TRAIT(X, TRAIT_DAZED) && X.body_position == STANDING_UP && !X.buckled && X.plasma_stored >= plasma_cost) return TRUE /datum/action/xeno_action/give_to(mob/living/L) @@ -231,7 +231,7 @@ if(!cooldown_to_apply) return - cooldown_to_apply = cooldown_to_apply * (1 - Clamp(X.cooldown_reduction_percentage, 0, 0.5)) + cooldown_to_apply = cooldown_to_apply * (1 - clamp(X.cooldown_reduction_percentage, 0, 0.5)) // Add a unique timer cooldown_timer_id = addtimer(CALLBACK(src, PROC_REF(on_cooldown_end)), cooldown_to_apply, TIMER_UNIQUE|TIMER_STOPPABLE) @@ -253,7 +253,7 @@ var/mob/living/carbon/xenomorph/X = owner // Note: no check to see if we're already on CD. we just flat override whatever's there - cooldown_duration = cooldown_duration * (1 - Clamp(X.cooldown_reduction_percentage, 0, 0.5)) + cooldown_duration = cooldown_duration * (1 - clamp(X.cooldown_reduction_percentage, 0, 0.5)) cooldown_timer_id = addtimer(CALLBACK(src, PROC_REF(on_cooldown_end)), cooldown_duration, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_STOPPABLE) current_cooldown_duration = cooldown_duration current_cooldown_start_time = world.time diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm index 25212718527b..32531e5325c6 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm @@ -158,6 +158,9 @@ /mob/living/carbon/xenomorph/facehugger/proc/handle_hug(mob/living/carbon/human/human) var/obj/item/clothing/mask/facehugger/hugger = new /obj/item/clothing/mask/facehugger(loc, hivenumber) var/did_hug = hugger.attach(human, TRUE, 1, src) + if(!did_hug) + qdel(hugger) + return if(client) client.player_data?.adjust_stat(PLAYER_STAT_FACEHUGS, STAT_CATEGORY_XENO, 1) qdel(src) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm index 6d082b327b48..f847c1a4ac8a 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm @@ -305,10 +305,8 @@ /datum/action/xeno_action/onclick/choose_resin/queen_macro, //fourth macro /datum/action/xeno_action/activable/secrete_resin/queen_macro, //fifth macro /datum/action/xeno_action/onclick/grow_ovipositor, - /datum/action/xeno_action/onclick/banish, - /datum/action/xeno_action/onclick/readmit, - /datum/action/xeno_action/onclick/queen_award, /datum/action/xeno_action/activable/info_marker/queen, + /datum/action/xeno_action/onclick/manage_hive, ) inherent_verbs = list( @@ -338,13 +336,12 @@ /datum/action/xeno_action/onclick/choose_resin/queen_macro, //fourth macro /datum/action/xeno_action/activable/secrete_resin/queen_macro, //fifth macro /datum/action/xeno_action/onclick/grow_ovipositor, - /datum/action/xeno_action/onclick/banish, - /datum/action/xeno_action/onclick/readmit, - /datum/action/xeno_action/onclick/queen_award, + /datum/action/xeno_action/onclick/manage_hive, /datum/action/xeno_action/activable/info_marker/queen, /datum/action/xeno_action/onclick/screech, //custom macro, Screech /datum/action/xeno_action/activable/xeno_spit/queen_macro, //third macro - /datum/action/xeno_action/onclick/shift_spits, //second macro + /datum/action/xeno_action/onclick/shift_spits, + //second macro ) // Abilities they get when they've successfully aged. @@ -839,19 +836,15 @@ /datum/action/xeno_action/onclick/psychic_whisper, /datum/action/xeno_action/onclick/psychic_radiance, /datum/action/xeno_action/onclick/choose_resin/queen_macro, //fourth macro - /datum/action/xeno_action/onclick/banish, - /datum/action/xeno_action/onclick/readmit, - /datum/action/xeno_action/onclick/queen_award, + /datum/action/xeno_action/onclick/manage_hive, /datum/action/xeno_action/activable/info_marker/queen, // Screech is typically new for this list, but its possible they never ovi and it then is forced here: /datum/action/xeno_action/onclick/screech, //custom macro, Screech // These are new and their arrangement matters: /datum/action/xeno_action/onclick/remove_eggsac, - /datum/action/xeno_action/onclick/give_evo_points, /datum/action/xeno_action/onclick/set_xeno_lead, /datum/action/xeno_action/activable/queen_heal, //first macro /datum/action/xeno_action/activable/queen_give_plasma, //second macro - /datum/action/xeno_action/onclick/deevolve, /datum/action/xeno_action/onclick/queen_order, /datum/action/xeno_action/activable/expand_weeds, //third macro /datum/action/xeno_action/activable/secrete_resin/remote/queen, //fifth macro diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm index 04996af8f8db..b19978a33766 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm @@ -161,7 +161,7 @@ emote_cooldown = world.time + 5 SECONDS addtimer(CALLBACK(src, PROC_REF(lifesteal_lock)), lifesteal_lock_duration/2) - bound_xeno.gain_health(Clamp(final_lifesteal / 100 * (bound_xeno.maxHealth - bound_xeno.health), 20, 40)) + bound_xeno.gain_health(clamp(final_lifesteal / 100 * (bound_xeno.maxHealth - bound_xeno.health), 20, 40)) /datum/behavior_delegate/warrior_base/proc/lifesteal_lock() bound_xeno.remove_filter("empower_rage") diff --git a/code/modules/mob/living/carbon/xenomorph/egg_item.dm b/code/modules/mob/living/carbon/xenomorph/egg_item.dm index 6f00ae1798e9..1bc41b881129 100644 --- a/code/modules/mob/living/carbon/xenomorph/egg_item.dm +++ b/code/modules/mob/living/carbon/xenomorph/egg_item.dm @@ -113,7 +113,7 @@ to_chat(user, SPAN_XENOWARNING("[src] can only be planted on [lowertext(hive.prefix)]hive weeds.")) return - if(istype(get_area(T), /area/vehicle)) + if(istype(get_area(T), /area/interior)) to_chat(user, SPAN_XENOWARNING("[src] cannot be planted inside a vehicle.")) return diff --git a/code/modules/mob/living/carbon/xenomorph/hive_status.dm b/code/modules/mob/living/carbon/xenomorph/hive_status.dm index 3c8eb51a8155..63aea4007482 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_status.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_status.dm @@ -68,6 +68,10 @@ var/hardcore = FALSE /// Set to false if you want to prevent getting burrowed larva from latejoin marines var/latejoin_burrowed = TRUE + /// If hit limit of larva from pylons + var/hit_larva_pylon_limit = FALSE + + var/see_humans_on_tacmap = FALSE var/list/hive_inherant_traits @@ -733,7 +737,7 @@ if(is_mainship_level(turf?.z)) shipside_humans_weighted_count += GLOB.RoleAuthority.calculate_role_weight(job) hijack_burrowed_surge = TRUE - hijack_burrowed_left = max(n_ceil(shipside_humans_weighted_count * 0.5) - xenos_count, 5) + hijack_burrowed_left = max(Ceiling(shipside_humans_weighted_count * 0.5) - xenos_count, 5) hivecore_cooldown = FALSE xeno_message(SPAN_XENOBOLDNOTICE("The weeds have recovered! A new hive core can be built!"),3,hivenumber) @@ -775,7 +779,12 @@ spawning_area = pick(totalXenos) // FUCK IT JUST GO ANYWHERE var/list/turf_list for(var/turf/open/open_turf in orange(3, spawning_area)) + if(istype(open_turf, /turf/open/space)) + continue LAZYADD(turf_list, open_turf) + // just on the off-chance + if(!LAZYLEN(turf_list)) + return FALSE var/turf/open/spawning_turf = pick(turf_list) var/mob/living/carbon/xenomorph/larva/new_xeno = spawn_hivenumber_larva(spawning_turf, hivenumber) @@ -933,6 +942,30 @@ return TRUE +// Get amount of real xenos, don't count lessers/huggers +/datum/hive_status/proc/get_real_total_xeno_count() + var/count = 0 + for(var/mob/living/carbon/xenomorph/xeno as anything in totalXenos) + if(xeno.counts_for_slots) + count++ + return count + +// Checks if we hit larva limit +/datum/hive_status/proc/check_if_hit_larva_from_pylon_limit() + var/groundside_humans_weighted_count = 0 + for(var/mob/living/carbon/human/current_human as anything in GLOB.alive_human_list) + if(!(isspecieshuman(current_human) || isspeciessynth(current_human))) + continue + var/datum/job/job = GLOB.RoleAuthority.roles_for_mode[current_human.job] + if(!job) + continue + var/turf/turf = get_turf(current_human) + if(is_ground_level(turf?.z)) + groundside_humans_weighted_count += GLOB.RoleAuthority.calculate_role_weight(job) + hit_larva_pylon_limit = (get_real_total_xeno_count() + stored_larva) > (groundside_humans_weighted_count * ENDGAME_LARVA_CAP_MULTIPLIER) + hive_ui.update_pylon_status() + return hit_larva_pylon_limit + ///Called by /obj/item/alien_embryo when a host is bursting to determine extra larva per burst /datum/hive_status/proc/increase_larva_after_burst() var/extra_per_burst = CONFIG_GET(number/extra_larva_per_burst) @@ -1230,7 +1263,6 @@ if(target_hive.allies[name]) //autobreak alliance on betrayal target_hive.change_stance(name, FALSE) - /datum/hive_status/corrupted/change_stance(faction, should_ally) . = ..() if(allies[faction]) @@ -1283,6 +1315,10 @@ xeno_message(SPAN_XENOANNOUNCE("You sense that [english_list(defectors)] turned their backs against their sisters and the Queen in favor of their slavemasters!"), 3, hivenumber) defectors.Cut() +/datum/hive_status/proc/override_evilution(evil, override) + if(SSxevolution) + SSxevolution.override_power(hivenumber, evil, override) + //Xeno Resin Mark Shit, the very best place for it too :0) //Defines at the bottom of this list here will show up at the top in the mark menu /datum/xeno_mark_define diff --git a/code/modules/mob/living/carbon/xenomorph/hive_status_ui.dm b/code/modules/mob/living/carbon/xenomorph/hive_status_ui.dm index 4e71b9a2202f..17514a31e502 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_status_ui.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_status_ui.dm @@ -11,6 +11,7 @@ var/hive_location var/burrowed_larva var/evilution_level + var/pylon_status var/data_initialized = FALSE @@ -104,6 +105,7 @@ update_xeno_vitals() update_xeno_keys(FALSE) update_xeno_info(FALSE) + update_pylon_status(FALSE) if(send_update) SStgui.update_uis(src) @@ -113,8 +115,19 @@ data_initialized = TRUE update_all_xeno_data(FALSE) update_burrowed_larva(FALSE) + update_pylon_status(FALSE) SStgui.update_uis(src) +/datum/hive_status_ui/proc/update_pylon_status(send_update = TRUE) + if(assoc_hive.get_structure_count(XENO_STRUCTURE_PYLON) < 1) + pylon_status = "" + else if(assoc_hive.hit_larva_pylon_limit) + pylon_status = "The hive's power has surpassed what the pylons can provide." + else + pylon_status = "Pylons are strengthening our numbers!" + if(send_update) + SStgui.update_uis(src) + /datum/hive_status_ui/ui_state(mob/user) return GLOB.hive_state[assoc_hive.internal_faction] @@ -141,6 +154,7 @@ .["hive_location"] = hive_location .["burrowed_larva"] = burrowed_larva .["evilution_level"] = evilution_level + .["pylon_status"] = pylon_status var/mob/living/carbon/xenomorph/queen/Q = user .["is_in_ovi"] = istype(Q) && Q.ovipositor diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm index 07efb5be2ff8..aab61776118d 100644 --- a/code/modules/mob/living/carbon/xenomorph/life.dm +++ b/code/modules/mob/living/carbon/xenomorph/life.dm @@ -267,11 +267,6 @@ else if(client && !client.adminobs) reset_view(null) - if(dazed) - overlay_fullscreen("dazed", /atom/movable/screen/fullscreen/impaired, 5) - else - clear_fullscreen("dazed") - if(!hud_used) return TRUE @@ -300,6 +295,13 @@ return TRUE +/mob/living/carbon/xenomorph/on_dazed_trait_gain(datum/source) + . = ..() + overlay_fullscreen("dazed", /atom/movable/screen/fullscreen/impaired, 5) +/mob/living/carbon/xenomorph/on_dazed_trait_loss(datum/source) + . = ..() + clear_fullscreen("dazed") + /*Heal 1/70th of your max health in brute per tick. 1 as a bonus, to help smaller pools. Additionally, recovery pheromones mutiply this base healing, up to 2.5 times faster at level 5 Modified via m, to multiply the number of wounds healed. @@ -556,6 +558,9 @@ Make sure their actual health updates immediately.*/ /mob/living/carbon/xenomorph/GetKnockOutDuration(amount) amount *= 2 / 3 return ..() +/mob/living/carbon/xenomorph/GetDazeDuration(amount) + amount *= 2 / 3 + return ..() /mob/living/carbon/xenomorph/proc/handle_interference() if(interference) @@ -566,11 +571,6 @@ Make sure their actual health updates immediately.*/ return interference -/mob/living/carbon/xenomorph/handle_dazed() - if(dazed) - adjust_effect(life_daze_reduction, DAZE, EFFECT_FLAG_LIFE) - return dazed - /mob/living/carbon/xenomorph/handle_slowed() if(slowed) adjust_effect(life_slow_reduction, SLOW, EFFECT_FLAG_LIFE) diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/warden.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/warden.dm index 1db9ad6550e2..4328058c8a8e 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/warden.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/warden.dm @@ -88,7 +88,7 @@ if (internal_hitpoints >= internal_hitpoints_max) return to_chat(bound_xeno, SPAN_XENODANGER("You feel your internal health reserves increase!")) - internal_hitpoints = Clamp(internal_hitpoints + amount, 0, internal_hitpoints_max) + internal_hitpoints = clamp(internal_hitpoints + amount, 0, internal_hitpoints_max) /datum/behavior_delegate/praetorian_warden/proc/remove_internal_hitpoints(amount) add_internal_hitpoints(-1*amount) diff --git a/code/modules/mob/living/carbon/xenomorph/say.dm b/code/modules/mob/living/carbon/xenomorph/say.dm index a2413b766505..5b8ce1ecd292 100644 --- a/code/modules/mob/living/carbon/xenomorph/say.dm +++ b/code/modules/mob/living/carbon/xenomorph/say.dm @@ -16,7 +16,7 @@ if(stat == UNCONSCIOUS) return //Unconscious? Nope. - if(dazed > 0) + if(HAS_TRAIT(src, TRAIT_DAZED)) to_chat(src, SPAN_WARNING("You are too dazed to talk.")) return diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index 65795634a27c..55995ec0b264 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -301,7 +301,7 @@ return var/health_threshold - health_threshold = max(CEILING((health * 4) / (maxHealth), 1), 0) //From 0 to 4, in 25% chunks + health_threshold = max(Ceiling((health * 4) / (maxHealth)), 0) //From 0 to 4, in 25% chunks if(health > HEALTH_THRESHOLD_DEAD) if(health_threshold > 3) wound_icon_holder.icon_state = "none" diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index 696eaa3f0120..a2b92007d97e 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -17,17 +17,22 @@ RegisterSignal(src, list(SIGNAL_ADDTRAIT(TRAIT_UNDENSE), SIGNAL_REMOVETRAIT(TRAIT_UNDENSE)), PROC_REF(undense_changed)) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_DAZED), PROC_REF(on_dazed_trait_gain)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_DAZED), PROC_REF(on_dazed_trait_loss)) + /// Called when [TRAIT_KNOCKEDOUT] is added to the mob. /mob/living/proc/on_knockedout_trait_gain(datum/source) SIGNAL_HANDLER if(stat < UNCONSCIOUS) set_stat(UNCONSCIOUS) + sound_environment_override = SOUND_ENVIRONMENT_PSYCHOTIC /// Called when [TRAIT_KNOCKEDOUT] is removed from the mob. /mob/living/proc/on_knockedout_trait_loss(datum/source) SIGNAL_HANDLER if(stat <= UNCONSCIOUS) update_stat() + sound_environment_override = SOUND_ENVIRONMENT_NONE /// Called when [TRAIT_IMMOBILIZED] is added to the mob. /mob/living/proc/on_immobilized_trait_gain(datum/source) @@ -87,6 +92,14 @@ //update_appearance() return +/// Called when [TRAIT_DAZED] is added to the mob. +/mob/living/proc/on_dazed_trait_gain(datum/source) + SIGNAL_HANDLER + +/// Called when [TRAIT_DAZED] is removed from the mob. +/mob/living/proc/on_dazed_trait_loss(datum/source) + SIGNAL_HANDLER + /// Called when [TRAIT_UNDENSE] is gained or lost /mob/living/proc/undense_changed(datum/source) SIGNAL_HANDLER diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c4c05b0c486f..d5190318715c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -398,7 +398,10 @@ /mob/living/launch_towards(datum/launch_metadata/LM) if(src) SEND_SIGNAL(src, COMSIG_MOB_MOVE_OR_LOOK, TRUE, dir, dir) - if(!istype(LM) || !LM.target || !src || buckled) + if(!istype(LM) || !LM.target || !src) + return + if(buckled) + LM.invoke_end_throw_callbacks(src) return if(pulling) stop_pulling() //being thrown breaks pulls. diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 4061f26f7bb1..b19afb0450cd 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -174,7 +174,7 @@ switch(fire_reagent.fire_type) if(FIRE_VARIANT_TYPE_B) max_stacks = 10 //Armor Shredding Greenfire caps at 1 resist/pat - fire_stacks = Clamp(fire_stacks + add_fire_stacks, min_stacks, max_stacks) + fire_stacks = clamp(fire_stacks + add_fire_stacks, min_stacks, max_stacks) if(on_fire && fire_stacks <= 0) ExtinguishMob() diff --git a/code/modules/mob/living/living_health_procs.dm b/code/modules/mob/living/living_health_procs.dm index 50e59622f132..819b3397c289 100644 --- a/code/modules/mob/living/living_health_procs.dm +++ b/code/modules/mob/living/living_health_procs.dm @@ -127,20 +127,56 @@ S = apply_status_effect(/datum/status_effect/incapacitating/stun, amount) return S +/* DAZE (Light incapacitation) */ +/// Overridable handler to adjust the numerical value of status effects. Expand as needed +/mob/living/proc/GetDazeDuration(amount) + return amount * GLOBAL_STATUS_MULTIPLIER + +/mob/living/proc/IsDaze() //If we're stunned + return has_status_effect(/datum/status_effect/incapacitating/dazed) + +/mob/living/proc/AmountDaze() //How many deciseconds remains + var/datum/status_effect/incapacitating/dazed/dazed = IsDaze() + if(dazed) + return dazed.get_duration_left() / GLOBAL_STATUS_MULTIPLIER + return 0 + /mob/living/proc/Daze(amount) - if(status_flags & CANDAZE) - dazed = max(max(dazed,amount),0) - return + if(!(status_flags & CANDAZE)) + return + amount = GetDazeDuration(amount) + var/datum/status_effect/incapacitating/dazed/dazed = IsDaze() + if(dazed) + dazed.update_duration(amount, increment = TRUE) + else if(amount > 0) + dazed = apply_status_effect(/datum/status_effect/incapacitating/dazed, amount) + return dazed -/mob/living/proc/SetDaze(amount) - if(status_flags & CANDAZE) - dazed = max(amount,0) - return +/mob/living/proc/SetDaze(amount, ignore_canstun = FALSE) //Sets remaining duration + if(!(status_flags & CANDAZE)) + return + amount = GetDazeDuration(amount) + var/datum/status_effect/incapacitating/dazed/dazed = IsDaze() + if(amount <= 0) + if(dazed) + qdel(dazed) + else + if(dazed) + dazed.update_duration(amount) + else + dazed = apply_status_effect(/datum/status_effect/incapacitating/dazed, amount) + return dazed -/mob/living/proc/AdjustDaze(amount) - if(status_flags & CANDAZE) - dazed = max(dazed + amount,0) - return +/mob/living/proc/AdjustDaze(amount, ignore_canstun = FALSE) //Adds to remaining duration + if(!(status_flags & CANDAZE)) + return + amount = GetStunDuration(amount) + var/datum/status_effect/incapacitating/dazed/dazed = IsDaze() + if(dazed) + dazed.adjust_duration(amount) + else if(amount > 0) + dazed = apply_status_effect(/datum/status_effect/incapacitating/dazed, amount) + return dazed /mob/living/proc/Slow(amount) if(status_flags & CANSLOW) @@ -323,7 +359,7 @@ switch(client.prefs?.pain_overlay_pref_level) if(PAIN_OVERLAY_IMPAIR) - overlay_fullscreen("eye_blur", /atom/movable/screen/fullscreen/impaired, CEILING(clamp(eye_blurry * 0.3, 1, 6), 1)) + overlay_fullscreen("eye_blur", /atom/movable/screen/fullscreen/impaired, Ceiling(clamp(eye_blurry * 0.3, 1, 6))) if(PAIN_OVERLAY_LEGACY) overlay_fullscreen("eye_blur", /atom/movable/screen/fullscreen/blurry) else // PAIN_OVERLAY_BLURRY @@ -378,11 +414,16 @@ /mob/living/proc/on_deafness_gain() to_chat(src, SPAN_WARNING("You notice you can't hear anything... you're deaf!")) + // We should apply deafness here instead of in handle_regular_status_updates SEND_SIGNAL(src, COMSIG_MOB_DEAFENED) /mob/living/proc/on_deafness_loss() to_chat(src, SPAN_WARNING("You start hearing things again!")) SEND_SIGNAL(src, COMSIG_MOB_REGAINED_HEARING) + // Consider moving this to a signal on soundOutput. This is a fallback as handle_regular_status_updates SHOULD do the job. + if(!ear_deaf && (client?.soundOutput?.status_flags & EAR_DEAF_MUTE)) + client.soundOutput.status_flags ^= EAR_DEAF_MUTE + client.soundOutput.apply_status() // heal ONE limb, organ gets randomly selected from damaged ones. /mob/living/proc/heal_limb_damage(brute, burn) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 6e8d0b8a2867..ba7bf741f6c0 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -110,7 +110,7 @@ wound_icon_holder.layer = layer + 0.01 wound_icon_holder.dir = dir - var/health_threshold = max(CEILING((health * 4) / (maxHealth), 1), 0) //From 0 to 4, in 25% chunks + var/health_threshold = max(Ceiling((health * 4) / (maxHealth)), 0) //From 0 to 4, in 25% chunks if(health > HEALTH_THRESHOLD_DEAD) if(health_threshold > 3) wound_icon_holder.icon_state = "none" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index a1ef9032e435..caf47b2824bb 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -323,7 +323,7 @@ explosion_throw(severity, direction) /mob/living/simple_animal/adjustBruteLoss(damage) - health = Clamp(health - damage, 0, maxHealth) + health = clamp(health - damage, 0, maxHealth) /mob/living/simple_animal/proc/SA_attackable(target_mob) if (isliving(target_mob)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5785197fdcd6..79cd0c521067 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -843,15 +843,9 @@ note dizziness decrements automatically in the mob's Life() proc. handle_silent() handle_drugged() handle_slurring() - handle_dazed() handle_slowed() handle_superslowed() -/mob/living/proc/handle_dazed() - if(dazed) - adjust_effect(-1, DAZE) - return dazed - /mob/living/proc/handle_slowed() if(slowed) adjust_effect(-1, SLOW) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 4f9244126c36..ce9e16e3747e 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -331,7 +331,7 @@ GLOBAL_LIST_INIT(limb_types_by_name, list( while(i < steps) animate(pixel_x = old_X + rand(-(strength), strength), pixel_y = old_y + rand(-(strength), strength), easing = JUMP_EASING, time = time_per_step) i++ - animate(pixel_x = old_X, pixel_y = old_y,time = Clamp(Floor(strength/PIXELS_PER_STRENGTH_VAL),2,4))//ease it back + animate(pixel_x = old_X, pixel_y = old_y,time = clamp(Floor(strength/PIXELS_PER_STRENGTH_VAL),2,4))//ease it back #undef PIXELS_PER_STRENGTH_VAL diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 7228a82ca4b4..9d108d36b461 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -177,7 +177,7 @@ if((mob.flags_atom & DIRLOCK) && mob.dir != direct) move_delay += MOVE_REDUCTION_DIRECTION_LOCKED // by Geeves - mob.cur_speed = Clamp(10/(move_delay + 0.5), MIN_SPEED, MAX_SPEED) + mob.cur_speed = clamp(10/(move_delay + 0.5), MIN_SPEED, MAX_SPEED) next_movement = world.time + MINIMAL_MOVEMENT_INTERVAL // We pre-set this now for the crawling case. If crawling do_after fails, next_movement would be set after the attempt end instead of now. //Try to crawl first diff --git a/code/modules/movement/launching/launching.dm b/code/modules/movement/launching/launching.dm index f72a7c773490..1c2952599987 100644 --- a/code/modules/movement/launching/launching.dm +++ b/code/modules/movement/launching/launching.dm @@ -54,6 +54,16 @@ matching_procs += collision_callbacks[path] return matching_procs +/// Invoke end_throw_callbacks on this metadata. +/// Takes argument of type /atom/movable +/datum/launch_metadata/proc/invoke_end_throw_callbacks(atom/movable/movable_atom) + if(length(end_throw_callbacks)) + for(var/datum/callback/callback as anything in end_throw_callbacks) + if(istype(callback, /datum/callback/dynamic)) + callback.Invoke(movable_atom) + else + callback.Invoke() + /atom/movable/var/datum/launch_metadata/launch_metadata = null //called when src is thrown into hit_atom @@ -164,7 +174,7 @@ animation_spin(5, 1 + min(1, LM.range/20)) var/old_speed = cur_speed - cur_speed = Clamp(LM.speed, MIN_SPEED, MAX_SPEED) // Sanity check, also ~1 sec delay between each launch move is not very reasonable + cur_speed = clamp(LM.speed, MIN_SPEED, MAX_SPEED) // Sanity check, also ~1 sec delay between each launch move is not very reasonable var/delay = 10/cur_speed - 0.5 // scales delay back to deciseconds for when sleep is called var/pass_flags = LM.pass_flags @@ -210,12 +220,7 @@ rebounding = FALSE cur_speed = old_speed remove_temp_pass_flags(pass_flags) - if(length(LM.end_throw_callbacks)) - for(var/datum/callback/CB as anything in LM.end_throw_callbacks) - if(istype(CB, /datum/callback/dynamic)) - CB.Invoke(src) - else - CB.Invoke() + LM.invoke_end_throw_callbacks(src) QDEL_NULL(launch_metadata) /atom/movable/proc/throw_random_direction(range, speed = 0, atom/thrower, spin, launch_type = NORMAL_LAUNCH, pass_flags = NO_FLAGS) diff --git a/code/modules/nightmare/nmnodes/mapload.dm b/code/modules/nightmare/nmnodes/mapload.dm index 6f75a46ed125..4b9ae2a3014b 100644 --- a/code/modules/nightmare/nmnodes/mapload.dm +++ b/code/modules/nightmare/nmnodes/mapload.dm @@ -100,7 +100,7 @@ if(!matcher.Find(filename)) continue #if !defined(UNIT_TESTS) - var/fprob = Clamp(text2num(matcher.group[1]) / 100, 0, 1) + var/fprob = clamp(text2num(matcher.group[1]) / 100, 0, 1) if(fprob < rand()) continue #endif // Remove the possibility of chance for testing diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm index 949104c5d673..f2d73c8ce0ec 100644 --- a/code/modules/organs/limbs.dm +++ b/code/modules/organs/limbs.dm @@ -1091,7 +1091,7 @@ treat_grafted var tells it to apply to grafted but unsalved wounds, for burn kit //if the chance was not set by what called fracture(), the endurance check is done instead if(bonebreak_probability == null) //bone break chance is based on endurance, 25% for survivors, erts, 100% for most everyone else. - bonebreak_probability = 100 / Clamp(owner.skills?.get_skill_level(SKILL_ENDURANCE)-1,1,100) //can't be zero + bonebreak_probability = 100 / clamp(owner.skills?.get_skill_level(SKILL_ENDURANCE)-1,1,100) //can't be zero var/list/bonebreak_data = list("bonebreak_probability" = bonebreak_probability) SEND_SIGNAL(owner, COMSIG_HUMAN_BONEBREAK_PROBABILITY, bonebreak_data) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 5c197dc50caa..27b1fa885133 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -255,7 +255,7 @@ t = replacetext(t, "\[upp\]", "") t = replacetext(t, "\[cmb\]", "") - t = "[t]" + t = "[t]" else // If it is a crayon, and he still tries to use these, make them empty! t = replacetext(t, "\[*\]", "") t = replacetext(t, "\[hr\]", "") @@ -269,7 +269,7 @@ t = replacetext(t, "\[cell\]", "") t = replacetext(t, "\[logo\]", "") - t = "[t]" + t = "[t]" // t = replacetext(t, "#", "") // Junk converted to nothing! @@ -358,8 +358,8 @@ iscrayon = 1 - // if paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr - if(src.loc != usr && !src.Adjacent(usr) && !((istype(src.loc, /obj/item/clipboard) || istype(src.loc, /obj/item/folder)) && (src.loc.loc == usr || src.loc.Adjacent(usr)) ) ) + // if paper is not in usr, then it must be near them, or in a clipboard, noticeboard or folder, which must be in or near usr + if(src.loc != usr && !src.Adjacent(usr) && !((istype(src.loc, /obj/item/clipboard) || istype(src.loc, /obj/structure/noticeboard) || istype(src.loc, /obj/item/folder)) && (src.loc.loc == usr || src.loc.Adjacent(usr)) ) ) return t = replacetext(t, "\n", "
") diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 594ad6b69dce..a3ba517c0cae 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -199,7 +199,7 @@ They're all essentially identical when it comes to getting the job done. var/severity = round(current_rounds / 50) //the more ammo inside, the faster and harder it cooks off if(severity > 0) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), loc, -1, ((severity > 4) ? 0 : -1), Clamp(severity, 0, 1), Clamp(severity, 0, 2), 1, 0, 0, flame_cause_data), max(5 - severity, 2)) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), loc, -1, ((severity > 4) ? 0 : -1), clamp(severity, 0, 1), clamp(severity, 0, 2), 1, 0, 0, flame_cause_data), max(5 - severity, 2)) if(!QDELETED(src)) qdel(src) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3a444e1ad1fc..d00b6cbe90c9 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -493,7 +493,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w unwield(user) pull_time = world.time + wield_delay - if(user.dazed) + if(HAS_TRAIT(user, TRAIT_DAZED)) pull_time += 3 guaranteed_delay_time = world.time + WEAPON_GUARANTEED_DELAY @@ -759,7 +759,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w slowdown = initial(slowdown) + aim_slowdown place_offhand(user, initial(name)) wield_time = world.time + wield_delay - if(user.dazed) + if(HAS_TRAIT(user, TRAIT_DAZED)) wield_time += 5 guaranteed_delay_time = world.time + WEAPON_GUARANTEED_DELAY //slower or faster wield delay depending on skill. diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index 0f3fde8f3c9b..e431dbab4dab 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -168,7 +168,8 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/proc/Detach(mob/user, obj/item/weapon/gun/detaching_gub) if(!istype(detaching_gub)) return //Guns only - detaching_gub.on_detach(user) + if(user) + detaching_gub.on_detach(user, src) if(flags_attach_features & ATTACH_ACTIVATION) activate_attachment(detaching_gub, null, TRUE) diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index d4e7d125094f..66e3a65f2f77 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -395,7 +395,7 @@ DEFINES in setup.dm, referenced here. playsound(user, 'sound/handling/attachment_add.ogg', 15, 1, 4) return TRUE -/obj/item/weapon/gun/proc/on_detach(obj/item/attachable/attachment) +/obj/item/weapon/gun/proc/on_detach(mob/user, obj/item/attachable/attachment) return /obj/item/weapon/gun/proc/update_attachables() //Updates everything. You generally don't need to use this. diff --git a/code/modules/projectiles/guns/flamer/flamer.dm b/code/modules/projectiles/guns/flamer/flamer.dm index 282edcab9fd6..b9582cf5adb2 100644 --- a/code/modules/projectiles/guns/flamer/flamer.dm +++ b/code/modules/projectiles/guns/flamer/flamer.dm @@ -205,12 +205,12 @@ var/flameshape = R.flameshape var/fire_type = R.fire_type - R.intensityfire = Clamp(R.intensityfire, current_mag.reagents.min_fire_int, current_mag.reagents.max_fire_int) - R.durationfire = Clamp(R.durationfire, current_mag.reagents.min_fire_dur, current_mag.reagents.max_fire_dur) - R.rangefire = Clamp(R.rangefire, current_mag.reagents.min_fire_rad, current_mag.reagents.max_fire_rad) + R.intensityfire = clamp(R.intensityfire, current_mag.reagents.min_fire_int, current_mag.reagents.max_fire_int) + R.durationfire = clamp(R.durationfire, current_mag.reagents.min_fire_dur, current_mag.reagents.max_fire_dur) + R.rangefire = clamp(R.rangefire, current_mag.reagents.min_fire_rad, current_mag.reagents.max_fire_rad) var/max_range = R.rangefire if (max_range < fuel_pressure) //Used for custom tanks, allows for higher ranges - max_range = Clamp(fuel_pressure, 0, current_mag.reagents.max_fire_rad) + max_range = clamp(fuel_pressure, 0, current_mag.reagents.max_fire_rad) if(R.rangefire == -1) max_range = current_mag.reagents.max_fire_rad diff --git a/code/modules/projectiles/magazines/flamer.dm b/code/modules/projectiles/magazines/flamer.dm index 787a0585640a..7fba325177c6 100644 --- a/code/modules/projectiles/magazines/flamer.dm +++ b/code/modules/projectiles/magazines/flamer.dm @@ -94,7 +94,7 @@ to_chat(user, SPAN_WARNING("This chemical is not potent enough to be used in a flamethrower!")) return - var/fuel_amt_to_remove = Clamp(to_add.volume, 0, max_rounds - reagents.get_reagent_amount(to_add.id)) + var/fuel_amt_to_remove = clamp(to_add.volume, 0, max_rounds - reagents.get_reagent_amount(to_add.id)) if(!fuel_amt_to_remove) if(!max_rounds) to_chat(user, SPAN_WARNING("[target] is empty!")) @@ -171,7 +171,7 @@ if(usr.get_active_hand() != src) return - var/set_pressure = Clamp(tgui_input_number(usr, "Change fuel pressure to: (max: [max_pressure])", "Fuel pressure", fuel_pressure, 10, 1), 1 ,max_pressure) + var/set_pressure = clamp(tgui_input_number(usr, "Change fuel pressure to: (max: [max_pressure])", "Fuel pressure", fuel_pressure, 10, 1), 1 ,max_pressure) if(!set_pressure) to_chat(usr, SPAN_WARNING("You can't find that setting on the regulator!")) else diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index ee9caa61d7a7..f87b86a20c1f 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -217,15 +217,15 @@ ammo.fire_bonus_projectiles(src) path = getline2(starting, target_turf) - p_x += Clamp((rand()-0.5)*scatter*3, -8, 8) - p_y += Clamp((rand()-0.5)*scatter*3, -8, 8) + p_x += clamp((rand()-0.5)*scatter*3, -8, 8) + p_y += clamp((rand()-0.5)*scatter*3, -8, 8) update_angle(starting, target_turf) src.speed = speed // Randomize speed by a small factor to help bullet animations look okay // Otherwise you get a s t r e a m of warping bullets in same positions src.speed *= (1 + (rand()-0.5) * 0.30) // 15.0% variance either way - src.speed = Clamp(src.speed, 0.1, 100) // Safety to avoid loop hazards + src.speed = clamp(src.speed, 0.1, 100) // Safety to avoid loop hazards // Also give it some headstart, flying it now ahead of tick var/delta_time = world.tick_lag * rand() * 0.4 @@ -237,8 +237,8 @@ SSprojectiles.queue_projectile(src) /obj/projectile/proc/update_angle(turf/source_turf, turf/aim_turf) - p_x = Clamp(p_x, -16, 16) - p_y = Clamp(p_y, -16, 16) + p_x = clamp(p_x, -16, 16) + p_y = clamp(p_y, -16, 16) if(process_start_turf != vis_source) vis_travelled = 0 @@ -274,9 +274,6 @@ return FALSE -//#define LERP(a, b, t) (a + (b - a) * CLAMP01(t)) -#define LERP_UNCLAMPED(a, b, t) (a + (b - a) * t) - /// Animates the projectile across the process'ed flight. /obj/projectile/proc/animate_flight(turf/start_turf, start_pixel_x, start_pixel_y, delta_time) //Get pixelspace coordinates of start and end of visual path @@ -301,8 +298,8 @@ var/vis_current = vis_travelled + speed * (time_carry * 0.1) //speed * (time_carry * 0.1) for remainder time movement, visually "catching up" to where it should be var/vis_interpolant = vis_current / vis_length - var/pixel_x_lerped = LERP_UNCLAMPED(pixel_x_source, pixel_x_target, vis_interpolant) - var/pixel_y_lerped = LERP_UNCLAMPED(pixel_y_source, pixel_y_target, vis_interpolant) + var/pixel_x_lerped = LERP(pixel_x_source, pixel_x_target, vis_interpolant) + var/pixel_y_lerped = LERP(pixel_y_source, pixel_y_target, vis_interpolant) //Convert pixelspace to pixel offset relative to current loc @@ -319,7 +316,7 @@ var/dist_current = distance_travelled + speed * (time_carry * 0.1) //speed * (time_carry * 0.1) for remainder time fade-in var/alpha_interpolant = dist_current - 1 //-1 so it transitions from transparent to opaque between dist 1-2 - var/alpha_new = LERP_UNCLAMPED(0, 255, alpha_interpolant) + var/alpha_new = LERP(0, 255, alpha_interpolant) //Animate the visuals from starting position to new position @@ -332,9 +329,6 @@ var/anim_time = delta_time * 0.1 animate(src, pixel_x = pixel_x_rel_new, pixel_y = pixel_y_rel_new, alpha = alpha_new, time = anim_time, flags = ANIMATION_END_NOW) -//#undef LERP -#undef LERP_UNCLAMPED - /// Flies the projectile forward one single turf /obj/projectile/proc/fly() SHOULD_NOT_SLEEP(TRUE) @@ -1208,8 +1202,8 @@ if(P.ammo.sound_bounce) playsound(src, P.ammo.sound_bounce, 50, 1) var/image/I = image('icons/obj/items/weapons/projectiles.dmi', src, P.ammo.ping, 10) - var/offset_x = Clamp(P.pixel_x + pixel_x_offset, -10, 10) - var/offset_y = Clamp(P.pixel_y + pixel_y_offset, -10, 10) + var/offset_x = clamp(P.pixel_x + pixel_x_offset, -10, 10) + var/offset_y = clamp(P.pixel_y + pixel_y_offset, -10, 10) I.pixel_x += round(rand(-4,4) + offset_x, 1) I.pixel_y += round(rand(-4,4) + offset_y, 1) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 4e3f3a91449d..c5650ad001a2 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) var/overdose_dam = 1//Handeled by heart damage var/spray_warning = FALSE //whether spraying that reagent creates an admin message. //var/list/viruses = list() - var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) + var/color = COLOR_BLACK //(does not support alpha channels - yet!) var/datum/weakref/last_source_mob // For explosions var/explosive = FALSE diff --git a/code/modules/reagents/chemistry_machinery/acid_harness.dm b/code/modules/reagents/chemistry_machinery/acid_harness.dm index 52a1a5f13bd7..b349b3224d1a 100644 --- a/code/modules/reagents/chemistry_machinery/acid_harness.dm +++ b/code/modules/reagents/chemistry_machinery/acid_harness.dm @@ -446,7 +446,7 @@ if(inject_conditions & ACID_SCAN_CONDITION_CONCUSSION && (HAS_TRAIT(src, TRAIT_KNOCKEDOUT) || HAS_TRAIT(src, TRAIT_FLOORED))) condition_scan |= ACID_SCAN_CONDITION_CONCUSSION - if(inject_conditions & ACID_SCAN_CONDITION_INTOXICATION && (user.dazed || user.slowed || user.confused || user.drowsyness || user.dizziness || user.druggy)) + if(inject_conditions & ACID_SCAN_CONDITION_INTOXICATION && (HAS_TRAIT(src, TRAIT_DAZED) || user.slowed || user.confused || user.drowsyness || user.dizziness || user.druggy)) condition_scan |= ACID_SCAN_CONDITION_INTOXICATION //Compare diff --git a/code/modules/reagents/chemistry_machinery/chem_master.dm b/code/modules/reagents/chemistry_machinery/chem_master.dm index 1e7e3bb08384..dc5206bb2df5 100644 --- a/code/modules/reagents/chemistry_machinery/chem_master.dm +++ b/code/modules/reagents/chemistry_machinery/chem_master.dm @@ -215,7 +215,7 @@ return if(href_list["createpill_multiple"]) - count = Clamp(tgui_input_number(user, "Select the number of pills to make. (max: [max_pill_count])", "Pills to make", pillamount, max_pill_count, 1), 0, max_pill_count) + count = clamp(tgui_input_number(user, "Select the number of pills to make. (max: [max_pill_count])", "Pills to make", pillamount, max_pill_count, 1), 0, max_pill_count) if(!count) return diff --git a/code/modules/reagents/chemistry_machinery/chem_simulator.dm b/code/modules/reagents/chemistry_machinery/chem_simulator.dm index 8dc34f208549..8a95e3f3b07e 100644 --- a/code/modules/reagents/chemistry_machinery/chem_simulator.dm +++ b/code/modules/reagents/chemistry_machinery/chem_simulator.dm @@ -443,7 +443,7 @@ for(var/datum/chem_property/P in creation_template) creation_cost += max(abs(P.value), 1) * P.level if(P.level > 5) // a penalty is added at each level above 5 (+1 at 6, +2 at 7, +4 at 8, +5 at 9, +7 at 10) - creation_cost += P.level - 6 + n_ceil((P.level - 5) / 2) + creation_cost += P.level - 6 + Ceiling((P.level - 5) / 2) creation_cost += ((new_od_level - 10) / 5) * 3 //3 cost for every 5 units above 10 for(var/rarity in creation_complexity) switch(rarity) diff --git a/code/modules/reagents/chemistry_properties/prop_neutral.dm b/code/modules/reagents/chemistry_properties/prop_neutral.dm index 3048b12ee296..e1e59b8b886c 100644 --- a/code/modules/reagents/chemistry_properties/prop_neutral.dm +++ b/code/modules/reagents/chemistry_properties/prop_neutral.dm @@ -29,7 +29,7 @@ return list(REAGENT_CANCEL = TRUE) var/effectiveness = 1 if(M.stat != DEAD) - effectiveness = Clamp(max(M.oxyloss / 10, (BLOOD_VOLUME_NORMAL - M.blood_volume) / BLOOD_VOLUME_NORMAL) * 0.1 * level, 0.1, 1) + effectiveness = clamp(max(M.oxyloss / 10, (BLOOD_VOLUME_NORMAL - M.blood_volume) / BLOOD_VOLUME_NORMAL) * 0.1 * level, 0.1, 1) return list(REAGENT_FORCE = TRUE, REAGENT_EFFECT = effectiveness) /datum/chem_property/neutral/excreting diff --git a/code/modules/reagents/chemistry_properties/prop_positive.dm b/code/modules/reagents/chemistry_properties/prop_positive.dm index 8bf7eadc5d77..a8a11fc299ad 100644 --- a/code/modules/reagents/chemistry_properties/prop_positive.dm +++ b/code/modules/reagents/chemistry_properties/prop_positive.dm @@ -647,7 +647,7 @@ return H.chem_effect_flags |= CHEM_EFFECT_RESIST_NEURO to_chat(M, SPAN_NOTICE("Your skull feels incredibly thick.")) - M.dazed = 0 + M.SetDaze(0) /datum/chem_property/positive/neuroshielding/process_overdose(mob/living/M, potency = 1, delta_time) if(!ishuman(M)) diff --git a/code/modules/reagents/chemistry_reagents/alcohol.dm b/code/modules/reagents/chemistry_reagents/alcohol.dm index 08beb42fa410..b5db671b626c 100644 --- a/code/modules/reagents/chemistry_reagents/alcohol.dm +++ b/code/modules/reagents/chemistry_reagents/alcohol.dm @@ -234,7 +234,7 @@ name = "Poison Wine" id = "pwine" description = "Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors!" - color = "#000000" // rgb: 0, 0, 0 SHOCKER + color = COLOR_BLACK properties = list(PROPERTY_ALCOHOLIC = 1, PROPERTY_FUELING = 3, PROPERTY_OXIDIZING = 3, PROPERTY_FLOWING = 2) boozepwr = 1 @@ -559,7 +559,7 @@ name = "Snow White" id = "snowwhite" description = "A cold refreshment" - color = "#FFFFFF" // rgb: 255, 255, 255 + color = COLOR_WHITE properties = list(PROPERTY_ALCOHOLIC = 1.5, PROPERTY_FUELING = 3, PROPERTY_OXIDIZING = 3, PROPERTY_FLOWING = 2) boozepwr = 1.5 diff --git a/code/modules/reagents/chemistry_reagents/drink.dm b/code/modules/reagents/chemistry_reagents/drink.dm index 3a49429d664e..9577f61a3dcd 100644 --- a/code/modules/reagents/chemistry_reagents/drink.dm +++ b/code/modules/reagents/chemistry_reagents/drink.dm @@ -222,7 +222,7 @@ name = "Cherry Souto" id = "souto_cherry" description = "A cherry flavored soda that's canned in Havanna" - color = "#800000" + color = COLOR_MAROON /datum/reagent/drink/souto/lime name = "Lime Souto" @@ -494,7 +494,7 @@ name = "Lemonade" description = "Oh the nostalgia..." id = "lemonade" - color = "#FFFF00" // rgb: 255, 255, 0 + color = COLOR_YELLOW //*****************************************************************************************************/ //***************************************Remove When Safe**********************************************/ diff --git a/code/modules/reagents/chemistry_reagents/food.dm b/code/modules/reagents/chemistry_reagents/food.dm index 0ec3a2250260..2ee2a05bef32 100644 --- a/code/modules/reagents/chemistry_reagents/food.dm +++ b/code/modules/reagents/chemistry_reagents/food.dm @@ -184,7 +184,7 @@ id = "sodiumchloride" description = "A salt made of sodium chloride. Commonly used to season food." reagent_state = SOLID - color = "#FFFFFF" // rgb: 255,255,255 + color = COLOR_WHITE chemfiresupp = TRUE intensitymod = 0.1 burncolor = "#ffff00" @@ -227,7 +227,7 @@ id = "sprinkles" description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FF00FF" // rgb: 255, 0, 255 + color = COLOR_MAGENTA properties = list(PROPERTY_NUTRITIOUS = 2) flags = REAGENT_NO_GENERATION @@ -288,7 +288,7 @@ description = "The most widely consumed staple food on Earth. Rice is the most important grain with regard to human nutrition and caloric intake." reagent_state = SOLID nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FFFFFF" // rgb: 0, 0, 0 + color = COLOR_WHITE properties = list(PROPERTY_NUTRITIOUS = 2) /datum/reagent/cherryjelly @@ -304,6 +304,6 @@ name = "Honey" id = "honey" description = "Honey is a natural sweet, viscous food substance composed of mainly fructose and glucose." - color = "#FFFF00" + color = COLOR_YELLOW chemclass = CHEM_CLASS_RARE flags = REAGENT_NO_GENERATION diff --git a/code/modules/reagents/chemistry_reagents/other.dm b/code/modules/reagents/chemistry_reagents/other.dm index e334c8741b5a..4812e128045e 100644 --- a/code/modules/reagents/chemistry_reagents/other.dm +++ b/code/modules/reagents/chemistry_reagents/other.dm @@ -185,7 +185,7 @@ id = "oxygen" description = "Chemical element of atomic number 8. It is an oxidizing agent that forms oxides with most elements and many other compounds. Dioxygen is used in cellular respiration and is nessesary to sustain organic life." reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY chemfiresupp = TRUE properties = list(PROPERTY_OXIDIZING = 2) intensitymod = 0.75 @@ -212,7 +212,7 @@ id = "nitrogen" description = "Chemical element of atomic number 7. Liquid nitrogen is commonly used in cryogenics, with its melting point of 63.15 kelvin. Nitrogen is a component of many explosive compounds and fertilizers." reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY chemclass = CHEM_CLASS_BASIC custom_metabolism = AMOUNT_PER_TIME(1, 200 SECONDS) @@ -223,7 +223,7 @@ id = "hydrogen" description = "Chemical element of atomic number 1. Is the most abundant chemical element in the Universe. Liquid hydrogen was used as one of the first fuel sources for space travel. Very combustible and is used in many chemical reactions." reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY chemfiresupp = TRUE durationmod = -0.5 radiusmod = 0.2 @@ -295,7 +295,7 @@ id = "chlorine" description = "Chemical element of atomic number 17. High concentrations of elemental chlorine is highly reactive and poisonous for all living organisms. Chlorine gas has been used as a chemical warfare agent. Industrially used in the production of disinfectants, medicines, plastics and purification of water." reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY overdose = REAGENTS_OVERDOSE overdose_critical = REAGENTS_OVERDOSE_CRITICAL chemclass = CHEM_CLASS_BASIC @@ -306,7 +306,7 @@ id = "fluorine" description = "Chemical element of atomic number 9. It is a very reactive and highly toxic pale yellow gas at standard conditions. Mostly used for medical and dental purposes." reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY overdose = REAGENTS_OVERDOSE overdose_critical = REAGENTS_OVERDOSE_CRITICAL chemclass = CHEM_CLASS_BASIC @@ -317,7 +317,7 @@ id = "sodium" description = "Chemical element of atomic number 11. Pure it is a soft and very reactive metal. Many salt compounds contain sodium, such as sodium chloride and sodium bicarbonate. There are more uses for sodium as a salt than as a metal." reagent_state = SOLID - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY chemclass = CHEM_CLASS_BASIC custom_metabolism = AMOUNT_PER_TIME(1, 200 SECONDS) @@ -343,7 +343,7 @@ id = "lithium" description = "Chemical element of atomic number 3. Is a soft alkali metal commonly used in the production of batteries. Highly reactive and flammable. Used as an antidepressant and for treating bipolar disorder." reagent_state = SOLID - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY chemfiresupp = TRUE intensitymod = 0.15 burncolor = "#ff356f" @@ -358,7 +358,7 @@ id = "sugar" description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste. The most simple form of sugar, glucose, is the only form of nutriment for red blood cells as they have no mitocondria. Sugar can therefore be used to improve blood regeneration as a nutriment, although ineffective." reagent_state = SOLID - color = "#FFFFFF" // rgb: 255, 255, 255 + color = COLOR_WHITE chemclass = CHEM_CLASS_BASIC properties = list(PROPERTY_NUTRITIOUS = 1) flags = REAGENT_TYPE_MEDICAL @@ -368,7 +368,7 @@ id = "glycerol" description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity, often used in medicines and beverages. Used in the production of plastic, nitroglycerin and other explosives." reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY chemclass = CHEM_CLASS_RARE custom_metabolism = AMOUNT_PER_TIME(1, 200 SECONDS) @@ -708,8 +708,8 @@ id = "napalmgel" description = "Unlike its liquid contemporaries, this gelled variant of napalm is easily extinguished, but shoots far and lingers on the ground in a viscous mess, while reacting with inorganic materials to ignite them." flameshape = FLAMESHAPE_LINE - color = "#00ff00" - burncolor = "#00ff00" + color = COLOR_GREEN + burncolor = COLOR_GREEN burn_sprite = "green" properties = list( PROPERTY_INTENSITY = BURN_LEVEL_TIER_2, @@ -738,8 +738,8 @@ id = "napalmb" description = "A special variant of napalm that's unable to cling well to anything, but disperses over a wide area while burning slowly. The composition reacts with inorganic materials to ignite them, causing severe damage." flameshape = FLAMESHAPE_TRIANGLE - color = "#00ff00" - burncolor = "#00ff00" + color = COLOR_GREEN + burncolor = COLOR_GREEN burn_sprite = "green" properties = list( PROPERTY_INTENSITY = BURN_LEVEL_TIER_2, @@ -752,8 +752,8 @@ name = "Napalm E" id = "napalme" description = "A sticky combustible liquid chemical that penetrates the best fire retardants." - color = "#800080" - burncolor = "#800080" + color = COLOR_PURPLE + burncolor = COLOR_PURPLE burn_sprite = "dynamic" properties = list( PROPERTY_INTENSITY = BURN_LEVEL_TIER_2, @@ -795,7 +795,7 @@ id = "chlorine trifluoride" description = "A highly reactive interhalogen compound capaple of self ignition. A very strong oxidizer and is extremely reactive with most organic and inorganic materials." reagent_state = LIQUID - color = "#00FFFF" + color = COLOR_CYAN custom_metabolism = 100 chemfiresupp = TRUE burncolor = "#ff9300" @@ -862,7 +862,7 @@ id = "nitroglycerin" description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol. Despite being a highly volatile material, it is used for many medical purposes." reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY custom_metabolism = AMOUNT_PER_TIME(1, 200 SECONDS) explosive = TRUE power = 1 diff --git a/code/modules/reagents/chemistry_reagents/toxin.dm b/code/modules/reagents/chemistry_reagents/toxin.dm index 445918ef284d..53ccb53f1748 100644 --- a/code/modules/reagents/chemistry_reagents/toxin.dm +++ b/code/modules/reagents/chemistry_reagents/toxin.dm @@ -205,10 +205,10 @@ id = "potassium_chloride" description = "A bitter tasting salt that can be used as a spice, but can cause cardiac arrest in larger quantities. It has for this reason been used as a component in lethal injections for many years." reagent_state = SOLID - color = "#FFFFFF" // rgb: 255,255,255 + color = COLOR_WHITE chemfiresupp = TRUE intensitymod = 0.1 - burncolor = "#800080" + burncolor = COLOR_PURPLE burncolormod = 5 overdose = 30 chemclass = CHEM_CLASS_UNCOMMON @@ -219,7 +219,7 @@ id = "potassium_chlorophoride" description = "A specific chemical based on Potassium Chloride used to stop the heart for surgery. Causes instant cardiac arrest. Not safe to eat!" reagent_state = SOLID - color = "#FFFFFF" // rgb: 255,255,255 + color = COLOR_WHITE overdose = 20 chemclass = CHEM_CLASS_UNCOMMON properties = list(PROPERTY_RELAXING = 8, PROPERTY_HYPOXEMIC = 4, PROPERTY_TOXIC = 2) @@ -261,7 +261,7 @@ name = "Formaldehyde" id = "formaldehyde" description = "Formaldehyde is a toxic organic gas that is mostly used in making resins, polymers and explosives. It is known to be a natural carcinogen." - color = "#808080" // rgb: 128, 128, 128 + color = COLOR_GRAY reagent_state = GAS chemclass = CHEM_CLASS_UNCOMMON properties = list(PROPERTY_TOXIC = 1, PROPERTY_CARCINOGENIC = 1) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 38286cf1df6b..e5770d2f8437 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1371,7 +1371,7 @@ //Expel the contents of the holder object, then delete it. Called when the holder exits the outlet /obj/structure/disposaloutlet/proc/expel(obj/structure/disposalholder/H) - flick("outlet-open", src) + flick("[icon_state]-open", src) playsound(src, 'sound/machines/warning-buzzer.ogg', 25, 0) sleep(20) //Wait until correct animation frame playsound(src, 'sound/machines/hiss.ogg', 25, 0) diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index 86c0c86abfc2..ba6683321f9c 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -275,7 +275,6 @@ return /obj/structure/machinery/computer/shuttle/dropship/flight/proc/hijack(mob/user, force = FALSE) - // select crash location var/turf/source_turf = get_turf(src) var/obj/docking_port/mobile/marine_dropship/dropship = SSshuttle.getShuttle(shuttleId) @@ -307,7 +306,14 @@ hivenumber = xeno.hivenumber xeno_message(SPAN_XENOANNOUNCE("The Queen has commanded the metal bird to depart for the metal hive in the sky! Rejoice!"), 3, hivenumber) xeno_message(SPAN_XENOANNOUNCE("The hive swells with power! You will now steadily gain pooled larva over time."), 2, hivenumber) - GLOB.hive_datum[hivenumber].abandon_on_hijack() + var/datum/hive_status/hive = GLOB.hive_datum[hivenumber] + hive.abandon_on_hijack() + var/original_evilution = hive.evolution_bonus + hive.override_evilution(XENO_HIJACK_EVILUTION_BUFF, TRUE) + if(hive.living_xeno_queen) + var/datum/action/xeno_action/onclick/grow_ovipositor/ovi_ability = get_xeno_action_by_type(hive.living_xeno_queen, /datum/action/xeno_action/onclick/grow_ovipositor) + ovi_ability.reduce_cooldown(ovi_ability.xeno_cooldown) + addtimer(CALLBACK(hive, TYPE_PROC_REF(/datum/hive_status, override_evilution), original_evilution, FALSE), XENO_HIJACK_EVILUTION_TIME) // Notify the yautja too so they stop the hunt message_all_yautja("The serpent Queen has commanded the landing shuttle to depart.") @@ -461,7 +467,7 @@ if("set-automate") var/almayer_lz = params["hangar_id"] var/ground_lz = params["ground_id"] - var/delay = Clamp(params["delay"] SECONDS, DROPSHIP_MIN_AUTO_DELAY, DROPSHIP_MAX_AUTO_DELAY) + var/delay = clamp(params["delay"] SECONDS, DROPSHIP_MIN_AUTO_DELAY, DROPSHIP_MAX_AUTO_DELAY) // TODO verify if(almayer_lz == ground_lz) diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index b9a9f27a28ae..8be96f27404a 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -42,11 +42,11 @@ var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) - TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.") + TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.") api_datum = /datum/tgs_api/latest if(!api_datum) - TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") + TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") return TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") @@ -107,6 +107,13 @@ if(api) return api.ApiVersion() +/world/TgsEngine() +#ifdef OPENDREAM + return TGS_ENGINE_TYPE_OPENDREAM +#else + return TGS_ENGINE_TYPE_BYOND +#endif + /world/TgsInstanceName() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 83420d130a74..616263098fd3 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.7.0" +"5.8.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index 48969c0c7d56..1c7d67d20cdf 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -8,7 +8,6 @@ #define DMAPI5_TOPIC_REQUEST_LIMIT 65528 #define DMAPI5_TOPIC_RESPONSE_LIMIT 65529 -#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0 #define DMAPI5_BRIDGE_COMMAND_STARTUP 1 #define DMAPI5_BRIDGE_COMMAND_PRIME 2 #define DMAPI5_BRIDGE_COMMAND_REBOOT 3 @@ -18,6 +17,7 @@ #define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" #define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" +#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort" #define DMAPI5_CHUNK "chunk" #define DMAPI5_CHUNK_PAYLOAD "payload" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 7226f29bba60..a5c064a8eaf1 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -8,8 +8,12 @@ var/reboot_mode = TGS_REBOOT_MODE_NORMAL + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call var/list/intercepted_message_queue + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/offline_message_queue + var/list/custom_commands var/list/test_merges @@ -17,6 +21,8 @@ var/list/chat_channels var/initialized = FALSE + var/initial_bridge_request_received = FALSE + var/datum/tgs_version/interop_version var/chunked_requests = 0 var/list/chunked_topics = list() @@ -25,7 +31,8 @@ /datum/tgs_api/v5/New() . = ..() - TGS_DEBUG_LOG("V5 API created") + interop_version = version + TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() return new /datum/tgs_version( @@ -38,8 +45,8 @@ access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER] var/datum/tgs_version/api_version = ApiVersion() - version = null - var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands())) + version = null // we want this to be the TGS version, not the interop version + var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) TGS_ERROR_LOG("Failed initial bridge request!") return FALSE @@ -53,7 +60,8 @@ TGS_INFO_LOG("DMAPI validation, exiting...") TerminateWorld() - version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) + initial_bridge_request_received = TRUE + version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY] instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] @@ -102,10 +110,17 @@ initialized = TRUE return TRUE +/datum/tgs_api/v5/proc/GetTopicPort() +#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS) + return "[world.opendream_topic_port]" +#else + return null +#endif + /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() TGS_DEBUG_LOG("RequireInitialBridgeResponse()") var/logged = FALSE - while(!version) + while(!initial_bridge_request_received) if(!logged) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep") logged = TRUE @@ -183,17 +198,7 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message2 = UpgradeDeprecatedChatMessage(message2) - - if (!length(channels)) - return - - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids - if(intercepted_message_queue) - intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatMessageRaw(message2, ids) /datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only) var/list/channels = list() @@ -202,26 +207,42 @@ if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id + SendChatMessageRaw(message2, channels) + +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + SendChatMessageRaw(message2, list(user.channel.id)) + +/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids) message2 = UpgradeDeprecatedChatMessage(message2) - if (!length(channels)) + if (!length(channel_ids)) return var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids if(intercepted_message_queue) intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + return -/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) - message2 = UpgradeDeprecatedChatMessage(message2) - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) - if(intercepted_message_queue) - intercepted_message_queue += list(data) + if(offline_message_queue) + offline_message_queue += list(data) + return + + if(detached) + offline_message_queue = list(data) + + WaitForReattach(FALSE) + + data = offline_message_queue + offline_message_queue = null + + for(var/queued_message in data) + SendChatDataRaw(queued_message) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatDataRaw(data) + +/datum/tgs_api/v5/proc/SendChatDataRaw(list/data) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 37f58bcdf632..a0ab35987670 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -48,7 +48,9 @@ var/json = CreateBridgeData(command, data, TRUE) var/encoded_json = url_encode(json) - var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" + var/api_prefix = interop_version.minor >= 8 ? "api/" : "" + + var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" return url /datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth) @@ -81,11 +83,16 @@ TGS_ERROR_LOG("Failed bridge request: [bridge_request]") return - var/response_json = file2text(export_response["CONTENT"]) - if(!response_json) + var/content = export_response["CONTENT"] + if(!content) TGS_ERROR_LOG("Failed bridge request, missing content!") return + var/response_json = file2text(content) + if(!response_json) + TGS_ERROR_LOG("Failed bridge request, failed to load content!") + return + var/list/bridge_response = json_decode(response_json) if(!bridge_response) TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index 2ef0c70a97fa..05e6c4e1b214 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -175,6 +175,7 @@ var/list/reattach_response = TopicResponse(error_message) reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands() + reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort() return reattach_response if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index fd1ed7e4cf54..d531d4b7b9dd 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -8,7 +8,6 @@ #undef DMAPI5_TOPIC_REQUEST_LIMIT #undef DMAPI5_TOPIC_RESPONSE_LIMIT -#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE #undef DMAPI5_BRIDGE_COMMAND_STARTUP #undef DMAPI5_BRIDGE_COMMAND_PRIME #undef DMAPI5_BRIDGE_COMMAND_REBOOT @@ -18,6 +17,7 @@ #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS +#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index 2a9b7f6dfff4..f60691860d79 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -14,8 +14,9 @@ * * multiline - Bool that determines if the input box is much larger. Good for large messages, laws, etc. * * encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input. * * timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout. + * * trim - Whether or not to trim leading and trailing whitespace from your input. Defaults to TRUE */ -/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0) +/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0, trim = TRUE) if (!user) user = usr if (!istype(user)) @@ -39,7 +40,7 @@ return input(user, message, title, default) as text|null */ - var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout) + var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout, trim) text_input.tgui_interact(user) text_input.wait() if (text_input) @@ -73,14 +74,17 @@ var/timeout /// The title of the TGUI window var/title + /// Whether to trim leading and trailing spaces + var/trim -/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout) +/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout, trim) src.default = default src.encode = encode src.max_length = max_length src.message = message src.multiline = multiline src.title = title + src.trim = trim if (timeout) src.timeout = timeout start_time = world.time @@ -141,7 +145,7 @@ CRASH("[usr] typed a text string longer than the max length") if(encode && (length(html_encode(params["entry"])) > max_length)) to_chat(usr, SPAN_NOTICE("Your message was clipped due to special character usage.")) - set_entry(params["entry"]) + set_entry(params["entry"], trim) closed = TRUE SStgui.close_uis(src) return TRUE @@ -156,7 +160,10 @@ * This can sometimes result in a string that is longer than the max length. * If the string is longer than the max length, it will be clipped. */ -/datum/tgui_input_text/proc/set_entry(entry) +/datum/tgui_input_text/proc/set_entry(entry, trim) if(!isnull(entry)) var/converted_entry = encode ? html_encode(entry) : entry - src.entry = trim(converted_entry, max_length) + if(trim) + src.entry = trim(converted_entry) + else + src.entry = converted_entry diff --git a/code/modules/vehicles/hardpoints/primary/minigun.dm b/code/modules/vehicles/hardpoints/primary/minigun.dm index 3acf37eec268..03d1e7be0077 100644 --- a/code/modules/vehicles/hardpoints/primary/minigun.dm +++ b/code/modules/vehicles/hardpoints/primary/minigun.dm @@ -75,7 +75,7 @@ spin_stage -= delta_stage / spindown_time else return - spin_stage = Clamp(spin_stage, 1, stage_rate_len) + spin_stage = clamp(spin_stage, 1, stage_rate_len) var/old_stage_rate = stage_rate[Floor(old_spin_stage)] var/new_stage_rate = stage_rate[Floor(spin_stage)] diff --git a/code/modules/vehicles/interior/areas.dm b/code/modules/vehicles/interior/areas.dm index 605b32079fcc..254bcb6b26ea 100644 --- a/code/modules/vehicles/interior/areas.dm +++ b/code/modules/vehicles/interior/areas.dm @@ -1,29 +1,33 @@ -/area/vehicle +/area/interior ceiling = CEILING_METAL requires_power = 0 unlimited_power = 1 icon = 'icons/turf/areas_interiors.dmi' + icon_state = "interior" base_lighting_alpha = 255 ambience_exterior = 'sound/ambience/vehicle_interior1.ogg' sound_environment = SOUND_ENVIRONMENT_ROOM -/area/vehicle/tank +/area/interior/vehicle/tank name = "tank interior" icon_state = "tank" -/area/vehicle/apc +/area/interior/vehicle/apc name = "\improper APC interior" icon_state = "apc" -/area/vehicle/apc/med +/area/interior/vehicle/apc/med name = "\improper MED APC interior" icon_state = "apc_med" -/area/vehicle/apc/command +/area/interior/vehicle/apc/command name = "\improper CMD APC interior" icon_state = "apc_cmd" -/area/vehicle/van +/area/interior/vehicle/van name = "van interior" icon_state = "van" + +/area/interior/fancylocker + name = "closet interior" diff --git a/code/modules/vehicles/interior/objects/fancy_locker.dm b/code/modules/vehicles/interior/objects/fancy_locker.dm index f1068812a793..2cc7a02e548b 100644 --- a/code/modules/vehicles/interior/objects/fancy_locker.dm +++ b/code/modules/vehicles/interior/objects/fancy_locker.dm @@ -2,6 +2,13 @@ name = "fancy closet" desc = "It's a fancy storage unit." + icon_state = "cabinet_closed" + icon_closed = "cabinet_closed" + icon_opened = "cabinet_open" + + unacidable = TRUE + + var/interior_map = /datum/map_template/interior/fancy_locker var/datum/interior/interior = null var/entrance_speed = 1 SECONDS var/passengers_slots = 2 @@ -19,20 +26,52 @@ INVOKE_ASYNC(src, PROC_REF(do_create_interior)) /obj/structure/closet/fancy/proc/do_create_interior() - interior.create_interior("fancylocker") + interior.create_interior(interior_map) /obj/structure/closet/fancy/Destroy() QDEL_NULL(interior) return ..() +/obj/structure/closet/fancy/can_close() + for(var/obj/structure/closet/closet in get_turf(src)) + if(closet != src && !closet.wall_mounted) + return FALSE + return TRUE + /obj/structure/closet/fancy/store_mobs(stored_units) for(var/mob/M in loc) - var/succ = interior.enter(M, "default") + var/succ = interior.enter(M, "fancy") if(!succ) break +/obj/structure/closet/fancy/ex_act(severity) + return + /obj/structure/interior_exit/fancy name = "fancy wooden door" icon = 'icons/obj/structures/doors/mineral_doors.dmi' icon_state = "wood" density = TRUE + +/obj/structure/interior_exit/fancy/attackby(obj/item/O, mob/M) + attack_hand(M) + +/obj/structure/interior_exit/fancy/attack_hand(mob/escapee) + var/obj/structure/closet/fancy/closet = find_closet() + if(istype(closet) && !closet.can_open()) + to_chat(escapee, SPAN_WARNING("Something is blocking the exit!")) + return + ..() + +/obj/structure/interior_exit/fancy/attack_alien(mob/living/carbon/xenomorph/escapee, dam_bonus) + var/obj/structure/closet/fancy/closet = find_closet() + if(istype(closet) && !closet.can_open()) + to_chat(escapee, SPAN_XENOWARNING("Something is blocking the exit!")) + return + ..() + +/obj/structure/interior_exit/fancy/proc/find_closet() + var/obj/structure/closet/fancy/possible_closet = interior.exterior + if(istype(possible_closet)) + return possible_closet + return diff --git a/colonialmarines.dme b/colonialmarines.dme index 96e6df2e74a8..d431035a500f 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1619,6 +1619,7 @@ #include "code\modules\cm_preds\smartdisc.dm" #include "code\modules\cm_preds\thrall_items.dm" #include "code\modules\cm_preds\thrall_procs.dm" +#include "code\modules\cm_preds\yaut_actions.dm" #include "code\modules\cm_preds\yaut_bracers.dm" #include "code\modules\cm_preds\yaut_hudprocs.dm" #include "code\modules\cm_preds\yaut_items.dm" diff --git a/html/changelogs/AutoChangeLog-pr-5355.yml b/html/changelogs/AutoChangeLog-pr-5355.yml deleted file mode 100644 index 26922c12d4f6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5355.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SabreML" -delete-after: True -changes: - - bugfix: "Fixed custom xeno ERTs sending a distress beacon announcement when it shouldn't." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5454.yml b/html/changelogs/AutoChangeLog-pr-5454.yml new file mode 100644 index 000000000000..5bd45f11e1a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5454.yml @@ -0,0 +1,4 @@ +author: "cuberound" +delete-after: True +changes: + - bugfix: "lowers volume of neurohalucination from 100 (no outher sounds are so laud) to 65 (just about under queen screech level)." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5459.yml b/html/changelogs/AutoChangeLog-pr-5459.yml new file mode 100644 index 000000000000..a6c0a884f420 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5459.yml @@ -0,0 +1,5 @@ +author: "Huffie56" +delete-after: True +changes: + - rscdel: "Remove all the manuals that were nothing to do with CM lore. (cloning, particle_accelerator, singularity_safety, robotics_cyborgs)" + - code_imp: "Updated research manual." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5460.yml b/html/changelogs/AutoChangeLog-pr-5460.yml new file mode 100644 index 000000000000..bb8526bdfded --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5460.yml @@ -0,0 +1,4 @@ +author: "Huffie56" +delete-after: True +changes: + - rscdel: "deleting a var called \"max_temperature\" that created in Walls.dm and didn't do anything code wise." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5461.yml b/html/changelogs/AutoChangeLog-pr-5461.yml new file mode 100644 index 000000000000..f03a79f723f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5461.yml @@ -0,0 +1,4 @@ +author: "BeagleGaming1" +delete-after: True +changes: + - bugfix: "Floor floodlights use correct sprites" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5463.yml b/html/changelogs/AutoChangeLog-pr-5463.yml new file mode 100644 index 000000000000..72a9bc008454 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5463.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - bugfix: "Bedrolls no longer give metal when wrenched." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5465.yml b/html/changelogs/AutoChangeLog-pr-5465.yml new file mode 100644 index 000000000000..cef51881fd61 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5465.yml @@ -0,0 +1,4 @@ +author: "SabreML" +delete-after: True +changes: + - rscadd: "Made xeno tunnel lists sort by distance to the player." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5471.yml b/html/changelogs/AutoChangeLog-pr-5471.yml new file mode 100644 index 000000000000..2471d8942d70 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5471.yml @@ -0,0 +1,6 @@ +author: "realforest2001" +delete-after: True +changes: + - bugfix: "Fancy closet now works as desired and runtime free." + - rscadd: "Added an area for the closet to use instead of APC interior." + - code_imp: "Repathed /area/vehicle to /area/interior/vehicle." \ No newline at end of file diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index e0f97ef9e4b3..7a39b3d6c705 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -32,3 +32,166 @@ - rscadd: The Three-World Empire will now occasionally respond to distress beacons. cuberound: - balance: m56d can not be placed within five tiles of another one +2024-01-03: + SabreML: + - bugfix: Fixed custom xeno ERTs sending a distress beacon announcement when it + shouldn't. + Steelpoint: + - mapadd: Shivas Snowball is back in rotation. + - maptweak: The south east landing zone on Shivas has been relocated to the south + west, the dig site in the south west has been similarly relocated. + - maptweak: Comms towers on Shivas have been placed in more consistent locations + near each other, instead of some of them being on the opposite sides of the + map from each other. + poltava, ihatethisengine: + - rscadd: added intel chestrig + - imageadd: added sprites for intel chestrig +2024-01-04: + BeagleGaming1, Mr.Crowford: + - rscadd: Added Yautja action buttons + - qol: Added a keybind to control falcon drones + - qol: Thwei crystals and healing capsules say how much time until off cooldown + - code_imp: Yautja keybinds now redirect to action buttons + - code_imp: Changed thwei crystals and healing capsules to cooldowns instead of + timers + - code_imp: Miscellaneous Yautja-related code cleanup + SabreML: + - bugfix: Fixed non-combat synthetics being able to fire the M2C. + - bugfix: Fixed scouts being able to use the M56D or M2C before their cloak's gun + cooldown had ended. + - bugfix: Fixed the M56D and M2C saying that the user is too far away to man it, + even when they successfully man it. + - bugfix: Fixed a runtime which was caused whenever someone manned an M56D or M2C. + - refactor: Refactored some M56D and M2C manning/unmanning code. + fira: + - code_imp: Refactored Daze to use new Status backend + - bugfix: Dazed screen effect now applies immediately + - bugfix: Stuttering now starts properly when dazed + - rscdel: Removed unused disabilities code + - rscdel: Removed an old, goofy and unused decade old horse mask +2024-01-05: + Birdtalon: + - bugfix: Fixed exploit in praetorian hook caused by an oversight. + Huffie56: + - refactor: for the file coulours.dm and other files change define in it from COULOUR + to COLOR + SabreML: + - bugfix: Made the 'Time Since Death' counter show hours if it passes 1 hour, rather + than wrapping the minutes back to 0. + - ui: Separated xeno hivemind chat messages into their own toggleable category, + separate from 'Radio'. +2024-01-06: + private-tristan: + - bugfix: Trijent security southern hallway and engineering east tunnel no longer + have 2 APCs +2024-01-07: + BadAtThisGame302: + - qol: Spruced up the CLs office by adding a new plant, changing the stuck posters + to be random every round + - bugfix: Fixed the ATM Machine in the CLs office having Weyland-Yutani Automatic + Teller Machine and not Wey-Yu. Same thing, useless mapedit. + - bugfix: Fixes the PROUDLY REMEMBER IO! Posters in the CLs office (Again) + - bugfix: Puts the 29th Poster which was a pinup into the pinup posters and not + the music ones. + Birdtalon: + - bugfix: Runtime when consuming xeno fruits. + Blundir: + - rscadd: added approved stamp + - bugfix: fixed being unable to write on papers on noticeboard + - ui: changed noticeboard UI from scratch + - refactor: refactored noticeboard code + - maptweak: added noticeboard to req and approved stamp to QM's office, as well + as some pens in req area to interact with noticeboard + Drathek: + - refactor: Refactored the overlay_lighting component to better handle objects deleting + - bugfix: Fix putting lights in bags somereason keeping the light on + - ui: Polished various aspects of the new dropship weapons UI + - bugfix: Fixed CAS direct firing + - bugfix: Fixed Medevac buttons not moving the dropship (still currently requires + manual winch) + - bugfix: Fixed camera_manager resizing the view incorrectly because of overlay_lighting + - refactor: Ported some hard delete fixes for maps. + - bugfix: Fixed simulators detonation button + - bugfix: Fixed weeded corpses not changing color during forsaken conversion + - code_imp: Add missing bitfield definitions for variable viewer (VV) + LTNTS: + - bugfix: fixes trippy carrot cake sprite + SabreML: + - bugfix: Fixed observing a monkey/farwa/stok/etc. locking the camera onto it. + - bugfix: Fixed the 'busy' circle icon sometimes rendering behind object on the + tile above. + - spellcheck: Updated the night vision goggles 'Tip of the round' to instead relate + to night vision optics. + TheGamerdk: + - rscadd: SLs, SOs and XOs can now recommend people for medals! Do this by right-clicking + your headset, or using the new button in the object panel of the Status Panel! + ihatethisengine: + - balance: Pylons give larva only up to 50% of groundside (weighted) marines, instead + of 40% of all humans. + - balance: Xenos get major boost to evo speed for 3 minutes after hijack. Hijacking + resets ovi cooldown. + - rscadd: Xenos now see marines on the tacmap during hijack if xenos outnumber marines + for more than 25%. + private-tristan: + - spellcheck: Changed a tip related to runner pounce to be more accurate +2024-01-08: + realforest2001: + - bugfix: Yautja scimitars no longer bypass attack delay. +2024-01-09: + private-tristan: + - bugfix: Tunnels are now converted to forsaken on evac. +2024-01-10: + SabreML: + - bugfix: Fixed tunnels not showing on the minimap. + Tsurupeta: + - bugfix: Regular expressions in chat highlights work again. +2024-01-12: + Vicacrov: + - bugfix: Placing flags now anchors the actual flag, not the stack of flags in your + hand. + Zenith, Steelpoint: + - rscadd: Updates Steelpoint's donor armour, replacing it with a new sprite, camouflage + options for all maps and new item descriptions that are lore friendly. + realforest2001: + - rscadd: Added the X17 Riot Breaching Charge. +2024-01-15: + InsaneRed: + - qol: Moves "Banish, Re-admit and De-evolving" queen abilities into one list, making + the queen ui less clutterier + Stakeyng: + - rscadd: Added the ability to combine prescription glasses with eyewear for varying + roles + private-tristan: + - bugfix: removed a light fixture being doubled on trijent + - maptweak: moved some trijent lights in marshals off windows + - maptweak: Alamayer PermaBrig Chairs face the right way +2024-01-16: + Drathek: + - bugfix: Fix all hands on deck message not sending to those in cryopods + Huffie56: + - rscadd: Add the ability to build multi tile assembly from metal sheets. + ItsVyzo: + - balance: m56d loses burst fire + SabreML: + - bugfix: Fixed dead marines being able to man and fire the M56D. + TheGamerdk: + - bugfix: Overwatch now works on Whiskey Outpost again, not that you will use it. + Zonespace27: + - balance: 3 smartgun drums now spawn in the SG's equipment crate. Smartgun drums + cannot be purchased from the SG vendor. +2024-01-17: + SabreML: + - bugfix: Fixed larvae sometimes spawning in space on Fiorina. + TheGamerdk: + - bugfix: The Kutjevo Refinery has been granted an additional SMES +2024-01-18: + Birdtalon: + - bugfix: Fixed buckled mobs unable to move after being thrown by a xeno. + Drathek: + - code_imp: Cleaned up some oversights in attachment Detatch logic + SabreML: + - rscadd: Added a 'balloon alert' when toggling Crest Defense as a Defender. + - code_imp: Made balloon alerts centre themselves on xeno sprites. + Vicacrov: + - bugfix: Fixes an issue where player-controlled facehuggers would ghost out when + smashing against anti-hugging headgear like the B18 helmet. diff --git a/icons/mob/hud/actions.dmi b/icons/mob/hud/actions.dmi index 843d38a67b86..820da22ea5b1 100644 Binary files a/icons/mob/hud/actions.dmi and b/icons/mob/hud/actions.dmi differ diff --git a/icons/mob/hud/actions_yautja.dmi b/icons/mob/hud/actions_yautja.dmi new file mode 100644 index 000000000000..c94388456e96 Binary files /dev/null and b/icons/mob/hud/actions_yautja.dmi differ diff --git a/icons/mob/humans/onmob/back.dmi b/icons/mob/humans/onmob/back.dmi index 5e3d1e030661..4758f430a498 100644 Binary files a/icons/mob/humans/onmob/back.dmi and b/icons/mob/humans/onmob/back.dmi differ diff --git a/icons/mob/humans/onmob/head_0.dmi b/icons/mob/humans/onmob/head_0.dmi index f1d6a2c6e665..cfe8b33da4ee 100644 Binary files a/icons/mob/humans/onmob/head_0.dmi and b/icons/mob/humans/onmob/head_0.dmi differ diff --git a/icons/mob/humans/onmob/suit_0.dmi b/icons/mob/humans/onmob/suit_0.dmi index d0f816e2b7fa..3fc9e8e0770b 100644 Binary files a/icons/mob/humans/onmob/suit_0.dmi and b/icons/mob/humans/onmob/suit_0.dmi differ diff --git a/icons/obj/items/assemblies.dmi b/icons/obj/items/assemblies.dmi index 522e0fb5e55d..eb36d5696741 100644 Binary files a/icons/obj/items/assemblies.dmi and b/icons/obj/items/assemblies.dmi differ diff --git a/icons/obj/items/clothing/backpacks.dmi b/icons/obj/items/clothing/backpacks.dmi index 4119b32a09cf..fa03f0434fb5 100644 Binary files a/icons/obj/items/clothing/backpacks.dmi and b/icons/obj/items/clothing/backpacks.dmi differ diff --git a/icons/obj/items/clothing/donor/HEAD.dmi b/icons/obj/items/clothing/donor/HEAD.dmi index d7345e41d94b..3116bdef26b6 100644 Binary files a/icons/obj/items/clothing/donor/HEAD.dmi and b/icons/obj/items/clothing/donor/HEAD.dmi differ diff --git a/icons/obj/items/clothing/donor/SUITS.dmi b/icons/obj/items/clothing/donor/SUITS.dmi index 51c41b837c9a..fc0c9987b9d4 100644 Binary files a/icons/obj/items/clothing/donor/SUITS.dmi and b/icons/obj/items/clothing/donor/SUITS.dmi differ diff --git a/icons/obj/items/clothing/hats.dmi b/icons/obj/items/clothing/hats.dmi index de6673d07b51..e9da08f07477 100644 Binary files a/icons/obj/items/clothing/hats.dmi and b/icons/obj/items/clothing/hats.dmi differ diff --git a/icons/obj/items/clothing/suits.dmi b/icons/obj/items/clothing/suits.dmi index 10fbfff30d7c..7d67de8e5a2e 100644 Binary files a/icons/obj/items/clothing/suits.dmi and b/icons/obj/items/clothing/suits.dmi differ diff --git a/icons/obj/items/food.dmi b/icons/obj/items/food.dmi index 9e746bb62656..12093cd2c45b 100644 Binary files a/icons/obj/items/food.dmi and b/icons/obj/items/food.dmi differ diff --git a/icons/obj/items/paper.dmi b/icons/obj/items/paper.dmi index c39fede23679..fa8858e8a17b 100644 Binary files a/icons/obj/items/paper.dmi and b/icons/obj/items/paper.dmi differ diff --git a/icons/obj/structures/machinery/floodlight.dmi b/icons/obj/structures/machinery/floodlight.dmi index 7330d1749ab7..1f6b3b3d6d4c 100644 Binary files a/icons/obj/structures/machinery/floodlight.dmi and b/icons/obj/structures/machinery/floodlight.dmi differ diff --git a/icons/obj/structures/props/stationobjs.dmi b/icons/obj/structures/props/stationobjs.dmi index 66c396f41d12..8d0bf3b9377d 100644 Binary files a/icons/obj/structures/props/stationobjs.dmi and b/icons/obj/structures/props/stationobjs.dmi differ diff --git a/icons/turf/areas_interiors.dmi b/icons/turf/areas_interiors.dmi index 4da1109803a8..47a95da322ea 100644 Binary files a/icons/turf/areas_interiors.dmi and b/icons/turf/areas_interiors.dmi differ diff --git a/map_config/maps.txt b/map_config/maps.txt index ba0bd17a89c7..885b1e76faad 100644 --- a/map_config/maps.txt +++ b/map_config/maps.txt @@ -44,8 +44,6 @@ map ice_colony_v2 endmap map shivas_snowball - voteweight 0 - disabled endmap map kutjevo diff --git a/maps/fiorina_sciannex.json b/maps/fiorina_sciannex.json index 89997cc9d668..61212c433be0 100644 --- a/maps/fiorina_sciannex.json +++ b/maps/fiorina_sciannex.json @@ -4,15 +4,15 @@ "map_file": "Fiorina_SciAnnex.dmm", "webmap_url": "Fiorina", "survivor_types": [ - "/datum/equipment_preset/survivor/scientist/florina", - "/datum/equipment_preset/survivor/doctor/florina", + "/datum/equipment_preset/survivor/scientist/fiorina", + "/datum/equipment_preset/survivor/doctor/fiorina", "/datum/equipment_preset/survivor/interstellar_human_rights_observer", - "/datum/equipment_preset/survivor/security/florina", - "/datum/equipment_preset/survivor/colonial_marshal/florina", + "/datum/equipment_preset/survivor/security/fiorina", + "/datum/equipment_preset/survivor/colonial_marshal/fiorina", "/datum/equipment_preset/survivor/prisoner", "/datum/equipment_preset/survivor/prisoner", "/datum/equipment_preset/survivor/gangleader", - "/datum/equipment_preset/survivor/engineer/florina", + "/datum/equipment_preset/survivor/engineer/fiorina", "/datum/equipment_preset/survivor/clf", "/datum/equipment_preset/survivor/civilian" ], diff --git a/maps/interiors/apc.dmm b/maps/interiors/apc.dmm index 82ca4649acd6..2684ad8f0f75 100644 --- a/maps/interiors/apc.dmm +++ b/maps/interiors/apc.dmm @@ -17,7 +17,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "c" = ( /obj/structure/bed/chair/vehicle{ dir = 1; @@ -35,7 +35,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_5" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "d" = ( /obj/structure/bed/chair/vehicle{ dir = 1; @@ -48,7 +48,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "e" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_1" @@ -65,7 +65,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_12" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "g" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_small_R" @@ -86,7 +86,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_0_1_15" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "j" = ( /turf/open/void/vehicle, /area/space) @@ -112,7 +112,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "n" = ( /obj/structure/interior_wall/apc{ icon_state = "front_2" @@ -155,7 +155,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "t" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_3" @@ -167,7 +167,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_6" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "v" = ( /obj/structure/bed/chair/vehicle{ pixel_x = 8 @@ -183,7 +183,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "w" = ( /obj/effect/landmark/interior/spawn/entrance{ alpha = 50; @@ -201,7 +201,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_11" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "y" = ( /obj/structure/interior_wall/apc{ icon_state = "front_6" @@ -212,12 +212,12 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_5" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "A" = ( /turf/open/shuttle/vehicle{ icon_state = "floor_1_6" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "B" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_inverse_R"; @@ -236,7 +236,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_11" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "D" = ( /obj/structure/interior_wall/apc{ icon_state = "wall"; @@ -274,7 +274,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "H" = ( /obj/structure/bed/chair/vehicle{ pixel_x = -8 @@ -294,7 +294,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "I" = ( /obj/effect/landmark/interior/spawn/vehicle_support_gunner_seat{ dir = 1 @@ -307,7 +307,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_11" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "J" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_small_L"; @@ -324,7 +324,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_14" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "L" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_small_L" @@ -364,7 +364,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_1_3" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "S" = ( /obj/structure/interior_wall/apc{ alpha = 100; @@ -402,7 +402,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "V" = ( /obj/structure/interior_wall/apc{ icon_state = "wall" @@ -420,7 +420,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "X" = ( /obj/structure/interior_wall/apc{ icon_state = "front_wheel_R" @@ -442,7 +442,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_12" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "Z" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_4" diff --git a/maps/interiors/apc_command.dmm b/maps/interiors/apc_command.dmm index 0da5353a6d6a..d6f7485339fc 100644 --- a/maps/interiors/apc_command.dmm +++ b/maps/interiors/apc_command.dmm @@ -10,7 +10,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_10_1" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "c" = ( /obj/structure/bed/chair/vehicle{ dir = 1; @@ -23,7 +23,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_5" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "d" = ( /obj/structure/bed/chair/vehicle{ dir = 1; @@ -36,7 +36,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "e" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_1" @@ -56,7 +56,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_12" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "h" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_wheel_R"; @@ -79,7 +79,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "k" = ( /turf/open/void/vehicle, /area/space) @@ -123,7 +123,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_7_1" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "p" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_6" @@ -140,12 +140,12 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "r" = ( /turf/open/shuttle/vehicle{ icon_state = "floor_1_6" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "s" = ( /obj/structure/machinery/prop/almayer/CICmap{ indestructible = 1; @@ -155,7 +155,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_6" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "t" = ( /obj/structure/interior_wall/apc{ icon_state = "wheel_back_top_1"; @@ -168,7 +168,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_5" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "v" = ( /obj/structure/interior_wall/apc{ icon_state = "front_3" @@ -194,7 +194,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_5" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "x" = ( /obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor{ dir = 4 @@ -202,12 +202,12 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9_1" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "y" = ( /turf/open/shuttle/vehicle{ icon_state = "floor_1_14" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "z" = ( /obj/structure/interior_wall/apc{ alpha = 100; @@ -234,7 +234,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_11" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "C" = ( /obj/structure/interior_wall/apc{ icon_state = "front_1" @@ -252,7 +252,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_0_1_15" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "F" = ( /obj/structure/bed/chair/vehicle{ dir = 4 @@ -260,7 +260,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_11" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "G" = ( /obj/effect/landmark/interior/spawn/entrance{ alpha = 50; @@ -276,17 +276,17 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_12" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "H" = ( /turf/open/shuttle/vehicle{ icon_state = "floor_1_13" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "I" = ( /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "J" = ( /obj/structure/interior_wall/apc{ icon_state = "wall" @@ -314,7 +314,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9_1" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) "M" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_small_R"; @@ -415,7 +415,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_6" }, -/area/vehicle/apc/command) +/area/interior/vehicle/apc/command) (1,1,1) = {" p diff --git a/maps/interiors/apc_med.dmm b/maps/interiors/apc_med.dmm index f4da99a6fe50..0f47b029c20f 100644 --- a/maps/interiors/apc_med.dmm +++ b/maps/interiors/apc_med.dmm @@ -14,7 +14,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_11" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "c" = ( /obj/effect/decal/medical_decals/permanent{ icon_state = "docdecal2"; @@ -27,7 +27,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_5" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "d" = ( /obj/effect/decal/medical_decals/permanent{ icon_state = "triagedecalbottom" @@ -38,7 +38,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_14" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "e" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_1" @@ -70,7 +70,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "j" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_6" @@ -105,7 +105,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_7" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "n" = ( /obj/structure/interior_wall/apc{ icon_state = "wheel_back_top_1"; @@ -179,7 +179,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_8" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "x" = ( /obj/structure/interior_wall/apc{ icon_state = "wall"; @@ -204,7 +204,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_11" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "z" = ( /obj/structure/interior_wall/apc{ icon_state = "wheel_front_top_1"; @@ -223,7 +223,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "B" = ( /obj/structure/machinery/iv_drip{ anchored = 1 @@ -236,7 +236,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_12" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "C" = ( /obj/structure/interior_wall/apc{ icon_state = "front_wheel_L"; @@ -253,7 +253,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "E" = ( /obj/structure/vehicle_locker{ pixel_y = 28 @@ -264,7 +264,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "F" = ( /obj/structure/interior_wall/apc{ icon_state = "front_2" @@ -293,7 +293,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9_1" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "J" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -301,7 +301,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_6" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "K" = ( /obj/effect/landmark/interior/spawn/entrance{ alpha = 50; @@ -317,12 +317,12 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_12" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "L" = ( /turf/open/shuttle/vehicle{ icon_state = "floor_1_14" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "M" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_inverse_L"; @@ -355,7 +355,7 @@ /turf/open/shuttle/vehicle{ icon_state = "dark_sterile_green_13" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "P" = ( /obj/structure/interior_wall/apc{ icon_state = "door_back" @@ -366,13 +366,13 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_6" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "R" = ( /obj/effect/landmark/interior/spawn/weapons_loader, /turf/open/shuttle/vehicle{ icon_state = "floor_3_6" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "S" = ( /obj/structure/interior_wall/apc{ icon_state = "front_4" @@ -383,7 +383,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_3_3" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "U" = ( /obj/structure/interior_wall/apc{ icon_state = "front_1" @@ -402,7 +402,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "W" = ( /obj/structure/bed/chair/vehicle{ pixel_x = -8 @@ -422,7 +422,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc/med) +/area/interior/vehicle/apc/med) "Y" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_4" diff --git a/maps/interiors/apc_no_fpw.dmm b/maps/interiors/apc_no_fpw.dmm index 6a08e69959ec..e463b7a5ff1e 100644 --- a/maps/interiors/apc_no_fpw.dmm +++ b/maps/interiors/apc_no_fpw.dmm @@ -6,7 +6,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_6" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "c" = ( /obj/structure/bed/chair/vehicle{ dir = 4 @@ -14,7 +14,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_12" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "d" = ( /obj/effect/landmark/interior/spawn/entrance{ alpha = 50; @@ -29,7 +29,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_12" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "e" = ( /obj/structure/bed/chair/vehicle{ dir = 1; @@ -47,7 +47,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_5" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "f" = ( /obj/structure/interior_wall/apc{ icon_state = "front_2" @@ -70,7 +70,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_1_3" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "j" = ( /obj/effect/landmark/interior/spawn/entrance{ dir = 8; @@ -89,7 +89,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "k" = ( /obj/structure/interior_wall/apc{ icon_state = "wall"; @@ -108,7 +108,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "m" = ( /obj/structure/interior_wall/apc{ icon_state = "front_1" @@ -139,7 +139,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "r" = ( /obj/effect/landmark/interior/spawn/interior_viewport{ dir = 8; @@ -157,7 +157,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_11" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "s" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_2" @@ -179,7 +179,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "u" = ( /obj/structure/interior_wall/apc{ icon_state = "wheel_front_top_1"; @@ -208,7 +208,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_6" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "z" = ( /obj/effect/landmark/interior/spawn/entrance{ dir = 8; @@ -219,7 +219,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "A" = ( /obj/structure/interior_wall/apc{ icon_state = "wheel_back_top_1"; @@ -240,7 +240,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "C" = ( /obj/structure/bed/chair/vehicle{ dir = 4 @@ -248,7 +248,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_11" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "D" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_wheel_L" @@ -259,7 +259,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_5" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "F" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_small_R"; @@ -298,7 +298,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_11" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "J" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_inverse_R"; @@ -322,7 +322,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_0_1_15" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "M" = ( /obj/structure/interior_wall/apc{ icon_state = "front_wheel_L"; @@ -343,7 +343,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9_1" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "P" = ( /obj/structure/interior_wall/apc{ icon_state = "corner_small_L" @@ -385,7 +385,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_14" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "V" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_1" @@ -411,7 +411,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) "X" = ( /obj/structure/interior_wall/apc{ icon_state = "wall_2"; @@ -446,7 +446,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/apc) +/area/interior/vehicle/apc) (1,1,1) = {" G diff --git a/maps/interiors/fancylocker.dmm b/maps/interiors/fancylocker.dmm index a6ecb6155e72..1b97bc73be62 100644 --- a/maps/interiors/fancylocker.dmm +++ b/maps/interiors/fancylocker.dmm @@ -1,96 +1,97 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( /turf/closed/wall/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "b" = ( /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "c" = ( /obj/effect/landmark/interior/spawn/entrance/step_toward{ dir = 8; - exit_type = /obj/structure/interior_exit/fancy + exit_type = /obj/structure/interior_exit/fancy; + tag = "fancy" }, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "d" = ( /turf/open/floor/carpet/edge{ dir = 9 }, -/area/vehicle/apc) +/area/interior/fancylocker) "e" = ( /turf/open/floor/carpet/edge{ dir = 1 }, -/area/vehicle/apc) +/area/interior/fancylocker) "f" = ( /turf/open/floor/carpet/edge{ dir = 5 }, -/area/vehicle/apc) +/area/interior/fancylocker) "g" = ( /turf/open/floor/carpet/edge{ dir = 8 }, -/area/vehicle/apc) +/area/interior/fancylocker) "h" = ( /obj/structure/bed/sofa/south/white/left, /turf/open/floor/carpet, -/area/vehicle/apc) +/area/interior/fancylocker) "i" = ( /obj/structure/bed/sofa/south/white, /turf/open/floor/carpet, -/area/vehicle/apc) +/area/interior/fancylocker) "j" = ( /obj/structure/bed/sofa/south/white/right, /turf/open/floor/carpet, -/area/vehicle/apc) +/area/interior/fancylocker) "k" = ( /turf/open/floor/carpet/edge{ dir = 4 }, -/area/vehicle/apc) +/area/interior/fancylocker) "l" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/device/flashlight/lamp/green, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "m" = ( /turf/open/floor/carpet/edge{ dir = 10 }, -/area/vehicle/apc) +/area/interior/fancylocker) "n" = ( /turf/open/floor/carpet/edge, -/area/vehicle/apc) +/area/interior/fancylocker) "o" = ( /turf/open/floor/carpet/edge{ dir = 6 }, -/area/vehicle/apc) +/area/interior/fancylocker) "p" = ( /obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, -/area/vehicle/apc) +/area/interior/fancylocker) "q" = ( /obj/structure/flora/pottedplant{ icon_state = "pottedplant_10" }, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "r" = ( /obj/structure/coatrack, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "s" = ( /obj/structure/surface/table/woodentable/fancy, /obj/structure/machinery/chem_dispenser/soda, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "t" = ( /obj/structure/surface/table/woodentable/fancy, /obj/structure/machinery/chem_dispenser/soda/beer, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "u" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/reagent_container/food/snacks/milosoup{ @@ -103,12 +104,12 @@ dir = 1 }, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "v" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/reagent_container/food/snacks/appletart, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "w" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/reagent_container/food/snacks/popcorn{ @@ -124,33 +125,33 @@ pixel_x = 5 }, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "x" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/ashtray/bronze, /turf/open/floor/carpet, -/area/vehicle/apc) +/area/interior/fancylocker) "y" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/clothing/mask/cigarette/cigar/cohiba, /obj/item/tool/lighter/zippo, /turf/open/floor/carpet, -/area/vehicle/apc) +/area/interior/fancylocker) "z" = ( /obj/structure/bed/chair/wood/wings{ icon_state = "wooden_chair_wings"; dir = 4 }, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "A" = ( /obj/structure/machinery/disposal, /turf/open/floor/wood, -/area/vehicle/apc) +/area/interior/fancylocker) "B" = ( /obj/structure/machinery/light, /turf/open/floor/carpet/edge, -/area/vehicle/apc) +/area/interior/fancylocker) (1,1,1) = {" a diff --git a/maps/interiors/tank.dmm b/maps/interiors/tank.dmm index 75da1e24f72d..f2714401a03d 100644 --- a/maps/interiors/tank.dmm +++ b/maps/interiors/tank.dmm @@ -18,7 +18,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_12" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "c" = ( /obj/structure/prop/tank{ icon_state = "prop2"; @@ -39,7 +39,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_3" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "e" = ( /obj/effect/landmark/interior/spawn/vehicle_gunner_seat/armor{ dir = 4 @@ -47,7 +47,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "f" = ( /obj/structure/prop/tank{ pixel_x = 0 @@ -55,7 +55,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_1_1" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "g" = ( /obj/structure/interior_wall/tank{ alpha = 50; @@ -102,7 +102,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_8" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "v" = ( /obj/structure/interior_wall/tank{ layer = 2 @@ -158,7 +158,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_7" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "H" = ( /obj/structure/interior_wall/tank{ icon_state = "exterior_3"; @@ -175,7 +175,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_4" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "T" = ( /obj/structure/prop/tank{ icon_state = "prop1"; @@ -184,7 +184,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_9" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) "Z" = ( /obj/structure/vehicle_locker/tank{ pixel_y = 11 @@ -201,7 +201,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_11" }, -/area/vehicle/tank) +/area/interior/vehicle/tank) (1,1,1) = {" j diff --git a/maps/interiors/van.dmm b/maps/interiors/van.dmm index 27a42dd93fd7..309160f38c1d 100644 --- a/maps/interiors/van.dmm +++ b/maps/interiors/van.dmm @@ -13,7 +13,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_10" }, -/area/vehicle/van) +/area/interior/vehicle/van) "e" = ( /obj/structure/interior_wall/van{ icon_state = "background_1" @@ -38,7 +38,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_1" }, -/area/vehicle/van) +/area/interior/vehicle/van) "i" = ( /obj/structure/interior_wall/van{ icon_state = "front_1" @@ -71,7 +71,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_8" }, -/area/vehicle/van) +/area/interior/vehicle/van) "r" = ( /obj/structure/interior_wall/van{ icon_state = "background_3" @@ -94,7 +94,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_7" }, -/area/vehicle/van) +/area/interior/vehicle/van) "t" = ( /obj/effect/landmark/interior/spawn/entrance{ dir = 1; @@ -115,7 +115,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_11" }, -/area/vehicle/van) +/area/interior/vehicle/van) "v" = ( /obj/structure/interior_wall/van{ icon_state = "interior_door" @@ -152,7 +152,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_3_12" }, -/area/vehicle/van) +/area/interior/vehicle/van) "z" = ( /obj/structure/interior_wall/van{ icon_state = "back_1" @@ -181,7 +181,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_9" }, -/area/vehicle/van) +/area/interior/vehicle/van) "J" = ( /obj/structure/interior_wall/van{ alpha = 50; @@ -202,7 +202,7 @@ /turf/open/shuttle/vehicle{ icon_state = "floor_1_2" }, -/area/vehicle/van) +/area/interior/vehicle/van) "O" = ( /turf/open/void/vehicle, /area/space) diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 48f7f9089399..8104d2f46a94 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -3848,14 +3848,6 @@ icon_state = "whitepurplefull" }, /area/bigredv2/caves/lambda/xenobiology) -"ald" = ( -/obj/structure/surface/table/reinforced, -/obj/item/book/manual/research_and_development, -/turf/open/floor{ - dir = 4; - icon_state = "whitepurple" - }, -/area/bigredv2/caves/lambda/xenobiology) "ale" = ( /obj/effect/landmark/xeno_spawn, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -39753,6 +39745,14 @@ icon_state = "mars_cave_16" }, /area/bigredv2/caves/mining) +"wQu" = ( +/obj/structure/surface/table/reinforced, +/obj/item/book/manual/research_and_development, +/turf/open/floor{ + dir = 4; + icon_state = "whitepurple" + }, +/area/bigredv2/caves/lambda/xenobiology) "wQC" = ( /turf/open/mars_cave{ icon_state = "mars_cave_7" @@ -80450,7 +80450,7 @@ adZ adZ adZ aeQ -ald +wQu daB amO afy diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm index 7029d71a6076..17dc301de79d 100644 --- a/maps/map_files/CORSAT/Corsat.dmm +++ b/maps/map_files/CORSAT/Corsat.dmm @@ -27747,13 +27747,6 @@ icon_state = "purplewhitecorner" }, /area/corsat/omega/complex) -"bzU" = ( -/obj/structure/surface/table/almayer, -/obj/item/book/manual/robotics_cyborgs, -/turf/open/floor/corsat{ - icon_state = "yellow" - }, -/area/corsat/sigma/south/robotics) "bzV" = ( /obj/structure/surface/table/almayer, /obj/item/device/robotanalyzer, @@ -110525,7 +110518,7 @@ auK bxJ byb aMi -bzU +ydU auR ylo ylo diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index 66684b33731c..806cffd28a01 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -9512,14 +9512,6 @@ icon_state = "desert_transition_edge1" }, /area/desert_dam/exterior/valley/valley_crashsite) -"aCH" = ( -/obj/structure/machinery/power/apc{ - dir = 1; - pixel_y = 24; - start_charge = 0 - }, -/turf/open/floor/interior/wood/alt, -/area/desert_dam/interior/dam_interior/east_tunnel_entrance) "aCI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/interior/wood/alt, @@ -15524,6 +15516,9 @@ pixel_y = 24; start_charge = 0 }, +/obj/structure/machinery/light{ + dir = 4 + }, /turf/open/floor/prison{ dir = 5; icon_state = "red" @@ -16773,17 +16768,11 @@ }, /area/desert_dam/building/security/lobby) "aZt" = ( -/obj/structure/bed/chair{ - dir = 8 - }, /obj/structure/machinery/light{ - dir = 4 - }, -/turf/open/floor/prison{ - dir = 4; - icon_state = "red" + dir = 8 }, -/area/desert_dam/building/security/lobby) +/turf/open/floor/interior/wood, +/area/desert_dam/building/security/detective) "aZu" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -18117,9 +18106,6 @@ "bdL" = ( /obj/item/reagent_container/food/drinks/flask/detflask, /obj/item/clothing/head/det_hat, -/obj/structure/machinery/light{ - dir = 8 - }, /obj/structure/surface/table/woodentable/fancy, /turf/open/floor/interior/wood, /area/desert_dam/building/security/detective) @@ -25382,17 +25368,6 @@ /obj/structure/window/reinforced, /turf/open/floor/interior/wood, /area/desert_dam/building/security/courtroom) -"bBU" = ( -/obj/structure/machinery/power/apc{ - dir = 8; - pixel_x = -30; - start_charge = 0 - }, -/turf/open/floor/prison{ - dir = 8; - icon_state = "darkred2" - }, -/area/desert_dam/building/security/southern_hallway) "bBV" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -74501,7 +74476,7 @@ ceA act aVz aXD -aZt +aXD aXD aXD blY @@ -74972,7 +74947,7 @@ aXE aZJ bdL bjI -aXM +aZt aVB boW bqy @@ -76387,7 +76362,7 @@ bsS bvy bsS bsS -bBU +bsS bFr aQH bIX @@ -86410,7 +86385,7 @@ dTs dTs dTs aEa -aCH +aCJ aCI aDh aCJ diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index ab98e02cb6e4..68b8897320a5 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -17641,9 +17641,6 @@ /area/fiorina/station/lowsec) "kIe" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/book/manual/engineering_particle_accelerator{ - pixel_y = 6 - }, /obj/structure/prop/souto_land/pole{ dir = 1 }, diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm index 60847e12bae1..b43c34586c5c 100644 --- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm +++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm @@ -17,10 +17,6 @@ /obj/structure/girder, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/colony/medseceng) -"aaf" = ( -/obj/item/lightstick/planted, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/cp_s_research) "aag" = ( /obj/structure/bed/chair{ dir = 4 @@ -113,29 +109,20 @@ /turf/open/auto_turf/ice/layer1, /area/shiva/exterior/cp_lz2) "aat" = ( -/obj/structure/ice/thin/single{ - opacity = 1; - unacidable = 0 +/obj/item/tool/shovel/snow{ + pixel_y = 8 }, -/obj/structure/blocker/forcefield/multitile_vehicles, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) +/obj/item/tool/shovel/snow, +/obj/structure/surface/rack, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "aau" = ( /obj/effect/spider/stickyweb, /turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) +/area/shiva/interior/caves/cp_camp) "aav" = ( -/obj/effect/spider/stickyweb{ - icon_state = "stickyweb2" - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) -"aaw" = ( -/obj/effect/spider/cocoon{ - icon_state = "cocoon_large2" - }, /turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) +/area/shiva/exterior/telecomm/lz1_north) "aax" = ( /obj/structure/prop/ice_colony/surveying_device{ layer = 3.01; @@ -176,10 +163,6 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/right_spiders) -"aaE" = ( -/mob/living/simple_animal/hostile/giant_spider/nurse, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "aaF" = ( /obj/structure/platform/strata{ dir = 4 @@ -226,10 +209,6 @@ /obj/item/tool/pickaxe/drill, /turf/open/auto_turf/ice/layer1, /area/shiva/exterior/cp_colony_grounds) -"aaL" = ( -/obj/effect/spider/cocoon, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "aaM" = ( /obj/structure/platform/strata{ dir = 4 @@ -247,10 +226,6 @@ /obj/item/explosive/plastic, /turf/open/auto_turf/ice/layer1, /area/shiva/exterior/cp_colony_grounds) -"aaP" = ( -/mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "aaQ" = ( /obj/effect/spider/stickyweb, /obj/item/clothing/head/helmet/marine/sof, @@ -272,12 +247,6 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/exterior/cp_lz2) -"aaU" = ( -/obj/effect/spider/cocoon{ - icon_state = "cocoon_large3" - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "aaV" = ( /obj/effect/spider/stickyweb, /obj/effect/spider/cocoon{ @@ -301,7 +270,7 @@ "aaZ" = ( /obj/structure/fence, /turf/open/auto_turf/ice/layer1, -/area/shiva/interior/warehouse/caves) +/area/shiva/interior/caves/research_caves) "aba" = ( /obj/item/device/flashlight/lamp/tripod/grey, /turf/open/auto_turf/snow/layer3, @@ -455,7 +424,7 @@ /area/shiva/exterior/cp_lz2) "abv" = ( /obj/structure/prop/ice_colony/surveying_device, -/turf/open/auto_turf/ice/layer1, +/turf/open/auto_turf/snow/layer1, /area/shiva/interior/caves/cp_camp) "abw" = ( /obj/item/lightstick/red/spoke/planted{ @@ -493,20 +462,6 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) -"abC" = ( -/mob/living/simple_animal/hostile/giant_spider/nurse, -/obj/effect/spider/stickyweb{ - icon_state = "stickyweb2" - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) -"abD" = ( -/obj/effect/spider/cocoon, -/obj/effect/spider/stickyweb{ - icon_state = "stickyweb2" - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "abE" = ( /obj/effect/landmark/hunter_primary, /turf/open/auto_turf/ice/layer1, @@ -521,11 +476,6 @@ /obj/effect/landmark/hunter_secondary, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) -"abI" = ( -/obj/effect/spider/stickyweb, -/obj/item/device/flashlight/lamp/tripod/grey, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "abJ" = ( /turf/open/shuttle/elevator/grating, /area/shiva/interior/colony/research_hab) @@ -535,11 +485,6 @@ }, /turf/open/auto_turf/ice/layer2, /area/shiva/interior/caves/right_spiders) -"abL" = ( -/obj/effect/spider/cocoon, -/obj/effect/spider/stickyweb, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "abM" = ( /turf/closed/shuttle/elevator{ dir = 1 @@ -549,25 +494,6 @@ /obj/effect/spider/stickyweb, /turf/open/auto_turf/ice/layer0, /area/shiva/interior/caves/right_spiders) -"abO" = ( -/obj/effect/spider/cocoon{ - icon_state = "cocoon_large3" - }, -/obj/effect/spider/stickyweb{ - icon_state = "stickyweb2" - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) -"abP" = ( -/obj/structure/prop/ice_colony/surveying_device{ - dir = 4 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) -"abQ" = ( -/obj/structure/prop/ice_colony/surveying_device/measuring_device, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "abR" = ( /obj/structure/flora/grass/tallgrass/ice, /obj/structure/flora/bush/ausbushes/lavendergrass, @@ -579,12 +505,6 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_lz2) -"abT" = ( -/obj/structure/tunnel{ - id = "north_research_tunnel" - }, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "abU" = ( /obj/structure/flora/grass/tallgrass/ice/corner{ dir = 1 @@ -631,7 +551,7 @@ "abZ" = ( /obj/item/lightstick/planted, /turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "aca" = ( /obj/item/tank/oxygen, /obj/item/tank/oxygen, @@ -649,17 +569,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/colony/research_hab) -"acc" = ( -/obj/item/tool/shovel/spade{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) -"acd" = ( -/obj/structure/machinery/space_heater, -/turf/open/auto_turf/ice/layer1, -/area/shiva/exterior/research_alley) "ace" = ( /turf/closed/shuttle/elevator/gears, /area/shiva/interior/colony/central) @@ -809,16 +718,6 @@ "acL" = ( /turf/closed/shuttle/elevator/arrivals, /area/shiva/interior/colony/central) -"acM" = ( -/mob/living/simple_animal/hostile/retaliate/clown{ - desc = "Uh oh, looks like Gonzo got blocked by a cave-in. How is he gonna get out of this one?"; - health = 10000; - move_to_delay = 2; - name = "Gonzo the Magnificent"; - rapid = 1 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/oob/dev_room) "acN" = ( /obj/structure/machinery/door/airlock/almayer/security/glass/colony{ name = "\improper Underground Security Interrogation"; @@ -826,12 +725,6 @@ }, /turf/open/floor/plating, /area/shiva/interior/colony/medseceng) -"acO" = ( -/obj/effect/decal/hefa_cult_decals/d96{ - desc = "Original map by Infernus, remapped by Triiodine." - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/oob/dev_room) "acP" = ( /obj/effect/landmark/xeno_spawn, /turf/open/auto_turf/ice/layer1, @@ -1553,7 +1446,7 @@ "agy" = ( /obj/item/lightstick/planted, /turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "agz" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor{ @@ -1700,13 +1593,6 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) -"ahB" = ( -/obj/structure/machinery/light/double{ - dir = 8; - pixel_y = -5 - }, -/turf/open/floor/shiva, -/area/shiva/interior/colony/research_hab) "ahC" = ( /obj/structure/flora/bush/snow{ icon_state = "snowgrassbb_2" @@ -2115,9 +2001,8 @@ /turf/open/floor/plating, /area/shiva/interior/colony/medseceng) "ajy" = ( -/obj/structure/machinery/colony_floodlight, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/cp_s_research) +/turf/open/floor/shiva, +/area/shiva/interior/caves/cp_camp) "ajD" = ( /obj/structure/machinery/vending/snack, /turf/open/floor/shiva{ @@ -2230,7 +2115,7 @@ "akf" = ( /obj/item/lightstick/red/planted, /turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "akh" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/shiva{ @@ -2261,6 +2146,7 @@ /obj/structure/barricade/snow{ dir = 4 }, +/obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard/fortbiceps) "akr" = ( @@ -2741,16 +2627,6 @@ icon_state = "bluefull" }, /area/shiva/interior/colony/n_admin) -"ano" = ( -/obj/structure/closet/toolcloset, -/obj/structure/machinery/light/double{ - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/shiva{ - icon_state = "floor3" - }, -/area/shiva/interior/aerodrome) "anq" = ( /obj/structure/toilet, /turf/open/floor/plating, @@ -3526,10 +3402,6 @@ }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/cp_lz2) -"asC" = ( -/obj/structure/fence, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "asE" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 5 @@ -3705,10 +3577,6 @@ }, /turf/open/auto_turf/ice/layer0, /area/shiva/interior/caves/cp_camp) -"atJ" = ( -/obj/structure/flora/tree/dead/tree_3, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "atK" = ( /obj/structure/fence, /turf/open/auto_turf/snow/layer1, @@ -3959,6 +3827,10 @@ }, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_lz2) +"awP" = ( +/obj/item/lightstick/red/variant/planted, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "awY" = ( /obj/structure/flora/grass/tallgrass/ice, /obj/structure/flora/bush/ausbushes/lavendergrass{ @@ -4230,6 +4102,10 @@ icon_state = "yellowcorners" }, /area/shiva/interior/garage) +"ayz" = ( +/obj/structure/fence, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) "ayB" = ( /obj/structure/surface/table, /obj/item/device/flashlight, @@ -4253,12 +4129,6 @@ /obj/item/clothing/shoes/snow, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/cp_lz2) -"ayJ" = ( -/obj/structure/prop/invuln/ice_prefab/standalone{ - icon_state = "white" - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/research_alley) "ayK" = ( /obj/structure/prop/invuln/ice_prefab, /turf/open/auto_turf/snow/layer0, @@ -5179,10 +5049,6 @@ icon_state = "floor3" }, /area/shiva/interior/bar) -"aHz" = ( -/obj/structure/flora/tree/dead/tree_1, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "aHB" = ( /obj/structure/flora/bush/snow{ icon_state = "snowgrassbb_1" @@ -5219,19 +5085,12 @@ /obj/item/weapon/wirerod, /turf/open/shuttle/elevator/grating, /area/shiva/interior/aerodrome) -"aIO" = ( -/turf/closed/wall/shiva/prefabricated/red, -/area/shiva/interior/oob) "aJc" = ( /obj/structure/largecrate/random/mini/med, /turf/open/floor/shiva{ icon_state = "floor3" }, /area/shiva/interior/valley_huts/no2) -"aJd" = ( -/obj/structure/surface/table/reinforced/prison, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "aJe" = ( /obj/effect/spawner/random/toolbox, /obj/effect/landmark/crap_item, @@ -5296,12 +5155,6 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) -"aJR" = ( -/obj/structure/flora/bush/snow{ - icon_state = "snowgrassgb_2" - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) "aJU" = ( /obj/structure/bed/chair/office/light{ dir = 8 @@ -5312,9 +5165,6 @@ /obj/structure/prop/invuln/ice_prefab/standalone/trim{ icon_state = "pink_trim" }, -/obj/structure/machinery/portable_atmospherics/powered/scrubber{ - icon_state = "psiphon:1" - }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/valley) "aKn" = ( @@ -5323,18 +5173,6 @@ }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/valley) -"aKo" = ( -/obj/structure/surface/rack, -/obj/item/ammo_rcd{ - pixel_x = -4 - }, -/obj/item/ammo_rcd{ - pixel_x = 4 - }, -/turf/open/floor/shiva{ - icon_state = "floor3" - }, -/area/shiva/interior/caves/cp_camp) "aKp" = ( /obj/effect/decal/cleanable/blood, /turf/open/auto_turf/snow/layer3, @@ -5346,33 +5184,12 @@ }, /turf/open/floor/plating, /area/shiva/interior/colony/medseceng) -"aKr" = ( -/obj/structure/stairs/perspective{ - dir = 1; - icon_state = "p_stair_sn_full_cap" - }, -/turf/open/auto_turf/snow/layer0, -/area/shiva/interior/bar) "aKv" = ( /obj/item/stack/folding_barricade, /turf/open/floor/shiva{ icon_state = "floor3" }, /area/shiva/interior/colony/s_admin) -"aKA" = ( -/obj/structure/stairs/perspective{ - dir = 1; - icon_state = "p_stair_full" - }, -/turf/open/auto_turf/snow/layer0, -/area/shiva/interior/bar) -"aKD" = ( -/obj/structure/stairs/perspective{ - dir = 8; - icon_state = "p_stair_sn_full_cap" - }, -/turf/open/auto_turf/snow/layer0, -/area/shiva/interior/bar) "aKJ" = ( /obj/structure/machinery/door/airlock/almayer/generic{ dir = 1; @@ -5392,15 +5209,6 @@ }, /turf/open/floor/plating, /area/shiva/interior/aerodrome) -"aKP" = ( -/obj/structure/platform/strata{ - dir = 1 - }, -/obj/structure/platform/strata{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/lz1_valley) "aKQ" = ( /obj/structure/machinery/computer/cameras, /obj/structure/surface/table/reinforced/prison, @@ -5498,24 +5306,11 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/junkyard/cp_bar) -"aMk" = ( -/obj/effect/decal/cleanable/blood{ - dir = 4; - icon_state = "gib6" - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/junkyard/cp_bar) "aMl" = ( /obj/effect/landmark/corpsespawner/engineer, /obj/effect/decal/cleanable/blood, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard/cp_bar) -"aMn" = ( -/obj/structure/platform/strata{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/lz1_valley) "aMs" = ( /obj/structure/flora/pottedplant{ icon_state = "pottedplant_22"; @@ -5550,16 +5345,6 @@ icon_state = "floor3" }, /area/shiva/interior/colony/central) -"aMy" = ( -/obj/structure/machinery/space_heater, -/obj/structure/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/shiva{ - dir = 8; - icon_state = "snow_mat" - }, -/area/shiva/interior/caves/cp_camp) "aMz" = ( /obj/structure/machinery/smartfridge{ density = 0; @@ -5648,13 +5433,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) -"aMZ" = ( -/obj/structure/machinery/power/port_gen/pacman, -/obj/structure/machinery/light/small{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/cp_s_research) "aNb" = ( /obj/structure/safe, /obj/item/spacecash/c1000{ @@ -5785,27 +5563,11 @@ /obj/structure/machinery/colony_floodlight, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_colony_grounds) -"aOk" = ( -/obj/structure/prop/invuln/ice_prefab/standalone/trim{ - icon_state = "pink_trim" - }, -/turf/open/auto_turf/snow/layer4, -/area/shiva/exterior/valley) -"aOl" = ( -/obj/structure/prop/invuln/ice_prefab/roof_greeble{ - dir = 1 - }, -/turf/open/auto_turf/snow/layer4, -/area/shiva/exterior/valley) "aOo" = ( /obj/item/dogtag, /obj/effect/decal/cleanable/blood, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/bar) -"aOp" = ( -/obj/item/tool/shovel/snow, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/valley) "aOu" = ( /turf/closed/wall/shiva/ice, /area/shiva/interior/caves/medseceng_caves) @@ -5924,15 +5686,6 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/central) -"aPX" = ( -/obj/structure/prop/invuln/ice_prefab/trim{ - dir = 4 - }, -/obj/structure/prop/invuln/ice_prefab/roof_greeble{ - dir = 1 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "aQb" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/shiva{ @@ -5946,19 +5699,6 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) -"aQh" = ( -/obj/item/lightstick/red/spoke/planted{ - layer = 2.99; - pixel_x = -13; - pixel_y = 28 - }, -/obj/structure/largecrate/random/mini/small_case/b, -/obj/structure/largecrate/random/mini/small_case{ - pixel_x = 14; - pixel_y = -3 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) "aQi" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/auto_turf/snow/layer2, @@ -6020,20 +5760,6 @@ /obj/item/stool, /turf/open/floor/shiva, /area/shiva/interior/bar) -"aRo" = ( -/obj/structure/largecrate/random/mini/med{ - pixel_x = -7; - pixel_y = 9 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/valley) -"aRp" = ( -/obj/structure/prop/invuln/ice_prefab/standalone/trim{ - icon_state = "pink_trim" - }, -/obj/structure/prop/invuln/ice_prefab/roof_greeble, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) "aRs" = ( /obj/structure/closet/radiation, /obj/structure/machinery/light/double{ @@ -6120,25 +5846,6 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/shiva, /area/shiva/interior/aerodrome) -"aSC" = ( -/obj/item/lightstick/red/spoke/planted{ - layer = 3.1; - pixel_x = -13; - pixel_y = 25 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/research_alley) -"aSF" = ( -/obj/item/reagent_container/glass/bucket{ - pixel_x = 8; - pixel_y = -8 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) -"aSG" = ( -/obj/structure/largecrate/random/case/double, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) "aSI" = ( /obj/structure/closet/radiation, /turf/open/floor/shiva{ @@ -6185,7 +5892,7 @@ name = "\improper Anti-Freeze Lounge" }, /turf/open/floor/plating, -/area/shiva/interior/bar) +/area/shiva/exterior/cp_s_research) "aSX" = ( /obj/structure/largecrate/random/mini/ammo, /turf/open/floor/plating, @@ -6232,52 +5939,10 @@ /obj/effect/spawner/random/tool, /turf/open/floor/shiva, /area/shiva/interior/aerodrome) -"aTr" = ( -/obj/item/tool/shovel/snow{ - pixel_y = 8 - }, -/obj/item/tool/shovel/snow, -/obj/structure/surface/rack, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) -"aTt" = ( -/obj/item/lightstick/red/variant/planted{ - pixel_x = 11; - pixel_y = 11 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) -"aTw" = ( -/obj/structure/prop/ice_colony/soil_net, -/obj/item/tool/shovel/spade{ - layer = 2.99; - pixel_x = -9; - pixel_y = -11 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) "aTE" = ( /obj/structure/largecrate/random/barrel, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/s_lz2) -"aTH" = ( -/obj/item/reagent_container/glass/bucket{ - pixel_x = 9; - pixel_y = 8 - }, -/obj/structure/largecrate/random/case, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/valley) -"aTL" = ( -/obj/structure/largecrate/random/case{ - pixel_y = 11 - }, -/obj/structure/largecrate/random/mini/chest/b{ - pixel_x = -4; - pixel_y = -5 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/valley) "aTO" = ( /obj/item/stack/rods, /turf/open/asphalt/cement, @@ -6377,21 +6042,6 @@ icon_state = "green" }, /area/shiva/interior/colony/botany) -"aUP" = ( -/obj/structure/surface/rack, -/obj/item/stack/cable_coil/blue, -/obj/item/stack/cable_coil/orange{ - pixel_y = 6 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) -"aUQ" = ( -/obj/item/lightstick/red/spoke/planted{ - pixel_x = 12; - pixel_y = 25 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/research_alley) "aUS" = ( /obj/structure/machinery/disposal, /turf/open/floor/shiva{ @@ -6582,13 +6232,6 @@ icon_state = "floor7" }, /area/shiva/interior/aerodrome) -"aVW" = ( -/obj/item/lightstick/red/variant/planted{ - pixel_x = -7; - pixel_y = -5 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) "aWb" = ( /obj/structure/foamed_metal, /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, @@ -6650,16 +6293,6 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) -"aWG" = ( -/obj/item/lightstick/red/spoke/planted{ - pixel_x = -11; - pixel_y = 20 - }, -/obj/structure/flora/grass/tallgrass/ice/corner{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/junkyard) "aWH" = ( /obj/structure/flora/grass/tallgrass/ice/corner{ dir = 4 @@ -6817,28 +6450,6 @@ opacity = 0 }, /area/shiva/interior/aerodrome) -"aYf" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shiva/interior/aerodrome) -"aYg" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/bed/chair/dropship/passenger{ - dir = 8 - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shiva/interior/aerodrome) "aYx" = ( /turf/closed/shuttle/ert{ icon_state = "rightengine_3" @@ -6848,10 +6459,6 @@ /obj/structure/window_frame/shiva, /turf/open/floor/plating, /area/shiva/interior/aerodrome) -"aYF" = ( -/obj/item/stack/rods, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) "aYU" = ( /obj/structure/machinery/computer/arcade, /turf/open/floor/shiva{ @@ -6955,9 +6562,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/bar) -"bax" = ( -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/research_alley) "baN" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/tool/pen/blue{ @@ -7024,12 +6628,6 @@ /obj/item/stack/rods, /turf/open/floor/plating, /area/shiva/interior/aerodrome) -"bbt" = ( -/obj/item/shard{ - icon_state = "medium" - }, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/valley) "bbw" = ( /obj/structure/barricade/handrail/strata{ dir = 8 @@ -7039,12 +6637,6 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/deck) -"bbF" = ( -/obj/structure/platform/strata{ - dir = 8 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) "bbG" = ( /obj/structure/ice/thin/indestructible{ dir = 4; @@ -7102,33 +6694,11 @@ }, /turf/open/gm/river, /area/shiva/interior/warehouse/caves) -"bdk" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 - }, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shiva/interior/aerodrome) "bdT" = ( /turf/open/floor/shiva{ icon_state = "radiator_tile2" }, /area/shiva/interior/colony/medseceng) -"bea" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 8 - }, -/obj/structure/machinery/light{ - dir = 4 - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shiva/interior/aerodrome) "ben" = ( /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/telecomm/lz1_north) @@ -7187,10 +6757,6 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) -"bfB" = ( -/obj/effect/spawner/random/tool, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/valley) "bfL" = ( /obj/structure/largecrate/random/mini/wooden, /turf/open/auto_turf/snow/layer2, @@ -7226,7 +6792,7 @@ icon_state = "snowgrassall_1" }, /turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "bhI" = ( /turf/open/floor/shiva{ dir = 6; @@ -7282,6 +6848,10 @@ }, /turf/open/floor/plating, /area/shiva/interior/colony/central) +"bkK" = ( +/obj/structure/inflatable/popped, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "bkP" = ( /obj/effect/spider/cocoon{ icon_state = "cocoon_large2" @@ -7300,6 +6870,10 @@ icon_state = "green" }, /area/shiva/interior/colony/botany) +"bme" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/ice/layer1, +/area/shiva/exterior/valley) "bmg" = ( /obj/structure/machinery/space_heater, /turf/open/auto_turf/snow/layer2, @@ -7339,12 +6913,6 @@ /obj/structure/bed/chair, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/junkyard) -"boz" = ( -/obj/structure/flora/grass/tallgrass/ice/corner{ - dir = 8 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/lz1_valley) "boA" = ( /obj/item/tool/crowbar, /turf/open/auto_turf/snow/layer1, @@ -7357,12 +6925,6 @@ /obj/docking_port/stationary/marine_dropship/lz1, /turf/open/floor/plating, /area/shiva/exterior/lz1_valley) -"boS" = ( -/obj/structure/flora/bush/snow{ - icon_state = "snowgrassbb_3" - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/cp_s_research) "boT" = ( /obj/structure/largecrate/random/mini/wooden{ pixel_y = 6 @@ -7617,10 +7179,14 @@ /obj/structure/largecrate/random/barrel, /turf/open/floor/plating, /area/shiva/interior/colony/central) -"bBT" = ( -/obj/structure/inflatable/popped, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/research_alley) +"bCr" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/computer/shuttle/dropship/flight/lz1, +/obj/effect/decal/warning_stripes{ + icon_state = "E-corner" + }, +/turf/open/floor/plating, +/area/shiva/exterior/lz1_valley) "bDx" = ( /obj/item/reagent_container/food/drinks/flask/vacuumflask, /turf/open/floor/shiva, @@ -7660,16 +7226,6 @@ }, /turf/open/floor/plating, /area/shiva/interior/aerodrome) -"bGk" = ( -/obj/item/stack/rods, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/valley) -"bGx" = ( -/obj/item/shard{ - icon_state = "medium" - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) "bGU" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 9 @@ -7868,16 +7424,6 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) -"bQX" = ( -/obj/structure/prop/ice_colony/poly_kevlon_roll{ - pixel_y = 21 - }, -/obj/structure/prop/ice_colony/poly_kevlon_roll{ - pixel_x = -7; - pixel_y = 13 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "bQZ" = ( /turf/closed/wall/shiva/prefabricated/reinforced/hull, /area/shiva/interior/caves/s_lz2) @@ -7890,7 +7436,7 @@ "bRU" = ( /obj/structure/flora/tree/dead/tree_5, /turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "bSB" = ( /obj/structure/prop/invuln{ desc = "big pile energy."; @@ -8046,6 +7592,16 @@ icon_state = "red" }, /area/shiva/interior/colony/central) +"bYV" = ( +/obj/structure/machinery/disposal, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_y = -5 + }, +/turf/open/floor/shiva{ + icon_state = "floor3" + }, +/area/shiva/interior/aerodrome) "bZZ" = ( /obj/effect/landmark/objective_landmark/far, /turf/open/floor/shiva{ @@ -8088,6 +7644,10 @@ dir = 1 }, /area/shiva/interior/colony/s_admin) +"cbG" = ( +/obj/effect/spawner/random/tool, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "cbW" = ( /obj/structure/largecrate/random/mini/med, /turf/open/floor/plating, @@ -8105,6 +7665,13 @@ /obj/structure/prop/invuln/ice_prefab/standalone, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) +"ccT" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = 12; + pixel_y = 25 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/cp_s_research) "cdh" = ( /obj/structure/fence, /turf/open/auto_turf/snow/layer2, @@ -8169,6 +7736,13 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/research_hab) +"cid" = ( +/obj/structure/platform/strata{ + dir = 4 + }, +/obj/structure/platform/strata, +/turf/open/gm/river, +/area/shiva/exterior/cp_s_research) "cio" = ( /turf/open/floor/shiva{ icon_state = "floor3" @@ -8212,9 +7786,6 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) -"clK" = ( -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/left_spiders) "cnb" = ( /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/telecomm/lz2_northeast) @@ -8272,6 +7843,13 @@ icon_state = "red" }, /area/shiva/interior/colony/medseceng) +"cps" = ( +/obj/effect/decal/cleanable/blood{ + dir = 4; + icon_state = "gib6" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "cpC" = ( /obj/item/lightstick/red/variant/planted, /turf/open/auto_turf/snow/layer1, @@ -8398,10 +7976,6 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/botany) -"cyW" = ( -/obj/structure/girder, -/turf/open/auto_turf/snow/layer1, -/area/shiva/interior/caves/cp_camp) "czf" = ( /obj/structure/flora/bush/snow{ icon_state = "snowgrassall_1" @@ -8440,10 +8014,6 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) -"cBs" = ( -/obj/structure/machinery/cell_charger, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) "cBB" = ( /obj/item/clothing/shoes/snow, /obj/structure/surface/rack, @@ -8482,16 +8052,6 @@ /obj/structure/machinery/vending/cigarette, /turf/open/floor/shiva, /area/shiva/interior/bar) -"cBU" = ( -/turf/open/auto_turf/snow/layer1, -/area/shiva/interior/caves/research_caves) -"cBX" = ( -/obj/item/lightstick/red/spoke/planted{ - pixel_x = -16; - pixel_y = -3 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "cCI" = ( /turf/open/floor/shiva{ dir = 8; @@ -8516,10 +8076,6 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) -"cEV" = ( -/obj/structure/inflatable, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "cFa" = ( /obj/structure/machinery/light/double{ dir = 4; @@ -8593,10 +8149,26 @@ }, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_lz2) +"cIs" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 2.99; + pixel_x = 12; + pixel_y = 28 + }, +/turf/closed/wall/shiva/ice, +/area/shiva/interior/caves/cp_camp) "cIV" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/research_caves) +/area/shiva/interior/warehouse/caves) +"cIZ" = ( +/obj/structure/surface/rack, +/obj/item/stack/cable_coil/blue, +/obj/item/stack/cable_coil/orange{ + pixel_y = 6 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "cJy" = ( /obj/structure/surface/table, /turf/open/floor/shiva{ @@ -8791,6 +8363,13 @@ icon_state = "bluecorners" }, /area/shiva/interior/colony/central) +"cTU" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/warning_stripes{ + icon_state = "E-corner" + }, +/turf/open/floor/plating, +/area/shiva/exterior/lz1_valley) "cTY" = ( /obj/item/ammo_magazine/flamer_tank, /turf/open/floor/shiva{ @@ -8869,6 +8448,15 @@ /obj/structure/prop/ice_colony/surveying_device, /turf/open/auto_turf/snow/layer2, /area/shiva/interior/caves/cp_camp) +"cXU" = ( +/obj/structure/platform/strata{ + dir = 1 + }, +/obj/structure/platform/strata{ + dir = 4 + }, +/turf/open/gm/river, +/area/shiva/exterior/cp_s_research) "cYa" = ( /turf/open/floor/shiva{ dir = 8; @@ -8964,11 +8552,19 @@ "daD" = ( /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard/cp_bar) +"dbv" = ( +/obj/structure/largecrate/random/case, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/aerodrome) "dbH" = ( /turf/closed/shuttle/ert{ icon_state = "stan1" }, /area/shiva/interior/aerodrome) +"dbO" = ( +/obj/structure/prop/invuln/ice_prefab/standalone, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "dbQ" = ( /obj/structure/bed/chair/office/light{ dir = 8 @@ -8977,6 +8573,17 @@ icon_state = "wredfull" }, /area/shiva/interior/colony/medseceng) +"dcn" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 2.99; + pixel_x = -13; + pixel_y = 28 + }, +/obj/structure/prop/invuln/ice_prefab/roof_greeble{ + dir = 1 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "dcu" = ( /obj/structure/flora/tree/dead/tree_4, /turf/open/auto_turf/snow/layer2, @@ -8996,12 +8603,6 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) -"ddA" = ( -/obj/structure/flora/bush/snow{ - icon_state = "snowgrassbb_1" - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) "dex" = ( /obj/structure/machinery/photocopier, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, @@ -9038,10 +8639,6 @@ /obj/vehicle/train/cargo/engine, /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/junkyard/cp_bar) -"dhx" = ( -/obj/item/device/binoculars/civ, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/research_caves) "diL" = ( /obj/structure/machinery/light/double{ dir = 1; @@ -9130,6 +8727,11 @@ /obj/structure/window/reinforced, /turf/open/floor/wood, /area/shiva/interior/colony/central) +"dnj" = ( +/obj/structure/surface/rack, +/obj/item/tool/shovel/snow, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) "dnv" = ( /obj/structure/prop/invuln/minecart_tracks/bumper{ dir = 5 @@ -9188,6 +8790,11 @@ /obj/item/device/flashlight/lamp, /turf/open/floor/carpet, /area/shiva/interior/colony/central) +"dro" = ( +/obj/structure/platform/strata, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/cp_s_research) "drx" = ( /obj/structure/bed/chair/comfy/black{ dir = 4 @@ -9308,7 +8915,7 @@ "dyt" = ( /obj/vehicle/train/cargo/trolley, /turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "dze" = ( /obj/effect/decal/warning_stripes{ icon_state = "W-corner" @@ -9361,14 +8968,10 @@ icon_state = "stan2" }, /area/shiva/interior/aerodrome) -"dCY" = ( -/obj/structure/ice/thin/single{ - opacity = 1; - unacidable = 0 - }, -/obj/structure/blocker/forcefield/multitile_vehicles, -/turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) +"dDj" = ( +/obj/item/tool/shovel/snow, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "dDo" = ( /obj/structure/machinery/landinglight/ds1/spoke, /turf/open/floor/shiva{ @@ -9397,12 +9000,6 @@ dir = 1 }, /area/shiva/interior/colony/central) -"dHr" = ( -/obj/structure/flora/bush/snow{ - icon_state = "snowgrassall_3" - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) "dIF" = ( /obj/structure/machinery/photocopier, /turf/open/floor/shiva{ @@ -9534,13 +9131,8 @@ }, /area/shiva/interior/colony/n_admin) "dRb" = ( -/turf/closed/wall/shiva/ice, -/area/shiva/interior/caves/left_spiders) -"dRi" = ( -/obj/structure/prop/invuln/ice_prefab{ - dir = 10 - }, -/turf/open/auto_turf/ice/layer1, +/obj/structure/fence, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "dTj" = ( /obj/structure/machinery/space_heater, @@ -9703,12 +9295,6 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) -"eaB" = ( -/obj/structure/platform/strata{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer4, -/area/shiva/exterior/lz1_valley) "ebK" = ( /obj/structure/fence, /turf/open/auto_turf/snow/layer2, @@ -9732,9 +9318,15 @@ icon_state = "floor3" }, /area/shiva/interior/colony/botany) +"ecx" = ( +/obj/structure/largecrate/random, +/turf/open/floor/shiva{ + icon_state = "floor3" + }, +/area/shiva/interior/caves/cp_camp) "ecz" = ( /obj/structure/barricade/handrail/wire, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "ecZ" = ( /turf/open/floor/shiva{ @@ -9784,10 +9376,8 @@ }, /turf/open/floor/wood, /area/shiva/interior/colony/botany) -"ehe" = ( -/obj/effect/landmark/nightmare{ - insert_tag = "labs-entrance" - }, +"ehO" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, /turf/closed/wall/shiva/prefabricated/blue, /area/shiva/interior/colony/research_hab) "ehV" = ( @@ -9825,6 +9415,13 @@ /obj/structure/largecrate/random/case/double, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) +"elf" = ( +/obj/item/reagent_container/glass/bucket{ + pixel_x = 8; + pixel_y = -8 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "eln" = ( /obj/structure/surface/table, /obj/item/book/manual/engineering_guide{ @@ -9877,9 +9474,6 @@ /obj/structure/prop/invuln/ice_prefab, /turf/open/auto_turf/ice/layer0, /area/shiva/exterior/cp_lz2) -"enh" = ( -/turf/open/auto_turf/ice/layer1, -/area/shiva/exterior/research_alley) "eni" = ( /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_lz2) @@ -10142,13 +9736,6 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) -"eGe" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W-corner" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/plating, -/area/shiva/exterior/lz1_valley) "eGq" = ( /obj/structure/platform/strata, /obj/structure/platform/strata{ @@ -10235,17 +9822,6 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) -"eKp" = ( -/obj/item/reagent_container/glass/bucket{ - pixel_x = 8; - pixel_y = -8 - }, -/obj/item/reagent_container/glass/bucket{ - pixel_x = -2; - pixel_y = -8 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "eKY" = ( /obj/structure/closet/radiation, /obj/effect/landmark/crap_item, @@ -10263,11 +9839,6 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_lz2) -"eMx" = ( -/obj/structure/surface/rack, -/obj/item/tool/lighter/zippo, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) "eNr" = ( /obj/structure/bed, /obj/effect/landmark/corpsespawner/prisoner, @@ -10353,11 +9924,14 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) -"eSc" = ( -/obj/structure/surface/rack, -/obj/item/tool/pickaxe/plasmacutter, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) +"eSf" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 2.99; + pixel_x = 12; + pixel_y = 28 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "eSt" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/shiva{ @@ -10379,6 +9953,12 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_colony_grounds) +"eUn" = ( +/obj/structure/prop/invuln/ice_prefab/roof_greeble{ + dir = 1 + }, +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/caves/cp_camp) "eUT" = ( /turf/closed/wall/shiva/prefabricated/white, /area/shiva/exterior/cp_lz2) @@ -10409,6 +9989,10 @@ icon_state = "snow_mat" }, /area/shiva/exterior/cp_lz2) +"eWl" = ( +/obj/structure/inflatable/popped, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/cp_s_research) "eWn" = ( /obj/structure/machinery/iv_drip, /turf/open/floor/shiva{ @@ -10433,6 +10017,10 @@ }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/cp_lz2) +"eXQ" = ( +/obj/structure/inflatable/popped, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "eYH" = ( /turf/closed/wall/shiva/prefabricated/reinforced/hull, /area/shiva/exterior/cp_lz2) @@ -10465,17 +10053,6 @@ /obj/effect/landmark/ert_spawns/groundside_xeno, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/medseceng_caves) -"faR" = ( -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 8; - pixel_y = -9 - }, -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 5; - pixel_y = 10 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "faT" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 8; @@ -10483,20 +10060,6 @@ }, /turf/open/auto_turf/ice/layer0, /area/shiva/exterior/cp_lz2) -"faW" = ( -/obj/structure/prop/ice_colony/poly_kevlon_roll{ - dir = 1 - }, -/obj/structure/prop/ice_colony/poly_kevlon_roll{ - dir = 1; - pixel_y = 5 - }, -/obj/structure/prop/ice_colony/poly_kevlon_roll{ - dir = 1; - pixel_y = 10 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "fbf" = ( /obj/effect/decal/cleanable/blood/oil/streak, /obj/effect/decal/cleanable/dirt, @@ -10510,6 +10073,11 @@ icon_state = "floor3" }, /area/shiva/interior/colony/botany) +"fbS" = ( +/obj/structure/flora/grass/tallgrass/ice/corner, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "fcq" = ( /obj/structure/closet/coffin, /obj/effect/landmark/objective_landmark/close, @@ -10633,9 +10201,6 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/colony/medseceng) -"fjv" = ( -/turf/open/auto_turf/snow/layer4, -/area/shiva/interior/caves/research_caves) "fjI" = ( /obj/structure/surface/table, /obj/item/storage/firstaid/o2, @@ -10718,13 +10283,20 @@ /obj/effect/landmark/objective_landmark/science, /turf/open/floor/wood, /area/shiva/interior/colony/botany) +"fmo" = ( +/obj/structure/platform/strata{ + dir = 4 + }, +/obj/structure/platform/strata, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "fnw" = ( /obj/structure/stairs/perspective/ice{ dir = 1; icon_state = "p_stair_full" }, /turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/lz1_valley) +/area/shiva/interior/caves/research_caves) "fnx" = ( /turf/open/floor/shiva{ dir = 8; @@ -10753,13 +10325,13 @@ icon_state = "floor7" }, /area/shiva/interior/aerodrome) -"fqb" = ( -/obj/item/lightstick/red/spoke/planted{ - pixel_x = 12; - pixel_y = 25 +"fpF" = ( +/obj/structure/stairs/perspective/ice{ + dir = 8; + icon_state = "p_stair_sn_full_cap" }, /turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) +/area/shiva/interior/warehouse/caves) "fqJ" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -10859,7 +10431,7 @@ "fxy" = ( /obj/item/lightstick/variant/planted, /turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "fxJ" = ( /obj/structure/surface/table, /obj/item/clipboard{ @@ -10920,6 +10492,10 @@ icon_state = "greenfull" }, /area/shiva/interior/colony/n_admin) +"fBA" = ( +/obj/structure/machinery/space_heater, +/turf/open/auto_turf/ice/layer1, +/area/shiva/exterior/cp_s_research) "fBJ" = ( /obj/structure/surface/table/woodentable, /obj/item/paper_bin, @@ -10945,6 +10521,10 @@ dir = 1 }, /area/shiva/interior/colony/botany) +"fDH" = ( +/obj/structure/machinery/colony_floodlight, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/junkyard) "fEf" = ( /obj/structure/machinery/vending/snack, /turf/open/floor/shiva{ @@ -11044,7 +10624,7 @@ "fHx" = ( /obj/vehicle/train/cargo/engine, /turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "fHH" = ( /obj/item/stack/sheet/metal, /turf/open/floor/shiva{ @@ -11148,6 +10728,21 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) +"fLk" = ( +/obj/item/clothing/shoes/snow, +/obj/structure/surface/rack, +/obj/item/clothing/shoes/snow, +/obj/item/clothing/suit/storage/snow_suit, +/obj/item/clothing/suit/storage/snow_suit, +/obj/item/tank/emergency_oxygen/engi, +/obj/effect/decal/strata_decals/grime/grime3{ + dir = 8 + }, +/obj/item/clothing/mask/rebreather, +/obj/item/tank/emergency_oxygen/engi, +/obj/item/clothing/mask/rebreather, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/colony/research_hab) "fLz" = ( /obj/structure/machinery/landinglight/ds2{ dir = 4 @@ -11192,10 +10787,25 @@ /obj/structure/bed/chair/office/dark, /turf/open/floor/carpet, /area/shiva/interior/colony/medseceng) +"fNf" = ( +/obj/structure/platform/strata{ + dir = 8 + }, +/obj/structure/platform/strata{ + dir = 1 + }, +/turf/open/gm/river, +/area/shiva/interior/warehouse/caves) "fNE" = ( /obj/structure/window/framed/shiva, /turf/open/floor/plating, /area/shiva/interior/colony/research_hab) +"fOa" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = -11 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "fOE" = ( /obj/item/ammo_magazine/rifle/boltaction, /turf/open/floor/shiva{ @@ -11261,23 +10871,32 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/botany) -"fSR" = ( -/turf/open/floor/shiva, -/area/shiva/interior/caves/research_caves) "fTX" = ( /obj/structure/machinery/space_heater, /turf/open/floor/shiva{ dir = 1 }, /area/shiva/interior/bar) +"fUP" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_y = -5 + }, +/turf/open/floor/shiva{ + dir = 8; + icon_state = "bluefull" + }, +/area/shiva/interior/aerodrome) "fUZ" = ( /obj/item/lightstick/red/planted, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard/cp_bar) -"fVl" = ( -/obj/structure/largecrate/random, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/cp_s_research) +"fVq" = ( +/obj/structure/prop/invuln/ice_prefab/standalone{ + icon_state = "pink" + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "fVw" = ( /obj/structure/prop/ice_colony/dense/planter_box/hydro{ density = 0 @@ -11316,14 +10935,33 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) +"fXp" = ( +/obj/structure/prop/invuln{ + desc = "The mounting points are ground down from heavy use. They'll need some maintenance work before they can be used again."; + icon = 'icons/obj/structures/props/almayer_props.dmi'; + icon_state = "equip_base"; + name = "shuttle attachment point" + }, +/obj/effect/landmark/objective_landmark/close, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/shuttle{ + icon_state = "floor7" + }, +/area/shiva/interior/aerodrome) +"fXr" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 3.1; + pixel_x = -13; + pixel_y = 25 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "fXB" = ( /obj/structure/largecrate/random/case/double, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) -"fXQ" = ( -/obj/structure/largecrate/random/case, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "fXX" = ( /turf/open/floor/plating, /area/shiva/interior/caves/research_caves) @@ -11465,29 +11103,11 @@ /obj/item/stack/rods, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/warehouse) -"ggv" = ( -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 5; - pixel_y = -9 - }, -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 6; - pixel_y = 10 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "ggC" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4; - pixel_y = 4 - }, -/turf/open/floor/shiva{ - dir = 4; - icon_state = "snow_mat" +/obj/item/lightstick/red/spoke/planted{ + pixel_x = 11 }, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "ggL" = ( /obj/structure/inflatable/popped, @@ -11524,6 +11144,9 @@ icon_state = "redfull" }, /area/shiva/interior/colony/research_hab) +"gik" = ( +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/aerodrome) "giH" = ( /obj/structure/machinery/door/airlock/almayer/security/glass/colony, /turf/open/floor/plating, @@ -11596,6 +11219,9 @@ dir = 8 }, /area/shiva/interior/colony/central) +"goe" = ( +/turf/open/auto_turf/ice/layer2, +/area/shiva/interior/aerodrome) "goh" = ( /obj/effect/decal/cleanable/blood{ icon_state = "gib6" @@ -11620,6 +11246,13 @@ /obj/structure/machinery/space_heater, /turf/open/floor/plating, /area/shiva/interior/colony/research_hab) +"gpj" = ( +/obj/item/lightstick/red/variant/planted{ + pixel_x = -7; + pixel_y = -5 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "gpn" = ( /obj/structure/largecrate/random/case, /turf/open/floor/shiva{ @@ -11629,6 +11262,17 @@ "gpz" = ( /turf/open/auto_turf/ice/layer0, /area/shiva/interior/caves/research_caves) +"gpF" = ( +/obj/structure/largecrate/random/case/double, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_y = -5 + }, +/turf/open/floor/shiva{ + dir = 8; + icon_state = "bluefull" + }, +/area/shiva/interior/aerodrome) "gpS" = ( /obj/structure/flora/bush/snow{ icon_state = "snowgrassbb_3" @@ -11674,6 +11318,16 @@ dir = 1 }, /area/shiva/interior/caves/s_lz2) +"grk" = ( +/obj/structure/platform/strata{ + dir = 8 + }, +/obj/structure/stairs/perspective/ice{ + dir = 1; + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/warehouse/caves) "gso" = ( /obj/structure/platform/strata, /turf/open/gm/river, @@ -11739,12 +11393,16 @@ dir = 1 }, /area/shiva/interior/lz2_habs) +"guH" = ( +/obj/structure/prop/ice_colony/surveying_device, +/turf/open/auto_turf/ice/layer0, +/area/shiva/exterior/cp_s_research) "gva" = ( /obj/structure/prop/ice_colony/ground_wire{ dir = 8 }, /obj/item/lightstick/planted, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "gvz" = ( /turf/open/floor{ @@ -11757,12 +11415,6 @@ }, /turf/open/auto_turf/snow/layer3, /area/shiva/interior/colony/medseceng) -"gvY" = ( -/obj/structure/prop/ice_colony/surveying_device{ - dir = 1 - }, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "gwq" = ( /obj/structure/bed/chair/comfy/blue, /turf/open/floor/shiva{ @@ -11887,6 +11539,12 @@ }, /turf/closed/wall/shiva/ice, /area/shiva/interior/caves/cp_camp) +"gEn" = ( +/obj/structure/machinery/portable_atmospherics/powered/scrubber{ + icon_state = "psiphon:1" + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "gFb" = ( /obj/structure/surface/table, /obj/structure/window{ @@ -11991,28 +11649,19 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) -"gJk" = ( -/obj/structure/platform/strata{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/lz1_valley) "gJo" = ( /turf/open/auto_turf/ice/layer1, /area/shiva/exterior/junkyard/cp_bar) +"gJF" = ( +/obj/item/lightstick/red/variant/planted, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "gJI" = ( /obj/structure/surface/rack, /obj/item/stack/cable_coil, /obj/item/tool/crowbar, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_lz2) -"gKf" = ( -/obj/structure/machinery/light/double{ - dir = 8; - pixel_y = -5 - }, -/turf/open/floor/shiva, -/area/shiva/interior/bar) "gKE" = ( /obj/structure/surface/table, /obj/item/stock_parts/matter_bin{ @@ -12128,6 +11777,16 @@ dir = 10 }, /area/shiva/interior/aerodrome) +"gQK" = ( +/obj/structure/platform/strata{ + dir = 8 + }, +/obj/structure/platform/strata{ + dir = 4 + }, +/obj/structure/platform/strata, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "gQL" = ( /obj/structure/closet/cabinet, /obj/item/clothing/under/darkred, @@ -12257,6 +11916,10 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) +"gXu" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "gXS" = ( /turf/open/auto_turf/ice/layer1, /area/shiva/interior/colony/medseceng) @@ -12283,6 +11946,14 @@ /obj/item/lightstick/red/planted, /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/cp_colony_grounds) +"gZi" = ( +/obj/structure/closet/toolcloset, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) +"gZk" = ( +/obj/effect/landmark/hunter_primary, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/caves/cp_camp) "gZG" = ( /obj/structure/machinery/door/airlock/almayer/medical/colony{ dir = 2; @@ -12308,6 +11979,13 @@ /obj/structure/platform/strata, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/oob/dev_room) +"hbp" = ( +/obj/structure/stairs/perspective/ice{ + dir = 1; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/snow/layer4, +/area/shiva/exterior/junkyard) "hbu" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/reagent_container/food/snacks/flour{ @@ -12325,7 +12003,7 @@ /area/shiva/interior/warehouse/caves) "hbD" = ( /obj/structure/flora/grass/tallgrass/ice/corner{ - dir = 10 + dir = 6 }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/lz1_valley) @@ -12341,6 +12019,16 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) +"hfw" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_y = -5 + }, +/turf/open/floor/shiva{ + dir = 8; + icon_state = "redfull" + }, +/area/shiva/interior/colony/research_hab) "hfN" = ( /obj/structure/surface/table, /turf/open/floor/shiva{ @@ -12362,6 +12050,18 @@ /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, /turf/open/floor/plating/plating_catwalk/shiva, /area/shiva/interior/telecomm/lz1_biceps) +"hhT" = ( +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/lz1_valley) +"hic" = ( +/obj/structure/platform_decoration/strata{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/lz1_valley) "hif" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -12377,6 +12077,13 @@ /obj/structure/machinery/disposal, /turf/open/floor/wood, /area/shiva/interior/colony/central) +"hip" = ( +/obj/structure/platform/strata, +/obj/structure/platform/strata{ + dir = 4 + }, +/turf/open/gm/river, +/area/shiva/interior/warehouse/caves) "hju" = ( /turf/open/floor/shiva{ dir = 8; @@ -12400,10 +12107,14 @@ }, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) -"hlh" = ( -/obj/item/tool/pickaxe, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) +"hkZ" = ( +/obj/structure/prop/invuln/ice_prefab/roof_greeble{ + icon_state = "vent4"; + pixel_x = -4; + pixel_y = 10 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) "hlm" = ( /obj/structure/bed/chair{ dir = 8 @@ -12477,6 +12188,10 @@ "hng" = ( /turf/closed/wall/shiva/ice, /area/shiva/exterior/cp_colony_grounds) +"hnj" = ( +/obj/item/lightstick/red/variant/planted, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "hnw" = ( /obj/structure/coatrack, /turf/open/floor/wood, @@ -12562,9 +12277,6 @@ icon_state = "wredfull" }, /area/shiva/interior/colony/medseceng) -"hsu" = ( -/turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) "hsw" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/circuitboard, @@ -12672,6 +12384,15 @@ /obj/structure/flora/tree/dead/tree_2, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_s_research) +"hye" = ( +/obj/structure/prop/ice_colony/flamingo{ + dir = 1 + }, +/obj/structure/platform_decoration/shiva/catwalk{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/lz1_valley) "hyu" = ( /turf/open/floor/shiva{ icon_state = "bluefull" @@ -12715,6 +12436,10 @@ /obj/structure/machinery/door/airlock/multi_tile/almayer/generic, /turf/open/floor/plating, /area/shiva/interior/colony/research_hab) +"hBn" = ( +/obj/effect/landmark/hunter_secondary, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "hBq" = ( /turf/open/auto_turf/snow/layer4, /area/shiva/interior/caves/cp_camp) @@ -12748,7 +12473,7 @@ /obj/structure/prop/ice_colony/ground_wire{ dir = 8 }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "hCt" = ( /obj/structure/machinery/firealarm{ @@ -12826,7 +12551,7 @@ icon_state = "p_stair_sn_full_cap" }, /obj/structure/platform/shiva/catwalk{ - dir = 8 + dir = 4 }, /turf/open/floor/plating, /area/shiva/interior/aerodrome) @@ -12840,6 +12565,18 @@ }, /turf/open/floor/plating, /area/shiva/interior/colony/deck) +"hEx" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = 12; + pixel_y = 25 + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) +"hEB" = ( +/obj/structure/surface/rack, +/obj/item/tool/lighter/zippo, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "hEE" = ( /obj/structure/barricade/handrail/wire{ dir = 8; @@ -12887,6 +12624,15 @@ }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/junkyard/fortbiceps) +"hHR" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W-corner" + }, +/obj/structure/barricade/metal{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shiva/exterior/junkyard) "hHV" = ( /obj/structure/surface/table, /obj/structure/machinery/cell_charger, @@ -12905,12 +12651,6 @@ }, /turf/open/floor/plating/plating_catwalk/shiva, /area/shiva/exterior/lz2_fortress) -"hIn" = ( -/obj/structure/platform_decoration/strata{ - dir = 8 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/lz1_valley) "hIu" = ( /obj/structure/surface/rack, /obj/item/device/radio{ @@ -12935,10 +12675,6 @@ /obj/structure/flora/tree/dead/tree_4, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_colony_grounds) -"hJd" = ( -/obj/structure/prop/ice_colony/soil_net, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) "hJH" = ( /obj/structure/machinery/door/airlock/almayer/maint/colony, /turf/open/floor/plating, @@ -13035,10 +12771,6 @@ /obj/structure/machinery/light/double, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) -"hRF" = ( -/obj/structure/inflatable, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/research_alley) "hRK" = ( /obj/effect/decal/cleanable/blood/drip{ icon_state = "3" @@ -13054,6 +12786,12 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/s_lz2) +"hRY" = ( +/obj/structure/stairs/perspective/ice{ + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/ice/layer0, +/area/shiva/interior/warehouse/caves) "hSa" = ( /obj/effect/landmark/static_comms/net_two, /turf/open/auto_turf/ice/layer1, @@ -13126,6 +12864,13 @@ }, /turf/open/auto_turf/snow/layer4, /area/shiva/exterior/cp_lz2) +"hUA" = ( +/obj/structure/largecrate/random/secure, +/obj/item/ashtray/bronze{ + pixel_y = 7 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "hUG" = ( /obj/effect/landmark/xeno_hive_spawn, /obj/effect/landmark/ert_spawns/groundside_xeno, @@ -13140,13 +12885,6 @@ }, /turf/open/floor/wood, /area/shiva/interior/colony/medseceng) -"hVr" = ( -/obj/effect/landmark/objective_landmark/science, -/turf/open/floor/shiva{ - dir = 4; - icon_state = "snow_mat" - }, -/area/shiva/interior/caves/cp_camp) "hVs" = ( /obj/structure/surface/table, /obj/item/evidencebag{ @@ -13176,16 +12914,6 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) -"hWY" = ( -/obj/structure/machinery/light/double{ - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/shiva{ - dir = 4; - icon_state = "multi_tiles" - }, -/area/shiva/interior/colony/research_hab) "hXB" = ( /obj/structure/flora/grass/tallgrass/ice, /turf/open/auto_turf/snow/layer2, @@ -13264,6 +12992,16 @@ dir = 1 }, /area/shiva/interior/colony/central) +"ibP" = ( +/obj/structure/closet/toolcloset, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_y = -5 + }, +/turf/open/floor/shiva{ + icon_state = "floor3" + }, +/area/shiva/interior/aerodrome) "icC" = ( /obj/structure/machinery/light/double{ dir = 8; @@ -13291,10 +13029,6 @@ icon_state = "kitchen" }, /area/shiva/interior/bar) -"iel" = ( -/obj/structure/prop/ice_colony/surveying_device, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/research_caves) "ieo" = ( /obj/structure/bed/chair/office/light{ dir = 4 @@ -13341,12 +13075,6 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) -"ifQ" = ( -/obj/effect/landmark/nightmare{ - insert_tag = "labs-cave-complete" - }, -/turf/closed/wall/shiva/ice, -/area/shiva/interior/oob) "igl" = ( /obj/item/paper_bin, /obj/item/tool/pen/blue, @@ -13406,6 +13134,10 @@ /obj/effect/landmark/corpsespawner/wygoon, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/colony/central) +"ijm" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/ice/layer2, +/area/shiva/interior/warehouse/caves) "ijq" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/shiva{ @@ -13419,6 +13151,13 @@ /obj/structure/fence, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_lz2) +"ijE" = ( +/obj/structure/platform/strata, +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "ijP" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; @@ -13466,6 +13205,10 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) +"ilW" = ( +/obj/item/lightstick/planted, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "imk" = ( /obj/effect/spider/stickyweb, /turf/open/auto_turf/ice/layer1, @@ -13692,6 +13435,15 @@ icon_state = "red" }, /area/shiva/interior/colony/medseceng) +"ivE" = ( +/obj/structure/platform/strata{ + dir = 1 + }, +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/lz1_valley) "ivS" = ( /obj/structure/filingcabinet, /obj/effect/landmark/objective_landmark/medium, @@ -13853,7 +13605,7 @@ /area/shiva/exterior/cp_lz2) "iDy" = ( /obj/structure/flora/grass/tallgrass/ice/corner{ - dir = 9 + dir = 4 }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/lz1_valley) @@ -13870,7 +13622,7 @@ icon_state = "p_stair_sn_full_cap" }, /obj/structure/platform/shiva/catwalk{ - dir = 4 + dir = 8 }, /turf/open/floor/plating, /area/shiva/interior/aerodrome) @@ -13902,13 +13654,12 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/botany) -"iGn" = ( -/obj/structure/machinery/light/double{ - dir = 4; - pixel_y = -5 +"iHu" = ( +/obj/structure/platform_decoration/shiva/catwalk{ + dir = 8 }, -/turf/open/floor/shiva, -/area/shiva/interior/bar) +/turf/open/auto_turf/snow/layer4, +/area/shiva/exterior/lz1_valley) "iHN" = ( /obj/effect/landmark/survivor_spawner, /turf/open/floor/shiva{ @@ -13942,10 +13693,20 @@ icon_state = "yellowfull" }, /area/shiva/interior/colony/research_hab) +"iIg" = ( +/obj/structure/stairs/perspective/ice{ + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/caves/research_caves) "iIP" = ( /obj/item/device/flashlight/lamp/tripod/grey, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/s_lz2) +"iIR" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "iJr" = ( /obj/effect/decal/cleanable/blood{ icon_state = "gib6" @@ -13969,6 +13730,12 @@ icon_state = "red" }, /area/shiva/interior/colony/medseceng) +"iKW" = ( +/obj/structure/platform_decoration/shiva/catwalk{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/lz1_valley) "iLf" = ( /obj/item/lightstick/red/spoke/planted{ pixel_x = 12; @@ -14012,6 +13779,15 @@ /obj/effect/decal/cleanable/blood, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/colony/central) +"iOp" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S-corner" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E-corner" + }, +/turf/open/floor/plating, +/area/shiva/exterior/lz1_valley) "iOr" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 9 @@ -14086,13 +13862,6 @@ icon_state = "floor3" }, /area/shiva/interior/colony/central) -"iSp" = ( -/obj/item/tool/screwdriver, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) -"iSG" = ( -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "iTQ" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -14268,12 +14037,6 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) -"iYu" = ( -/obj/structure/surface/rack, -/obj/item/device/flashlight, -/obj/item/device/t_scanner, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) "iYC" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/interior/plastic/alt, @@ -14295,9 +14058,6 @@ dir = 1 }, /area/shiva/interior/garage) -"iZI" = ( -/turf/closed/wall/shiva/prefabricated/blue, -/area/shiva/interior/caves/cp_camp) "iZX" = ( /obj/structure/machinery/power/apc{ dir = 4; @@ -14321,6 +14081,9 @@ /obj/item/lightstick/red/planted, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/valley) +"jaT" = ( +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/warehouse/caves) "jaU" = ( /obj/structure/surface/table, /obj/item/device/whistle, @@ -14363,6 +14126,12 @@ }, /turf/open/floor/carpet, /area/shiva/interior/colony/research_hab) +"jfO" = ( +/obj/effect/spider/stickyweb{ + icon_state = "stickyweb2" + }, +/turf/open/auto_turf/ice/layer2, +/area/shiva/interior/caves/cp_camp) "jfS" = ( /obj/effect/landmark/nightmare{ insert_tag = "lz2-south-caves" @@ -14379,6 +14148,12 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/botany) +"jhm" = ( +/obj/structure/platform/shiva/catwalk{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer4, +/area/shiva/exterior/lz1_valley) "jhq" = ( /turf/open/floor/shiva{ icon_state = "radiator_tile" @@ -14410,11 +14185,6 @@ dir = 1 }, /area/shiva/interior/colony/s_admin) -"jjq" = ( -/obj/structure/surface/rack, -/obj/effect/spawner/random/toolbox, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) "jkH" = ( /obj/item/lightstick/red/spoke/planted{ layer = 3.1; @@ -14423,16 +14193,12 @@ }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/junkyard) -"jkM" = ( -/obj/structure/machinery/door_control/brbutton{ - id = "hangar_ice_2"; - pixel_y = 28 - }, -/obj/structure/platform/shiva/catwalk{ - dir = 8 +"jld" = ( +/obj/item/shard{ + icon_state = "medium" }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/lz1_valley) +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "jlv" = ( /obj/item/stack/sheet/wood, /obj/effect/decal/cleanable/blood{ @@ -14464,21 +14230,6 @@ "jmW" = ( /turf/open/auto_turf/ice/layer2, /area/shiva/interior/caves/cp_camp) -"jnc" = ( -/obj/structure/prop/invuln{ - desc = "The mounting points are ground down from heavy use. They'll need some maintenance work before they can be used again."; - icon = 'icons/obj/structures/props/almayer_props.dmi'; - icon_state = "equip_base"; - name = "shuttle attachment point" - }, -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/effect/landmark/objective_landmark/close, -/turf/open/shuttle{ - icon_state = "floor7" - }, -/area/shiva/interior/aerodrome) "jny" = ( /obj/structure/filingcabinet, /obj/effect/landmark/objective_landmark/close, @@ -14532,7 +14283,7 @@ pixel_x = 15; pixel_y = -3 }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "jpE" = ( /obj/structure/machinery/portable_atmospherics/hydroponics, @@ -14541,7 +14292,7 @@ "jqo" = ( /obj/item/lightstick/planted, /obj/effect/decal/cleanable/blood/drip, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "jqx" = ( /obj/structure/platform/strata, @@ -14647,6 +14398,13 @@ icon_state = "warnplate" }, /area/shiva/interior/colony/medseceng) +"jzs" = ( +/obj/structure/largecrate/random/mini/wooden{ + pixel_x = -16; + pixel_y = -1 + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/warehouse/caves) "jAg" = ( /turf/open/floor/shiva{ icon_state = "snow_mat" @@ -14713,7 +14471,7 @@ icon_state = "large"; name = "ice shard" }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "jDp" = ( /obj/structure/surface/table/woodentable, @@ -14726,6 +14484,14 @@ icon_state = "floor3" }, /area/shiva/interior/bar) +"jDv" = ( +/obj/structure/ice/thin/single{ + opacity = 1; + unacidable = 0 + }, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/ice/layer1, +/area/shiva/exterior/valley) "jDB" = ( /obj/item/shard, /turf/open/floor/shiva{ @@ -14833,6 +14599,14 @@ }, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) +"jKm" = ( +/obj/structure/prop/invuln/ice_prefab/roof_greeble{ + icon_state = "vent5"; + pixel_x = 16; + pixel_y = 10 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) "jKN" = ( /obj/structure/fence, /turf/open/auto_turf/snow/layer0, @@ -14877,11 +14651,21 @@ icon_state = "chapel" }, /area/shiva/interior/colony/central) +"jNr" = ( +/obj/structure/machinery/colony_floodlight, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "jOi" = ( /turf/open/floor/shiva{ icon_state = "floor3" }, /area/shiva/interior/caves/cp_camp) +"jOv" = ( +/obj/structure/surface/rack, +/obj/item/device/flashlight, +/obj/item/device/t_scanner, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "jOA" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/item/weapon/gun/smg/pps43, @@ -14944,12 +14728,6 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/junkyard) -"jQt" = ( -/obj/structure/platform/shiva/catwalk{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer4, -/area/shiva/exterior/lz1_valley) "jQy" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/medidoor/colony{ dir = 1; @@ -15037,6 +14815,13 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/colony/medseceng) +"jWh" = ( +/obj/structure/stairs/perspective/ice{ + dir = 1; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/warehouse/caves) "jWL" = ( /obj/structure/machinery/space_heater, /obj/structure/machinery/light/double{ @@ -15052,6 +14837,15 @@ /obj/structure/flora/tree/dead/tree_4, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) +"jXM" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_y = -5 + }, +/turf/open/floor/shiva{ + icon_state = "floor3" + }, +/area/shiva/interior/colony/research_hab) "jYO" = ( /obj/item/lightstick/red/spoke/planted{ layer = 3.1; @@ -15160,6 +14954,11 @@ icon_state = "yellowfull" }, /area/shiva/interior/colony/medseceng) +"kch" = ( +/obj/structure/surface/rack, +/obj/item/tool/pickaxe/plasmacutter, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "kcB" = ( /obj/structure/machinery/landinglight/ds2/spoke, /obj/structure/machinery/landinglight/ds2/delayone{ @@ -15239,14 +15038,6 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/junkyard) -"kfl" = ( -/obj/structure/surface/table/reinforced/prison, -/obj/effect/decal/warning_stripes{ - icon_state = "W-corner" - }, -/obj/structure/machinery/computer/shuttle/dropship/flight/lz1, -/turf/open/floor/plating, -/area/shiva/exterior/lz1_console) "kfW" = ( /obj/effect/decal/cleanable/blood/oil, /obj/effect/decal/cleanable/dirt, @@ -15345,13 +15136,19 @@ }, /turf/open/floor/plating, /area/shiva/interior/aerodrome) -"kjU" = ( -/obj/structure/machinery/light/double{ - dir = 8; - pixel_y = -5 +"kjX" = ( +/obj/structure/stairs/perspective/ice{ + dir = 1; + icon_state = "p_stair_full" }, -/turf/open/floor/wood, -/area/shiva/interior/aerodrome) +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/warehouse/caves) +"klF" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/cp_s_research) "klN" = ( /obj/effect/spider/stickyweb{ icon_state = "stickyweb2" @@ -15370,6 +15167,13 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/interior/colony/medseceng) +"kmO" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_y = -5 + }, +/turf/open/floor/shiva, +/area/shiva/interior/colony/research_hab) "kng" = ( /turf/open/auto_turf/ice/layer0, /area/shiva/interior/caves/right_spiders) @@ -15412,17 +15216,6 @@ icon_state = "radiator_tile2" }, /area/shiva/interior/colony/central) -"kqE" = ( -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 4; - pixel_y = -9 - }, -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 1; - pixel_y = 10 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "kqH" = ( /obj/structure/machinery/firealarm{ dir = 8; @@ -15449,12 +15242,6 @@ icon_state = "green" }, /area/shiva/interior/colony/botany) -"krT" = ( -/obj/effect/landmark/nightmare{ - insert_tag = "labs-elevator" - }, -/turf/closed/wall/shiva/prefabricated/orange, -/area/shiva/interior/colony/research_hab) "krU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/largecrate/random/barrel/white, @@ -15556,6 +15343,9 @@ /obj/structure/fence, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/lz1_valley) +"kwa" = ( +/turf/open/floor/plating, +/area/shiva/exterior/junkyard) "kwc" = ( /obj/structure/bed/chair/comfy/blue, /obj/structure/machinery/light/double{ @@ -15601,6 +15391,10 @@ /obj/structure/largecrate/random/barrel/green, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) +"kyt" = ( +/obj/item/tool/shovel/snow, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/cp_s_research) "kyu" = ( /obj/structure/surface/table, /obj/structure/machinery/door/window/eastright{ @@ -15611,15 +15405,6 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/research_hab) -"kyw" = ( -/obj/structure/barricade/metal{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W-corner" - }, -/turf/open/floor/plating, -/area/shiva/exterior/lz1_valley) "kyD" = ( /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/junkyard) @@ -15655,6 +15440,27 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/colony/medseceng) +"kAd" = ( +/obj/structure/closet/radiation, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) +"kAg" = ( +/mob/living/simple_animal/hostile/retaliate/clown{ + desc = "Uh oh, looks like Gonzo got blocked by a cave-in. How is he gonna get out of this one?"; + health = 10000; + move_to_delay = 2; + name = "Gonzo the Magnificent"; + rapid = 1 + }, +/obj/effect/decal/hefa_cult_decals/d96{ + desc = "Original map by Infernus, remapped by Triiodine." + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/oob/dev_room) +"kAm" = ( +/obj/structure/flora/tree/dead/tree_6, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "kAp" = ( /obj/item/stack/sheet/metal/small_stack, /obj/structure/foamed_metal, @@ -15771,13 +15577,6 @@ /obj/effect/landmark/static_comms/net_one, /turf/open/floor/wood, /area/shiva/interior/aerodrome) -"kGO" = ( -/obj/structure/platform/shiva/catwalk{ - dir = 8 - }, -/obj/item/lightstick/red/variant/planted, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/lz1_valley) "kGW" = ( /obj/structure/flora/tree/dead/tree_2, /turf/open/auto_turf/snow/layer2, @@ -15793,13 +15592,13 @@ icon_state = "redfull" }, /area/shiva/interior/colony/medseceng) -"kIo" = ( -/obj/structure/platform/shiva/catwalk{ - dir = 4 +"kHG" = ( +/obj/structure/largecrate/random/mini/med, +/obj/effect/landmark/objective_landmark/close, +/turf/open/floor/shiva{ + icon_state = "floor3" }, -/obj/item/lightstick/red/variant/planted, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/lz1_valley) +/area/shiva/interior/caves/cp_camp) "kIq" = ( /obj/structure/bed/chair, /turf/open/floor/shiva{ @@ -16030,6 +15829,10 @@ icon_state = "yellowfull" }, /area/shiva/interior/colony/research_hab) +"kRq" = ( +/obj/item/lightstick/red/variant/planted, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "kRI" = ( /obj/structure/surface/table, /turf/open/floor/shiva{ @@ -16068,10 +15871,6 @@ }, /turf/open/gm/river, /area/shiva/interior/caves/cp_camp) -"kSW" = ( -/obj/item/circuitboard, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "kTd" = ( /turf/open/auto_turf/ice/layer0, /area/shiva/interior/colony/research_hab) @@ -16109,12 +15908,6 @@ }, /turf/open/floor/shiva, /area/shiva/interior/colony/research_hab) -"kVs" = ( -/obj/structure/platform_decoration/strata{ - dir = 1 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/valley) "kVA" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/weapon/twohanded/fireaxe, @@ -16276,11 +16069,8 @@ /turf/open/floor/plating, /area/shiva/interior/colony/central) "leg" = ( -/obj/effect/spider/cocoon{ - icon_state = "cocoon_large1" - }, -/turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) +/turf/closed/wall/shiva/prefabricated/reinforced/hull, +/area/shiva/exterior/telecomm/lz1_north) "lfe" = ( /obj/structure/prop/ice_colony/soil_net, /turf/open/auto_turf/snow/layer1, @@ -16332,12 +16122,12 @@ /obj/structure/surface/rack, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/junkyard/fortbiceps) -"lhu" = ( -/obj/effect/landmark/nightmare{ - insert_tag = "south-spidercave" +"lhP" = ( +/obj/structure/prop/invuln/ice_prefab/standalone/trim{ + icon_state = "pink_trim" }, -/turf/closed/wall/shiva/ice, -/area/shiva/interior/oob) +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "lip" = ( /obj/structure/flora/grass/tallgrass/ice/corner{ dir = 10 @@ -16389,6 +16179,9 @@ icon_state = "redfull" }, /area/shiva/interior/colony/research_hab) +"llZ" = ( +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/warehouse/caves) "lmt" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/auto_turf/snow/layer0, @@ -16444,7 +16237,7 @@ layer = 2.9 }, /turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "lok" = ( /obj/structure/cargo_container/ferret/left, /turf/open/auto_turf/snow/layer3, @@ -16505,6 +16298,17 @@ dir = 1 }, /area/shiva/interior/lz2_habs) +"lqu" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/colony/research_hab) +"lqT" = ( +/obj/effect/spider/stickyweb{ + icon_state = "stickyweb2" + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/caves/cp_camp) "lqY" = ( /obj/structure/largecrate/random/mini/small_case{ pixel_x = -9; @@ -16552,12 +16356,12 @@ icon_state = "kitchen" }, /area/shiva/interior/colony/central) -"ltJ" = ( -/obj/structure/platform_decoration/shiva/catwalk{ - dir = 8 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/lz1_valley) +"ltA" = ( +/obj/structure/surface/rack, +/obj/item/tool/shovel/snow, +/obj/item/storage/belt/utility/full, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) "luD" = ( /obj/structure/machinery/space_heater, /turf/open/auto_turf/snow/layer1, @@ -16636,15 +16440,6 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) -"lyE" = ( -/obj/structure/platform_decoration/shiva/catwalk{ - dir = 4 - }, -/obj/structure/prop/ice_colony/flamingo{ - dir = 1 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/lz1_valley) "lzQ" = ( /obj/effect/decal/warning_stripes{ icon_state = "NS-center" @@ -16660,8 +16455,11 @@ /turf/open/floor/plating, /area/shiva/interior/caves/research_caves) "lAN" = ( -/obj/item/lightstick/red/variant/planted, -/turf/open/auto_turf/ice/layer1, +/obj/effect/decal/cleanable/blood{ + dir = 4; + icon_state = "gib6" + }, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "lBC" = ( /obj/structure/machinery/landinglight/ds2/delaythree{ @@ -16675,18 +16473,13 @@ /obj/item/tool/pickaxe, /turf/open/auto_turf/ice/layer0, /area/shiva/interior/caves/s_lz2) -"lCe" = ( -/obj/structure/platform_decoration/shiva/catwalk{ - dir = 8 - }, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/lz1_valley) -"lCp" = ( -/obj/structure/platform_decoration/shiva/catwalk{ - dir = 4 +"lCg" = ( +/obj/structure/stairs/perspective{ + dir = 1; + icon_state = "p_stair_sn_full_cap" }, -/turf/open/auto_turf/snow/layer4, -/area/shiva/exterior/lz1_valley) +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "lDv" = ( /obj/structure/machinery/computer/crew, /turf/open/floor/shiva{ @@ -16750,6 +16543,12 @@ }, /turf/open/gm/river/no_overlay, /area/shiva/interior/caves/cp_camp) +"lGT" = ( +/obj/structure/stairs/perspective{ + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "lGU" = ( /obj/structure/surface/table, /obj/item/storage/fancy/cigarettes/lucky_strikes{ @@ -16846,14 +16645,14 @@ icon_state = "greencorners" }, /area/shiva/interior/colony/botany) +"lLf" = ( +/obj/item/tool/screwdriver, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "lLv" = ( /obj/structure/machinery/power/port_gen/pacman, /turf/open/floor/plating, /area/shiva/exterior/lz1_valley) -"lLE" = ( -/obj/structure/prop/invuln/ice_prefab/standalone, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/research_alley) "lMO" = ( /obj/structure/barricade/snow{ dir = 8 @@ -16966,6 +16765,9 @@ icon_state = "floor3" }, /area/shiva/interior/valley_huts) +"lRJ" = ( +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/colony/research_hab) "lSz" = ( /obj/effect/landmark/survivor_spawner, /turf/open/floor/shiva{ @@ -17007,16 +16809,6 @@ icon_state = "snow_mat" }, /area/shiva/interior/colony/botany) -"lUL" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W-corner" - }, -/obj/item/lightstick/red/spoke/planted{ - pixel_x = -11; - pixel_y = 25 - }, -/turf/open/floor/plating, -/area/shiva/exterior/lz1_valley) "lUQ" = ( /obj/structure/closet/toolcloset, /obj/effect/landmark/objective_landmark/close, @@ -17046,15 +16838,6 @@ }, /turf/open/gm/river/no_overlay, /area/shiva/interior/colony/central) -"lVJ" = ( -/obj/structure/surface/rack, -/obj/item/tool/shovel/snow, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) -"lVN" = ( -/obj/structure/closet/radiation, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "lWr" = ( /obj/structure/barricade/handrail/strata, /obj/structure/surface/table, @@ -17063,6 +16846,16 @@ dir = 1 }, /area/shiva/interior/colony/central) +"lWC" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W-corner" + }, +/obj/item/lightstick/red/spoke/planted{ + pixel_x = -10; + pixel_y = -1 + }, +/turf/open/floor/plating, +/area/shiva/exterior/junkyard) "lWL" = ( /obj/effect/spider/cocoon{ icon_state = "cocoon_large3" @@ -17123,6 +16916,13 @@ icon_state = "floor3" }, /area/shiva/interior/bar) +"lXQ" = ( +/obj/structure/stairs/perspective/ice{ + dir = 1; + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/warehouse/caves) "lYf" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 4; @@ -17232,10 +17032,6 @@ }, /turf/open/floor/plating, /area/shiva/exterior/lz1_valley) -"mda" = ( -/obj/structure/prop/ice_colony/soil_net, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "mdx" = ( /turf/open/floor/shiva{ dir = 1 @@ -17322,7 +17118,7 @@ "mhs" = ( /obj/effect/spawner/random/powercell, /turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "mhx" = ( /obj/structure/machinery/light/double, /turf/open/floor/shiva{ @@ -17340,10 +17136,6 @@ "mib" = ( /turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/medseceng_caves) -"mie" = ( -/obj/structure/prop/ice_colony/surveying_device/measuring_device, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/research_caves) "miD" = ( /turf/open/floor/shiva{ dir = 4; @@ -17362,6 +17154,13 @@ /obj/structure/largecrate/random/case/small, /turf/open/floor/plating, /area/shiva/interior/colony/central) +"mkC" = ( +/obj/structure/stairs/perspective{ + dir = 4; + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "mkK" = ( /obj/structure/surface/table/reinforced/prison, /turf/open/floor/shiva{ @@ -17384,14 +17183,6 @@ dir = 1 }, /area/shiva/interior/colony/deck) -"mmW" = ( -/obj/structure/prop/invuln/ice_prefab/roof_greeble{ - icon_state = "vent5"; - pixel_x = 16; - pixel_y = 10 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "mnD" = ( /turf/open/floor/shiva{ icon_state = "radiator_tile2" @@ -17403,12 +17194,6 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/interior/colony/medseceng) -"mnZ" = ( -/turf/open/floor/shiva{ - dir = 4; - icon_state = "snow_mat" - }, -/area/shiva/interior/caves/cp_camp) "moV" = ( /obj/structure/closet/crate/freezer/rations, /obj/item/reagent_container/food/snacks/bigbiteburger, @@ -17426,6 +17211,10 @@ }, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) +"mpI" = ( +/obj/structure/fence, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/caves/cp_camp) "mqd" = ( /obj/structure/filingcabinet, /obj/item/paper/research_notes, @@ -17477,10 +17266,6 @@ icon_state = "green" }, /area/shiva/interior/colony/botany) -"msh" = ( -/obj/structure/flora/tree/dead/tree_6, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) "msu" = ( /obj/structure/closet/bodybag, /obj/effect/landmark/objective_landmark/close, @@ -17519,13 +17304,6 @@ /obj/structure/fence, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) -"muI" = ( -/obj/structure/barricade/handrail/wire{ - dir = 4 - }, -/obj/structure/barricade/handrail/wire, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "muN" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/device/flashlight/lamp, @@ -17575,12 +17353,25 @@ icon_state = "floor3" }, /area/shiva/interior/bar) +"mxr" = ( +/obj/structure/stairs/perspective/ice{ + dir = 8; + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/junkyard) "myR" = ( /obj/structure/prop/invuln/ice_prefab/trim{ dir = 8 }, /turf/closed/wall/shiva/ice, /area/shiva/interior/caves/s_lz2) +"mzf" = ( +/obj/structure/flora/bush/snow{ + icon_state = "snowgrassbb_3" + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "mzx" = ( /obj/structure/prop/invuln/ice_prefab/standalone/trim, /turf/open/auto_turf/snow/layer2, @@ -17658,6 +17449,15 @@ icon_state = "bluefull" }, /area/shiva/interior/colony/s_admin) +"mCG" = ( +/obj/structure/platform_decoration/strata{ + dir = 4 + }, +/obj/structure/platform_decoration/strata{ + dir = 8 + }, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "mCQ" = ( /obj/structure/prop/ice_colony/surveying_device/measuring_device{ dir = 1; @@ -17725,6 +17525,15 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) +"mGk" = ( +/obj/item/tool/shovel/snow, +/obj/item/storage/fancy/cigarettes/arcturian_ace{ + layer = 3.1; + pixel_x = -8; + pixel_y = 23 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "mGn" = ( /obj/structure/machinery/light/double{ dir = 4; @@ -17840,6 +17649,10 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) +"mKD" = ( +/obj/structure/machinery/cell_charger, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "mKF" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/auto_turf/ice/layer1, @@ -17863,12 +17676,6 @@ icon_state = "floor3" }, /area/shiva/interior/bar) -"mLR" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W-corner" - }, -/turf/open/floor/plating, -/area/shiva/exterior/lz1_valley) "mLT" = ( /obj/structure/machinery/alarm{ pixel_y = 24 @@ -17890,6 +17697,19 @@ }, /turf/open/floor/plating, /area/shiva/interior/colony/medseceng) +"mME" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 2.99; + pixel_x = -13; + pixel_y = 28 + }, +/obj/structure/largecrate/random/mini/small_case/b, +/obj/structure/largecrate/random/mini/small_case{ + pixel_x = 14; + pixel_y = -3 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "mMK" = ( /turf/open/auto_turf/snow/layer4, /area/shiva/exterior/cp_lz2) @@ -17915,10 +17735,6 @@ }, /turf/open/auto_turf/snow/layer4, /area/shiva/exterior/lz1_valley) -"mOT" = ( -/mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) "mOY" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/shiva, @@ -17997,22 +17813,6 @@ icon_state = "floor3" }, /area/shiva/interior/colony/central) -"mTN" = ( -/obj/structure/barricade/handrail/wire{ - dir = 8 - }, -/obj/structure/prop/ice_colony/surveying_device/measuring_device{ - dir = 4; - pixel_x = -5; - pixel_y = -2 - }, -/obj/structure/prop/ice_colony/surveying_device/measuring_device{ - dir = 1; - pixel_x = 7; - pixel_y = 16 - }, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "mUB" = ( /obj/item/lightstick/red/spoke/planted{ layer = 2.99; @@ -18032,15 +17832,6 @@ }, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard/cp_bar) -"mUT" = ( -/obj/structure/machinery/light/double{ - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/shiva{ - icon_state = "floor3" - }, -/area/shiva/interior/colony/research_hab) "mVl" = ( /obj/structure/prop/dam/truck, /turf/open/floor/shiva{ @@ -18187,6 +17978,11 @@ icon_state = "floor3" }, /area/shiva/interior/colony/central) +"ndb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/colony/research_hab) "ndJ" = ( /obj/structure/flora/bush/snow{ icon_state = "snowgrassall_3" @@ -18293,12 +18089,22 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/n_admin) -"nhF" = ( -/obj/structure/prop/ice_colony/surveying_device{ - dir = 4 +"nig" = ( +/obj/structure/prop/invuln/ice_prefab/standalone/trim{ + icon_state = "pink_trim" }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer4, /area/shiva/interior/caves/cp_camp) +"nij" = ( +/obj/item/circuitboard, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) +"niA" = ( +/obj/structure/stairs/perspective/ice{ + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/caves/research_caves) "niL" = ( /obj/structure/platform/strata{ dir = 8 @@ -18311,10 +18117,6 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_lz2) -"nkH" = ( -/obj/structure/girder, -/turf/open/floor/shiva, -/area/shiva/interior/caves/research_caves) "nlx" = ( /obj/structure/platform/strata, /obj/structure/platform/strata{ @@ -18334,6 +18136,13 @@ dir = 1 }, /area/shiva/exterior/lz2_fortress) +"nmf" = ( +/obj/structure/prop/invuln/ice_prefab/standalone/trim{ + icon_state = "pink_trim" + }, +/obj/structure/prop/invuln/ice_prefab/roof_greeble, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "nmi" = ( /obj/item/weapon/twohanded/spear, /turf/open/floor/shiva{ @@ -18390,6 +18199,10 @@ }, /turf/open/auto_turf/snow/layer3, /area/shiva/interior/colony/medseceng) +"npY" = ( +/obj/structure/inflatable, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) "nqu" = ( /turf/open/floor/shiva{ dir = 1; @@ -18473,6 +18286,18 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) +"nvu" = ( +/obj/structure/platform/strata{ + dir = 1 + }, +/obj/structure/platform/strata{ + dir = 4 + }, +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "nvS" = ( /turf/open/floor/shiva{ dir = 8; @@ -18496,6 +18321,17 @@ /obj/structure/machinery/space_heater, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard) +"nxt" = ( +/obj/structure/platform_decoration/strata{ + dir = 1 + }, +/obj/item/lightstick/red/variant/planted{ + pixel_x = -7; + pixel_y = -5 + }, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "nxA" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -18504,6 +18340,17 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) +"nyc" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) +"nyS" = ( +/obj/structure/platform/strata{ + dir = 8 + }, +/obj/structure/platform/strata, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "nzf" = ( /obj/structure/surface/table, /obj/structure/noticeboard{ @@ -18524,10 +18371,11 @@ /turf/open/floor/shiva, /area/shiva/interior/colony/research_hab) "nzr" = ( -/obj/structure/barricade/handrail/wire{ - dir = 8 +/obj/effect/decal/cleanable/blood{ + dir = 4; + icon_state = "gib6" }, -/turf/open/auto_turf/ice/layer0, +/turf/open/auto_turf/snow/layer2, /area/shiva/interior/caves/cp_camp) "nzR" = ( /obj/structure/largecrate/random/case/small, @@ -18537,18 +18385,6 @@ /obj/item/tool/crowbar, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard) -"nAp" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/desertdam/decals/road_stop{ - icon_state = "road_edge_decal8" - }, -/turf/open/floor/shiva{ - dir = 1; - icon_state = "purplefull" - }, -/area/shiva/interior/colony/research_hab) "nAs" = ( /obj/effect/decal/cleanable/blood/oil, /turf/open/auto_turf/snow/layer1, @@ -18625,6 +18461,16 @@ }, /turf/open/floor/plating, /area/shiva/exterior/lz1_valley) +"nEQ" = ( +/obj/structure/inflatable, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) +"nEU" = ( +/obj/structure/prop/ice_colony/ground_wire{ + dir = 1 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "nEZ" = ( /obj/structure/machinery/vending/snack, /turf/open/floor/shiva{ @@ -18667,14 +18513,6 @@ dir = 1 }, /area/shiva/interior/colony/n_admin) -"nHp" = ( -/obj/structure/prop/invuln/ice_prefab/roof_greeble{ - icon_state = "vent4"; - pixel_x = -4; - pixel_y = 10 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "nHt" = ( /obj/structure/machinery/light/double{ dir = 1; @@ -18692,6 +18530,13 @@ }, /turf/open/floor/shiva, /area/shiva/interior/colony/research_hab) +"nIA" = ( +/obj/item/lightstick/red/variant/planted, +/obj/structure/platform/shiva/catwalk{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/aerodrome) "nIB" = ( /obj/structure/surface/table, /obj/item/device/taperecorder, @@ -18707,10 +18552,6 @@ }, /turf/open/floor/wood, /area/shiva/interior/bar) -"nJu" = ( -/obj/item/frame/rack, -/turf/open/auto_turf/snow/layer0, -/area/shiva/interior/caves/cp_camp) "nKc" = ( /obj/structure/machinery/door/airlock/almayer/medical/colony{ dir = 1; @@ -18783,15 +18624,6 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) -"nNl" = ( -/obj/structure/platform/strata{ - dir = 1 - }, -/obj/structure/platform/strata{ - dir = 4 - }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/lz1_valley) "nNN" = ( /obj/structure/bed/chair/comfy/black{ dir = 8 @@ -18819,13 +18651,6 @@ }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/cp_colony_grounds) -"nOw" = ( -/obj/structure/stairs/perspective/ice{ - dir = 8; - icon_state = "p_stair_sn_full_cap" - }, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/lz1_valley) "nOB" = ( /obj/item/stack/sheet/metal, /turf/open/floor/shiva{ @@ -18833,6 +18658,15 @@ icon_state = "purplefull" }, /area/shiva/interior/colony/research_hab) +"nOK" = ( +/obj/structure/platform/strata{ + dir = 1 + }, +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/gm/river, +/area/shiva/exterior/cp_s_research) "nPb" = ( /obj/structure/prop/ice_colony/soil_net, /obj/structure/platform/strata{ @@ -18870,10 +18704,13 @@ icon_state = "bluefull" }, /area/shiva/interior/colony/n_admin) -"nRL" = ( -/obj/item/device/flashlight, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) +"nRD" = ( +/obj/structure/stairs/perspective/ice{ + dir = 1; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/warehouse/caves) "nSI" = ( /obj/structure/machinery/light/double{ dir = 1; @@ -18910,6 +18747,12 @@ }, /turf/open/floor/wood, /area/shiva/interior/aerodrome) +"nUk" = ( +/obj/structure/platform/strata{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "nUn" = ( /obj/structure/bed/chair{ dir = 8 @@ -18977,6 +18820,13 @@ "nZA" = ( /turf/open/auto_turf/ice/layer0, /area/shiva/interior/warehouse/caves) +"nZG" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = -16; + pixel_y = -3 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "nZM" = ( /obj/structure/filingcabinet, /obj/effect/landmark/objective_landmark/close, @@ -19034,12 +18884,6 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_lz2) -"ocl" = ( -/obj/effect/landmark/nightmare{ - insert_tag = "labs-larder" - }, -/turf/closed/wall/shiva/prefabricated/blue, -/area/shiva/interior/colony/research_hab) "ocv" = ( /obj/item/weapon/ice_axe/red, /turf/open/auto_turf/ice/layer0, @@ -19062,16 +18906,6 @@ }, /turf/open/floor/shiva, /area/shiva/interior/bar) -"ocI" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W-corner" - }, -/obj/item/lightstick/red/spoke/planted{ - pixel_x = -10; - pixel_y = -1 - }, -/turf/open/floor/plating, -/area/shiva/exterior/lz1_valley) "odb" = ( /obj/structure/machinery/light/double{ dir = 8; @@ -19101,10 +18935,6 @@ }, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/lz1_valley) -"ofr" = ( -/obj/item/frame/rack, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "ofw" = ( /turf/open/auto_turf/snow/layer4, /area/shiva/exterior/junkyard) @@ -19150,6 +18980,12 @@ icon_state = "yellowfull" }, /area/shiva/interior/garage) +"ohd" = ( +/obj/structure/prop/ice_colony/ground_wire{ + dir = 1 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "ohq" = ( /obj/structure/largecrate/random/case, /turf/open/floor/shiva{ @@ -19168,6 +19004,17 @@ /obj/structure/flora/tree/dead/tree_1, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard) +"oiL" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = 15; + pixel_y = -3 + }, +/obj/item/lightstick/red/spoke/planted{ + pixel_x = -16; + pixel_y = -3 + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/exterior/cp_s_research) "oiX" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 10 @@ -19179,6 +19026,13 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/valley) +"okc" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_y = -5 + }, +/turf/open/floor/wood, +/area/shiva/interior/aerodrome) "okz" = ( /obj/effect/decal/cleanable/blood{ layer = 3 @@ -19195,9 +19049,6 @@ icon_state = "redfull" }, /area/shiva/interior/colony/medseceng) -"ols" = ( -/turf/closed/wall/shiva/prefabricated/reinforced/hull, -/area/shiva/exterior/valley) "olI" = ( /obj/item/device/pinpointer, /turf/open/floor/shiva{ @@ -19219,10 +19070,6 @@ /obj/item/evidencebag, /turf/open/floor/wood, /area/shiva/interior/colony/medseceng) -"onF" = ( -/obj/item/lightstick/red/variant/planted, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) "onM" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -19299,6 +19146,10 @@ dir = 1 }, /area/shiva/interior/colony/central) +"ork" = ( +/obj/structure/flora/tree/dead/tree_1, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "ors" = ( /obj/effect/decal/cleanable/dirt, /turf/open/auto_turf/ice/layer1, @@ -19322,6 +19173,16 @@ /obj/structure/prop/ice_colony/dense/ice_tray, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) +"osV" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_y = -5 + }, +/turf/open/floor/shiva{ + dir = 4; + icon_state = "multi_tiles" + }, +/area/shiva/interior/colony/research_hab) "otA" = ( /obj/structure/machinery/computer/cameras/wooden_tv{ pixel_y = 7 @@ -19377,7 +19238,7 @@ "owr" = ( /obj/structure/flora/bush/ausbushes/lavendergrass, /turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "owt" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -19451,14 +19312,6 @@ /obj/structure/largecrate, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/warehouse/caves) -"oCk" = ( -/obj/item/lightstick/red/spoke/planted{ - layer = 2.99; - pixel_x = 12; - pixel_y = 28 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/valley) "oCr" = ( /obj/item/shard{ icon_state = "large" @@ -19689,9 +19542,16 @@ "oQl" = ( /turf/closed/wall/shiva/ice, /area/shiva/exterior/valley) +"oQo" = ( +/turf/closed/wall/shiva/prefabricated, +/area/shiva/exterior/cp_s_research) "oRH" = ( /turf/open/auto_turf/snow/layer2, /area/shiva/interior/caves/cp_camp) +"oRK" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/valley) "oSU" = ( /obj/structure/machinery/disposal, /turf/open/floor/shiva{ @@ -19779,6 +19639,7 @@ /obj/structure/platform/strata{ dir = 4 }, +/obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/junkyard) "oZs" = ( @@ -19841,7 +19702,7 @@ "pct" = ( /obj/effect/spider/stickyweb, /turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) +/area/shiva/interior/caves/cp_camp) "pcC" = ( /obj/item/tool/pen/blue, /obj/structure/surface/table/reinforced/prison, @@ -19869,22 +19730,11 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/largecrate/random/barrel/yellow, /obj/structure/machinery/light/double{ - dir = 4; + dir = 8; pixel_y = -5 }, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) -"pei" = ( -/obj/item/lightstick/red/spoke/planted{ - pixel_x = 15; - pixel_y = -3 - }, -/obj/item/lightstick/red/spoke/planted{ - pixel_x = -16; - pixel_y = -3 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "pey" = ( /obj/structure/platform/strata{ dir = 4 @@ -19897,6 +19747,10 @@ icon_state = "bluefull" }, /area/shiva/interior/colony/n_admin) +"pff" = ( +/obj/item/stack/rods, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "pfg" = ( /obj/structure/barricade/handrail/strata{ dir = 8 @@ -19986,10 +19840,6 @@ "plM" = ( /turf/open/auto_turf/ice/layer0, /area/shiva/exterior/junkyard) -"plS" = ( -/obj/structure/flora/bush/ausbushes/lavendergrass, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) "pmj" = ( /obj/effect/landmark/objective_landmark/close, /turf/open/auto_turf/ice/layer1, @@ -20033,6 +19883,15 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) +"poz" = ( +/obj/structure/platform/strata{ + dir = 1 + }, +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/lz1_valley) "ppb" = ( /obj/structure/prop/invuln/ice_prefab{ dir = 9 @@ -20045,6 +19904,12 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) +"ppS" = ( +/obj/structure/stairs/perspective{ + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "pqe" = ( /turf/closed/wall/shiva/prefabricated/reinforced/hull, /area/shiva/interior/bar) @@ -20076,7 +19941,7 @@ dir = 8 }, /turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/junkyard) +/area/shiva/interior/caves/research_caves) "prU" = ( /obj/structure/machinery/light/double{ dir = 8; @@ -20118,7 +19983,7 @@ icon_state = "p_stair_sn_full_cap" }, /turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/junkyard) +/area/shiva/interior/caves/research_caves) "ptr" = ( /turf/open/floor/shiva{ dir = 8; @@ -20178,10 +20043,6 @@ "pvv" = ( /turf/open/floor/shiva, /area/shiva/interior/aerodrome) -"pvR" = ( -/obj/structure/platform_decoration/strata, -/turf/open/gm/river, -/area/shiva/interior/caves/cp_camp) "pvU" = ( /obj/structure/flora/grass/tallgrass/ice, /turf/open/auto_turf/snow/layer2, @@ -20193,10 +20054,10 @@ /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) "pwT" = ( -/turf/open/floor/shiva{ - dir = 1; - icon_state = "snow_mat" +/obj/structure/flora/bush/snow{ + icon_state = "snowgrassall_1" }, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "pxi" = ( /obj/structure/closet/secure_closet/engineering_welding, @@ -20226,16 +20087,6 @@ dir = 1 }, /area/shiva/exterior/lz2_fortress) -"pyB" = ( -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 10; - pixel_y = -9 - }, -/obj/structure/prop/invuln/dense/ice_tray{ - pixel_y = 10 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "pyI" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -20327,7 +20178,14 @@ icon_state = "p_stair_sn_full_cap" }, /turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/lz1_valley) +/area/shiva/interior/caves/research_caves) +"pCw" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = 12; + pixel_y = 25 + }, +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/caves/cp_camp) "pCH" = ( /obj/item/tool/shovel, /turf/open/auto_turf/snow/layer3, @@ -20374,10 +20232,6 @@ }, /turf/open/floor/shiva, /area/shiva/interior/colony/research_hab) -"pDH" = ( -/obj/structure/platform_decoration/strata, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) "pDW" = ( /obj/structure/prop/ice_colony/soil_net, /turf/open/auto_turf/snow/layer1, @@ -20434,11 +20288,6 @@ }, /turf/open/gm/river/no_overlay, /area/shiva/interior/caves/cp_camp) -"pFq" = ( -/obj/structure/surface/rack, -/obj/item/tool/crowbar/red, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/cp_s_research) "pFt" = ( /turf/open/floor/shiva{ icon_state = "red" @@ -20468,10 +20317,22 @@ dir = 1 }, /area/shiva/exterior/lz2_fortress) +"pGi" = ( +/obj/structure/prop/ice_colony/ground_wire, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "pGj" = ( /obj/item/weapon/ice_axe/red, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) +"pGt" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 3.1; + pixel_x = -13; + pixel_y = 25 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/cp_s_research) "pGL" = ( /obj/structure/platform/strata{ dir = 1 @@ -20506,6 +20367,15 @@ }, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard/cp_bar) +"pIV" = ( +/obj/structure/prop/invuln/ice_prefab/standalone/trim, +/obj/structure/prop/invuln/ice_prefab/roof_greeble{ + icon_state = "windsock"; + pixel_x = 6; + pixel_y = -1 + }, +/turf/closed/wall/shiva/ice, +/area/shiva/exterior/cp_s_research) "pJp" = ( /obj/effect/decal/cleanable/ash, /turf/open/floor/shiva{ @@ -20691,10 +20561,6 @@ icon_state = "yellowfull" }, /area/shiva/interior/colony/medseceng) -"pOy" = ( -/obj/structure/inflatable, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) "pOI" = ( /obj/structure/surface/table, /obj/item/reagent_container/food/drinks/dry_ramen, @@ -20724,10 +20590,6 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) -"pPY" = ( -/obj/structure/inflatable/popped, -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) "pQt" = ( /obj/item/stack/sheet/metal, /turf/open/floor/shiva{ @@ -20744,6 +20606,13 @@ }, /turf/open/floor/shiva, /area/shiva/interior/colony/research_hab) +"pRM" = ( +/obj/structure/platform_decoration/strata{ + dir = 1 + }, +/obj/structure/platform_decoration/strata, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "pRU" = ( /obj/item/stack/cable_coil/white, /turf/open/auto_turf/ice/layer1, @@ -20845,16 +20714,18 @@ /obj/effect/landmark/objective_landmark/close, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) +"pWp" = ( +/obj/structure/barricade/handrail/wire{ + dir = 4 + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/exterior/cp_s_research) "pWw" = ( /obj/structure/closet/cabinet, /obj/item/clothing/under/colonist, /obj/effect/landmark/good_item, /turf/open/floor/wood, /area/shiva/interior/colony/botany) -"pWY" = ( -/obj/structure/girder, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "pXU" = ( /obj/item/lightstick/red/spoke/planted{ pixel_x = -16; @@ -20910,6 +20781,18 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) +"qdh" = ( +/obj/structure/platform/strata{ + dir = 1 + }, +/obj/structure/platform/strata{ + dir = 4 + }, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) +"qdH" = ( +/turf/closed/wall/shiva/prefabricated/blue, +/area/shiva/exterior/junkyard/cp_bar) "qep" = ( /turf/open/auto_turf/snow/layer4, /area/shiva/exterior/cp_colony_grounds) @@ -20955,18 +20838,13 @@ icon_state = "yellowfull" }, /area/shiva/interior/garage) -"qfI" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N" - }, -/obj/structure/desertdam/decals/road_stop{ - icon_state = "road_edge_decal5" - }, -/turf/open/floor/shiva{ - dir = 1; - icon_state = "purplefull" - }, -/area/shiva/interior/colony/research_hab) +"qfR" = ( +/obj/structure/flora/grass/tallgrass/ice, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/research_caves) +"qfZ" = ( +/turf/closed/wall/shiva/prefabricated/orange, +/area/shiva/interior/caves/research_caves) "qgd" = ( /obj/structure/prop/ice_colony/ground_wire, /turf/open/auto_turf/ice/layer2, @@ -20991,9 +20869,9 @@ dir = 1 }, /area/shiva/interior/colony/central) -"qgD" = ( -/turf/closed/wall/shiva/prefabricated/reinforced/hull, -/area/shiva/interior/colony/research_hab) +"qgP" = ( +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/warehouse/caves) "qhm" = ( /obj/structure/barricade/metal{ dir = 4 @@ -21028,6 +20906,10 @@ icon_state = "floor3" }, /area/shiva/interior/bar) +"qiy" = ( +/obj/structure/barricade/handrail/wire, +/turf/open/auto_turf/ice/layer1, +/area/shiva/exterior/cp_s_research) "qjY" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/snow/layer0, @@ -21158,6 +21040,13 @@ /obj/effect/landmark/objective_landmark/science, /turf/open/floor/interior/plastic/alt, /area/shiva/interior/warehouse) +"qnJ" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_y = -5 + }, +/turf/open/floor/shiva, +/area/shiva/interior/caves/cp_camp) "qof" = ( /obj/item/stack/cable_coil/blue, /obj/structure/airlock_assembly, @@ -21232,9 +21121,12 @@ dir = 1 }, /area/shiva/interior/colony/central) +"qrY" = ( +/turf/closed/wall/shiva/prefabricated/reinforced, +/area/shiva/exterior/junkyard) "qsN" = ( /obj/structure/machinery/light/double{ - dir = 8; + dir = 4; pixel_y = -5 }, /turf/open/floor/interior/plastic, @@ -21259,17 +21151,6 @@ /obj/item/lightstick/red/variant/planted, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/lz1_valley) -"quO" = ( -/obj/item/tool/shovel/snow, -/obj/item/tool/shovel/snow{ - pixel_y = 8 - }, -/obj/structure/surface/rack, -/turf/open/floor/shiva{ - dir = 4; - icon_state = "snow_mat" - }, -/area/shiva/interior/caves/cp_camp) "qvr" = ( /obj/structure/machinery/alarm{ dir = 8; @@ -21360,16 +21241,6 @@ icon_state = "yellowfull" }, /area/shiva/interior/colony/medseceng) -"qBn" = ( -/obj/structure/prop/invuln/ice_prefab{ - dir = 9 - }, -/obj/structure/prop/invuln/ice_prefab/roof_greeble{ - icon_state = "vent5"; - pixel_y = 10 - }, -/turf/open/auto_turf/snow/layer3, -/area/shiva/interior/caves/cp_camp) "qBM" = ( /obj/structure/platform/strata{ dir = 8 @@ -21377,12 +21248,6 @@ /obj/structure/platform/strata, /turf/open/gm/river, /area/shiva/interior/caves/cp_camp) -"qBN" = ( -/obj/effect/landmark/crap_item, -/turf/open/floor/shiva{ - icon_state = "radiator_tile" - }, -/area/shiva/interior/caves/cp_camp) "qCa" = ( /obj/structure/bed/chair{ dir = 4 @@ -21415,6 +21280,15 @@ icon_state = "floor3" }, /area/shiva/interior/colony/botany) +"qCW" = ( +/obj/structure/platform/strata{ + dir = 1 + }, +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/gm/river, +/area/shiva/interior/caves/research_caves) "qDg" = ( /obj/structure/bed/chair{ dir = 8 @@ -21456,8 +21330,19 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) +"qEH" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/aerodrome) +"qEK" = ( +/obj/structure/prop/invuln/ice_prefab/standalone{ + icon_state = "white" + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "qEQ" = ( /obj/structure/platform/strata, +/obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/junkyard) "qFx" = ( @@ -21478,17 +21363,6 @@ "qIr" = ( /turf/open/floor/plating/plating_catwalk/shiva, /area/shiva/interior/warehouse) -"qIu" = ( -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 4; - pixel_y = -9 - }, -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 9; - pixel_y = 10 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "qII" = ( /turf/open/floor/shiva{ dir = 6; @@ -21506,30 +21380,6 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) -"qKn" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4; - pixel_y = 4 - }, -/obj/structure/bed/chair{ - dir = 4; - pixel_y = 8 - }, -/obj/structure/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/shiva{ - dir = 4; - icon_state = "snow_mat" - }, -/area/shiva/interior/caves/cp_camp) -"qKA" = ( -/obj/structure/barricade/handrail/wire, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "qLA" = ( /obj/structure/machinery/door/airlock/almayer/maint/colony/autoname{ dir = 8 @@ -21556,6 +21406,11 @@ /obj/structure/flora/grass/tallgrass/ice, /turf/open/auto_turf/snow/layer4, /area/shiva/exterior/cp_lz2) +"qMT" = ( +/obj/structure/surface/rack, +/obj/effect/spawner/random/toolbox, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "qNj" = ( /obj/structure/flora/tree/dead/tree_5, /turf/open/auto_turf/snow/layer2, @@ -21582,9 +21437,6 @@ }, /turf/open/gm/river, /area/shiva/exterior/cp_lz2) -"qNE" = ( -/turf/closed/wall/shiva/ice, -/area/shiva/exterior/research_alley) "qNK" = ( /obj/structure/surface/table, /obj/item/reagent_container/glass/beaker/cryopredmix{ @@ -21617,10 +21469,6 @@ /obj/item/storage/firstaid/rad, /turf/open/floor/interior/plastic/alt, /area/shiva/interior/warehouse) -"qOP" = ( -/obj/structure/machinery/power/port_gen/pacman, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/cp_s_research) "qOZ" = ( /obj/structure/bed/chair/comfy/beige{ dir = 8 @@ -21637,17 +21485,6 @@ }, /turf/open/floor/interior/plastic/alt, /area/shiva/interior/warehouse) -"qPi" = ( -/obj/structure/closet/toolcloset, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) -"qPj" = ( -/obj/structure/platform/strata{ - dir = 4 - }, -/obj/structure/platform/strata, -/turf/open/gm/river, -/area/shiva/interior/caves/left_spiders) "qRb" = ( /obj/structure/barricade/metal/wired, /turf/open/floor/shiva{ @@ -21680,10 +21517,6 @@ /obj/item/stack/sheet/metal, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_colony_grounds) -"qRV" = ( -/obj/structure/platform/strata, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/valley) "qRX" = ( /obj/structure/tunnel{ id = "hydroponics_tunnel" @@ -21782,14 +21615,6 @@ icon_state = "greenfull" }, /area/shiva/interior/colony/n_admin) -"qXC" = ( -/obj/structure/prop/ice_colony/surveying_device/measuring_device{ - dir = 8; - pixel_x = -6; - pixel_y = 13 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "qXS" = ( /turf/open/floor/shiva, /area/shiva/interior/bar) @@ -21885,15 +21710,6 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/caves/cp_camp) -"rdQ" = ( -/obj/structure/prop/invuln/ice_prefab/standalone/trim, -/obj/structure/prop/invuln/ice_prefab/roof_greeble{ - icon_state = "windsock"; - pixel_x = 6; - pixel_y = -1 - }, -/turf/closed/wall/shiva/ice, -/area/shiva/exterior/research_alley) "rdS" = ( /obj/effect/decal/cleanable/dirt, /turf/open/asphalt/cement, @@ -21945,10 +21761,6 @@ /obj/structure/platform/strata, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_lz2) -"rfv" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "rfU" = ( /obj/structure/flora/grass/tallgrass/ice/corner{ dir = 9 @@ -21987,6 +21799,14 @@ icon_state = "redfull" }, /area/shiva/interior/colony/research_hab) +"rib" = ( +/obj/structure/ice/thin/single{ + opacity = 1; + unacidable = 0 + }, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/ice/layer2, +/area/shiva/exterior/valley) "ril" = ( /obj/structure/closet/secure_closet/freezer/fridge, /turf/open/floor/shiva{ @@ -22019,6 +21839,10 @@ /obj/structure/window/framed/shiva, /turf/open/floor/plating, /area/shiva/interior/garage) +"rkG" = ( +/obj/structure/flora/tree/dead/tree_2, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "rkS" = ( /obj/item/lightstick/red/spoke/planted{ pixel_x = -13; @@ -22032,6 +21856,15 @@ icon_state = "warnplate" }, /area/shiva/exterior/junkyard/fortbiceps) +"rld" = ( +/obj/structure/prop/ice_colony/ground_wire{ + dir = 4 + }, +/obj/structure/prop/ice_colony/ground_wire{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "rli" = ( /obj/structure/flora/tree/dead/tree_1, /turf/open/auto_turf/snow/layer2, @@ -22048,15 +21881,6 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/cp_colony_grounds) -"rnO" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S-corner" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W-corner" - }, -/turf/open/floor/plating, -/area/shiva/exterior/lz1_valley) "rov" = ( /obj/item/lightstick/red/spoke/planted{ layer = 3.1; @@ -22077,7 +21901,7 @@ unacidable = 0 }, /turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) +/area/shiva/interior/caves/cp_camp) "rpL" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -22091,6 +21915,20 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) +"rqK" = ( +/obj/structure/desertdam/decals/road_stop{ + icon_state = "road_edge_decal5"; + pixel_y = -17 + }, +/turf/closed/wall/shiva/prefabricated/orange, +/area/shiva/interior/colony/research_hab) +"rrj" = ( +/obj/item/lightstick/red/variant/planted{ + pixel_x = -7; + pixel_y = -5 + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/research_caves) "rsa" = ( /obj/structure/filingcabinet, /obj/effect/landmark/objective_landmark/close, @@ -22122,10 +21960,6 @@ /obj/item/lightstick/red/variant/planted, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) -"rwy" = ( -/obj/structure/inflatable/popped, -/turf/open/auto_turf/snow/layer2, -/area/shiva/exterior/research_alley) "rwQ" = ( /obj/structure/bedsheetbin, /turf/open/floor/shiva{ @@ -22137,17 +21971,6 @@ /obj/structure/bed/chair, /turf/open/floor/interior/plastic/alt, /area/shiva/interior/warehouse) -"rxf" = ( -/obj/structure/largecrate/random/case/double, -/obj/structure/machinery/light/double{ - dir = 8; - pixel_y = -5 - }, -/turf/open/floor/shiva{ - dir = 8; - icon_state = "bluefull" - }, -/area/shiva/interior/aerodrome) "rxF" = ( /obj/structure/prop/invuln/ice_prefab/standalone{ icon_state = "pink" @@ -22181,6 +22004,10 @@ icon_state = "yellow" }, /area/shiva/interior/lz2_habs) +"rzw" = ( +/obj/structure/platform_decoration/strata, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "rzz" = ( /obj/structure/flora/pottedplant, /turf/open/floor/shiva{ @@ -22351,6 +22178,10 @@ icon_state = "floor3" }, /area/shiva/interior/colony/s_admin) +"rKq" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/auto_turf/snow/layer3, +/area/shiva/exterior/cp_s_research) "rKW" = ( /obj/structure/machinery/computer3/powermonitor, /turf/open/floor/shiva{ @@ -22404,6 +22235,17 @@ icon_state = "purplefull" }, /area/shiva/interior/colony/research_hab) +"rNx" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 8 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/shiva/interior/aerodrome) "rNO" = ( /obj/structure/prop/ice_colony/soil_net, /turf/open/auto_turf/snow/layer2, @@ -22430,6 +22272,17 @@ }, /turf/open/floor/plating, /area/shiva/interior/colony/medseceng) +"rPa" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 4 + }, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/shiva/interior/aerodrome) "rRb" = ( /obj/structure/surface/rack, /obj/item/weapon/ice_axe, @@ -22467,6 +22320,9 @@ /obj/effect/landmark/objective_landmark/science, /turf/open/floor/plating, /area/shiva/interior/colony/research_hab) +"rRZ" = ( +/turf/closed/wall/shiva/prefabricated/reinforced, +/area/shiva/exterior/cp_s_research) "rSr" = ( /obj/structure/bed/chair/office/light, /turf/open/floor/shiva{ @@ -22523,6 +22379,10 @@ icon_state = "yellowfull" }, /area/shiva/interior/lz2_habs) +"rUW" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "rVF" = ( /obj/effect/landmark/objective_landmark/close, /turf/open/floor/shiva{ @@ -22570,6 +22430,13 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/research_hab) +"rWW" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = 11; + pixel_y = 20 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "rXn" = ( /turf/closed/shuttle/elevator{ dir = 5 @@ -22591,6 +22458,10 @@ /obj/effect/landmark/railgun_camera_pos, /turf/open/auto_turf/ice/layer1, /area/shiva/exterior/cp_lz2) +"rYj" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer4, +/area/shiva/exterior/junkyard/cp_bar) "rZj" = ( /obj/structure/surface/table, /obj/structure/machinery/computer/station_alert{ @@ -22661,6 +22532,13 @@ "sax" = ( /turf/closed/wall/shiva/ice, /area/shiva/interior/warehouse/caves) +"saA" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = 12; + pixel_y = 25 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "sbd" = ( /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/shiva{ @@ -22675,6 +22553,12 @@ /obj/structure/largecrate/random/barrel/green, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) +"scp" = ( +/obj/structure/platform_decoration/shiva/catwalk{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/lz1_valley) "scN" = ( /obj/structure/surface/table, /obj/item/device/assembly/infra, @@ -22753,6 +22637,12 @@ "sgX" = ( /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/telecomm/lz2_northeast) +"shi" = ( +/obj/structure/prop/invuln/ice_prefab/standalone/trim{ + icon_state = "white_trim" + }, +/turf/closed/wall/shiva/ice, +/area/shiva/exterior/cp_s_research) "shx" = ( /obj/structure/ice/thin/single{ opacity = 1; @@ -22827,14 +22717,6 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) -"skK" = ( -/obj/structure/prop/ice_colony/surveying_device/measuring_device{ - dir = 8; - pixel_x = -6; - pixel_y = 13 - }, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "slj" = ( /turf/open/floor/shiva{ icon_state = "radiator_tile" @@ -22885,9 +22767,6 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) -"snZ" = ( -/turf/closed/wall/shiva/prefabricated/reinforced, -/area/shiva/exterior/valley) "sod" = ( /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/junkyard/fortbiceps) @@ -22923,6 +22802,13 @@ icon_state = "floor3" }, /area/shiva/interior/colony/deck) +"srJ" = ( +/obj/structure/stairs/perspective/ice{ + dir = 4; + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/caves/research_caves) "ssf" = ( /turf/open/auto_turf/snow/layer3, /area/shiva/interior/colony/central) @@ -22954,18 +22840,15 @@ /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/cp_colony_grounds) "sud" = ( -/turf/open/floor/shiva{ - icon_state = "snow_mat" +/obj/structure/flora/bush/snow{ + icon_state = "snowgrassbb_1" }, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "suD" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_core, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/medseceng_caves) -"swn" = ( -/obj/structure/largecrate/random, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "swF" = ( /obj/structure/machinery/firealarm{ dir = 8; @@ -22983,7 +22866,7 @@ icon_state = "medium"; name = "ice shard" }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "swW" = ( /obj/structure/machinery/space_heater, @@ -23147,10 +23030,24 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) +"sDd" = ( +/obj/item/lightstick/planted, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) +"sEC" = ( +/obj/structure/flora/grass/tallgrass/ice/corner{ + dir = 10 + }, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "sFj" = ( /obj/structure/largecrate/random/case/double, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) +"sFs" = ( +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/aerodrome) "sFu" = ( /obj/item/tool/mop, /turf/open/floor/wood, @@ -23234,7 +23131,7 @@ /obj/item/shard{ icon_state = "large" }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer1, /area/shiva/interior/caves/cp_camp) "sIX" = ( /obj/structure/machinery/constructable_frame{ @@ -23286,6 +23183,13 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/colony/botany) +"sKi" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_y = -5 + }, +/turf/open/floor/shiva, +/area/shiva/interior/aerodrome) "sKH" = ( /obj/item/lightstick/red/spoke/planted{ pixel_x = 12 @@ -23393,6 +23297,9 @@ icon_state = "redfull" }, /area/shiva/interior/colony/research_hab) +"sQX" = ( +/turf/open/auto_turf/ice/layer0, +/area/shiva/exterior/cp_s_research) "sRV" = ( /obj/effect/decal/cleanable/blood{ icon_state = "xgibdown1" @@ -23617,6 +23524,13 @@ icon_state = "green" }, /area/shiva/interior/colony/botany) +"teK" = ( +/obj/structure/stairs/perspective/ice{ + dir = 4; + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/ice/layer2, +/area/shiva/interior/warehouse/caves) "tfd" = ( /turf/open/floor/wood, /area/shiva/interior/colony/central) @@ -23649,16 +23563,6 @@ dir = 1 }, /area/shiva/interior/colony/s_admin) -"thK" = ( -/obj/structure/platform/strata{ - dir = 8 - }, -/turf/open/gm/river, -/area/shiva/interior/caves/cp_camp) -"tig" = ( -/obj/structure/blocker/forcefield/multitile_vehicles, -/turf/open/auto_turf/snow/layer1, -/area/shiva/interior/caves/cp_camp) "tiw" = ( /obj/structure/machinery/light, /turf/open/floor/shiva{ @@ -23669,6 +23573,9 @@ /obj/structure/fence, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard) +"tjL" = ( +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/aerodrome) "tkb" = ( /obj/structure/surface/table, /obj/item/tool/pen/blue, @@ -23680,15 +23587,13 @@ /obj/structure/largecrate/random/case, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) -"tkB" = ( -/obj/structure/platform/strata{ - dir = 1 - }, -/obj/structure/platform/strata{ - dir = 8 +"tkS" = ( +/obj/structure/largecrate/random/mini/med{ + pixel_x = -7; + pixel_y = 9 }, -/turf/open/gm/river, -/area/shiva/interior/caves/left_spiders) +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "tle" = ( /obj/structure/prop/invuln/ice_prefab/standalone, /turf/open/auto_turf/snow/layer2, @@ -23731,6 +23636,10 @@ icon_state = "red" }, /area/shiva/interior/colony/central) +"tmP" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/aerodrome) "tmV" = ( /obj/structure/machinery/door/airlock/multi_tile/elevator/arrivals, /turf/open/shuttle/elevator/grating, @@ -23781,6 +23690,15 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_lz2) +"too" = ( +/obj/structure/prop/ice_colony/soil_net, +/obj/item/tool/shovel/spade{ + layer = 2.99; + pixel_x = -9; + pixel_y = -11 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "toA" = ( /turf/open/floor/shiva{ dir = 1; @@ -23803,6 +23721,10 @@ icon_state = "redfull" }, /area/shiva/interior/colony/research_hab) +"toO" = ( +/obj/item/stack/rods, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "tpg" = ( /turf/open/floor/plating/plating_catwalk/shiva, /area/shiva/exterior/lz1_valley) @@ -23810,7 +23732,10 @@ /obj/effect/decal/warning_stripes{ icon_state = "NW-out" }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/desertdam/decals/road_stop{ + icon_state = "road_edge_decal5"; + pixel_x = -14 + }, /turf/open/floor/shiva{ dir = 8; icon_state = "purplefull" @@ -23841,15 +23766,6 @@ }, /turf/open/auto_turf/ice/layer0, /area/shiva/interior/caves/cp_camp) -"trw" = ( -/obj/structure/platform/strata{ - dir = 1 - }, -/obj/structure/platform/strata{ - dir = 4 - }, -/turf/open/gm/river, -/area/shiva/interior/caves/left_spiders) "trX" = ( /obj/structure/machinery/conveyor, /obj/effect/decal/cleanable/dirt, @@ -23887,13 +23803,6 @@ dir = 1 }, /area/shiva/exterior/cp_colony_grounds) -"tue" = ( -/obj/structure/platform/strata{ - dir = 8 - }, -/obj/structure/platform/strata, -/turf/open/gm/river, -/area/shiva/interior/caves/left_spiders) "tuz" = ( /obj/structure/platform_decoration/strata{ dir = 1 @@ -23959,12 +23868,6 @@ icon_state = "red" }, /area/shiva/interior/colony/medseceng) -"txO" = ( -/obj/effect/landmark/objective_landmark/science, -/turf/open/floor/shiva{ - icon_state = "floor3" - }, -/area/shiva/interior/caves/cp_camp) "txS" = ( /turf/open/floor/shiva{ icon_state = "multi_tiles" @@ -24182,8 +24085,8 @@ }, /area/shiva/interior/colony/botany) "tJP" = ( -/obj/structure/surface/rack, -/turf/open/auto_turf/ice/layer0, +/obj/structure/flora/tree/dead/tree_4, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "tJS" = ( /obj/structure/blocker/invisible_wall, @@ -24193,6 +24096,10 @@ /obj/effect/decal/warning_stripes{ icon_state = "SW-out" }, +/obj/structure/desertdam/decals/road_stop{ + icon_state = "road_edge_decal8"; + pixel_x = -14 + }, /turf/open/floor/shiva{ dir = 8; icon_state = "purplefull" @@ -24235,6 +24142,13 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) +"tLC" = ( +/obj/item/lightstick/red/variant/planted, +/obj/structure/platform/shiva/catwalk{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/aerodrome) "tLP" = ( /obj/structure/platform/shiva/catwalk{ dir = 1 @@ -24336,6 +24250,10 @@ icon_state = "floor3" }, /area/shiva/interior/valley_huts/no2) +"tPB" = ( +/obj/structure/platform/strata, +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/caves/cp_camp) "tPJ" = ( /obj/structure/platform/shiva/catwalk, /turf/open/auto_turf/snow/layer1, @@ -24376,10 +24294,6 @@ icon_state = "floor3" }, /area/shiva/interior/colony/botany) -"tRn" = ( -/obj/item/lightstick/red/variant/planted, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "tRq" = ( /obj/structure/filingcabinet{ pixel_x = 8; @@ -24438,7 +24352,7 @@ /area/shiva/interior/colony/research_hab) "tTc" = ( /obj/effect/landmark/monkey_spawn, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "tTd" = ( /obj/structure/prop/ice_colony/dense/planter_box{ @@ -24639,6 +24553,13 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/junkyard) +"ucN" = ( +/obj/structure/flora/grass/tallgrass/ice/corner{ + dir = 6 + }, +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "udD" = ( /obj/structure/prop/dam/truck{ dir = 4; @@ -24736,13 +24657,9 @@ /obj/structure/largecrate/random/case/double, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/s_lz2) -"ugD" = ( -/obj/structure/machinery/light/double{ - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/shiva, -/area/shiva/interior/aerodrome) +"ugC" = ( +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/oob) "ugP" = ( /obj/structure/computerframe, /turf/open/floor/shiva{ @@ -24792,18 +24709,15 @@ icon_state = "floor3" }, /area/shiva/interior/colony/s_admin) -"uil" = ( -/obj/structure/prop/invuln/ice_prefab/standalone/trim{ - icon_state = "white_trim" - }, -/turf/closed/wall/shiva/ice, -/area/shiva/exterior/research_alley) "uim" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor/shiva{ icon_state = "multi_tiles" }, /area/shiva/interior/colony/research_hab) +"uir" = ( +/turf/closed/wall/shiva/prefabricated/reinforced, +/area/shiva/interior/caves/cp_camp) "uiI" = ( /obj/item/reagent_container/food/drinks/cans/beer, /turf/open/auto_turf/snow/layer0, @@ -24882,6 +24796,10 @@ /obj/structure/platform/shiva/catwalk, /turf/open/floor/plating/plating_catwalk/shiva, /area/shiva/exterior/junkyard/fortbiceps) +"ulI" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/caves/cp_camp) "ulZ" = ( /obj/structure/platform/shiva/catwalk, /obj/structure/cable/heavyduty{ @@ -24935,11 +24853,11 @@ /turf/closed/wall/shiva/prefabricated/white, /area/shiva/exterior/cp_lz2) "uoZ" = ( -/obj/effect/spider/stickyweb{ - icon_state = "stickyweb2" +/obj/structure/tunnel{ + id = "south_tcomms_tunnel" }, /turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) +/area/shiva/interior/caves/cp_camp) "upf" = ( /obj/item/tool/pickaxe, /turf/open/auto_turf/snow/layer1, @@ -24961,6 +24879,11 @@ icon_state = "purplefull" }, /area/shiva/interior/lz2_habs) +"upK" = ( +/obj/effect/landmark/corpsespawner/engineer, +/obj/effect/decal/cleanable/blood, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "uqb" = ( /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/lz1_valley) @@ -25063,6 +24986,12 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/botany) +"uxZ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W-corner" + }, +/turf/open/floor/plating, +/area/shiva/exterior/junkyard) "uyI" = ( /obj/structure/largecrate/random/mini/small_case/c{ pixel_x = 11; @@ -25254,6 +25183,10 @@ /obj/item/stack/sheet/plasteel/medium_stack, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/s_lz2) +"uIE" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/colony/research_hab) "uII" = ( /obj/structure/surface/table, /obj/effect/landmark/corpsespawner/scientist, @@ -25261,6 +25194,13 @@ icon_state = "floor3" }, /area/shiva/interior/colony/research_hab) +"uIO" = ( +/obj/item/lightstick/red/variant/planted{ + pixel_x = 11; + pixel_y = 11 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "uJg" = ( /obj/item/clothing/shoes/snow, /obj/structure/surface/rack, @@ -25367,6 +25307,9 @@ }, /turf/open/gm/river/no_overlay, /area/shiva/interior/caves/cp_camp) +"uLi" = ( +/turf/open/auto_turf/ice/layer0, +/area/shiva/interior/aerodrome) "uLn" = ( /obj/structure/closet/secure_closet/medical1{ req_access_txt = "100" @@ -25408,16 +25351,6 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/exterior/cp_lz2) -"uMJ" = ( -/obj/structure/machinery/light/double{ - dir = 8; - pixel_y = -5 - }, -/turf/open/floor/shiva{ - dir = 8; - icon_state = "bluefull" - }, -/area/shiva/interior/aerodrome) "uNe" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Colony Engineering Locker Room" @@ -25425,14 +25358,6 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/floor/plating, /area/shiva/interior/colony/medseceng) -"uOc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/shiva{ - dir = 8; - icon_state = "purplefull" - }, -/area/shiva/interior/colony/research_hab) "uOR" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/shiva{ @@ -25647,13 +25572,6 @@ icon_state = "greenfull" }, /area/shiva/interior/colony/botany) -"uZF" = ( -/obj/structure/barricade/handrail/wire{ - dir = 8 - }, -/obj/structure/barricade/handrail/wire, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "uZJ" = ( /obj/structure/bed/chair{ dir = 8 @@ -25672,10 +25590,6 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/colony/medseceng) -"vaT" = ( -/obj/effect/landmark/hunter_primary, -/turf/open/auto_turf/snow/layer1, -/area/shiva/interior/caves/cp_camp) "vbb" = ( /obj/structure/surface/table/woodentable, /obj/item/device/flashlight/lamp, @@ -25775,6 +25689,7 @@ /area/shiva/interior/colony/central) "veu" = ( /obj/structure/platform_decoration/strata, +/obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard) "vey" = ( @@ -25796,6 +25711,10 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/central) +"vgR" = ( +/obj/structure/platform_decoration/strata, +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/caves/cp_camp) "vhp" = ( /obj/structure/surface/table, /obj/effect/landmark/objective_landmark/close, @@ -25822,7 +25741,7 @@ "vhM" = ( /obj/structure/flora/tree/dead/tree_4, /turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "vhQ" = ( /obj/structure/machinery/space_heater, /turf/open/floor/shiva{ @@ -25844,13 +25763,6 @@ icon_state = "floor3" }, /area/shiva/interior/bar) -"vjg" = ( -/obj/structure/platform/strata, -/obj/structure/platform/strata{ - dir = 4 - }, -/turf/open/gm/river, -/area/shiva/interior/caves/cp_camp) "vjs" = ( /obj/effect/decal/warning_stripes{ icon_state = "E" @@ -25878,6 +25790,10 @@ icon_state = "redfull" }, /area/shiva/interior/colony/medseceng) +"vkr" = ( +/obj/item/device/flashlight, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "vkZ" = ( /obj/structure/largecrate/random, /turf/open/floor/shiva{ @@ -25913,10 +25829,6 @@ icon_state = "wred" }, /area/shiva/interior/colony/medseceng) -"vnr" = ( -/obj/structure/prop/ice_colony/soil_net, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "vnF" = ( /obj/structure/surface/table, /obj/item/device/radio, @@ -25992,6 +25904,10 @@ dir = 1 }, /area/shiva/interior/colony/s_admin) +"vrG" = ( +/obj/structure/largecrate/random/barrel/blue, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "vrM" = ( /obj/effect/decal/warning_stripes{ pixel_y = 32 @@ -26016,7 +25932,7 @@ /area/shiva/interior/caves/s_lz2) "vtz" = ( /obj/effect/decal/cleanable/blood/drip, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer1, /area/shiva/interior/caves/cp_camp) "vuj" = ( /obj/structure/bed/roller, @@ -26032,6 +25948,10 @@ dir = 1 }, /area/shiva/interior/colony/central) +"vwn" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/auto_turf/ice/layer1, +/area/shiva/exterior/valley) "vwv" = ( /obj/effect/decal/cleanable/blood, /obj/effect/landmark/corpsespawner/scientist, @@ -26039,6 +25959,14 @@ icon_state = "wredfull" }, /area/shiva/interior/colony/medseceng) +"vwx" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 3.1; + pixel_x = -13; + pixel_y = 25 + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "vxb" = ( /obj/structure/stairs/perspective{ icon_state = "p_stair_full" @@ -26064,6 +25992,12 @@ icon_state = "floor3" }, /area/shiva/interior/colony/s_admin) +"vym" = ( +/obj/structure/prop/ice_colony/ground_wire{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "vyM" = ( /obj/structure/bed/roller, /turf/open/floor/plating, @@ -26142,6 +26076,12 @@ icon_state = "redfull" }, /area/shiva/interior/colony/medseceng) +"vCe" = ( +/obj/structure/flora/bush/snow{ + icon_state = "snowgrassbb_1" + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/interior/caves/cp_camp) "vCj" = ( /obj/structure/barricade/snow{ dir = 1 @@ -26189,13 +26129,6 @@ /obj/structure/prop/ice_colony/surveying_device, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/junkyard/cp_bar) -"vEN" = ( -/obj/structure/largecrate/random/mini/wooden{ - pixel_x = -16; - pixel_y = -1 - }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/warehouse/caves) "vFi" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating, @@ -26256,16 +26189,6 @@ icon_state = "floor3" }, /area/shiva/interior/valley_huts/no2) -"vIk" = ( -/obj/structure/machinery/disposal, -/obj/structure/machinery/light/double{ - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/shiva{ - icon_state = "floor3" - }, -/area/shiva/interior/aerodrome) "vIy" = ( /obj/structure/prop/invuln/ice_prefab/trim{ dir = 4 @@ -26292,6 +26215,9 @@ dir = 1 }, /area/shiva/interior/colony/deck) +"vJu" = ( +/turf/closed/wall/shiva/prefabricated/blue, +/area/shiva/exterior/valley) "vKu" = ( /turf/open/floor/shiva{ dir = 8; @@ -26314,15 +26240,9 @@ }, /area/shiva/interior/colony/botany) "vNN" = ( -/obj/structure/machinery/light/double{ - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/shiva{ - dir = 8; - icon_state = "redfull" - }, -/area/shiva/interior/colony/research_hab) +/obj/structure/fence, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/warehouse/caves) "vOb" = ( /obj/structure/prop/ice_colony/surveying_device{ dir = 4 @@ -26349,6 +26269,9 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) +"vPr" = ( +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/warehouse/caves) "vPK" = ( /obj/structure/platform/strata{ dir = 1 @@ -26508,6 +26431,12 @@ dir = 1 }, /area/shiva/interior/lz2_habs) +"vZS" = ( +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/auto_turf/snow/layer4, +/area/shiva/exterior/lz1_valley) "wag" = ( /turf/closed/wall/shiva/prefabricated/reinforced, /area/shiva/interior/colony/n_admin) @@ -26559,6 +26488,12 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) +"wfH" = ( +/obj/item/lightstick/red/spoke/planted{ + pixel_x = -11 + }, +/turf/open/auto_turf/snow/layer2, +/area/shiva/exterior/cp_s_research) "wfL" = ( /obj/structure/machinery/door/airlock/almayer/security/colony{ name = "\improper Underground Security Evidence Storage" @@ -26647,17 +26582,13 @@ dir = 1 }, /area/shiva/interior/lz2_habs) -"wiG" = ( -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 6; - pixel_y = -9 - }, -/obj/structure/prop/invuln/dense/ice_tray{ - dir = 8; - pixel_y = 10 +"wiy" = ( +/obj/structure/barricade/snow{ + dir = 4 }, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/junkyard/fortbiceps) "wiM" = ( /obj/structure/machinery/light/double{ dir = 1; @@ -26782,7 +26713,7 @@ pixel_y = 9 }, /turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/cp_s_research) +/area/shiva/exterior/junkyard) "wtC" = ( /turf/open/floor/shiva{ dir = 6; @@ -26801,14 +26732,14 @@ }, /turf/open/auto_turf/snow/layer3, /area/shiva/exterior/cp_lz2) -"wuw" = ( -/obj/item/lightstick/red/spoke/planted{ - layer = 3.1; - pixel_x = -13; - pixel_y = 25 +"wvd" = ( +/obj/structure/prop/ice_colony/surveying_device/measuring_device{ + dir = 8; + pixel_x = -6; + pixel_y = 13 }, -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/valley) +/turf/open/auto_turf/ice/layer0, +/area/shiva/exterior/cp_s_research) "wvx" = ( /obj/structure/largecrate/random/case, /turf/open/floor/shiva, @@ -26827,6 +26758,21 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) +"wwl" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 3.1; + pixel_x = -13; + pixel_y = 25 + }, +/obj/structure/largecrate/random/case{ + pixel_y = 11 + }, +/obj/structure/largecrate/random/mini/chest/b{ + pixel_x = -4; + pixel_y = -5 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "wwp" = ( /obj/effect/landmark/hunter_secondary, /turf/open/auto_turf/snow/layer3, @@ -26839,9 +26785,13 @@ dir = 1 }, /area/shiva/exterior/cp_colony_grounds) -"wwW" = ( -/turf/open/auto_turf/snow/layer1, -/area/shiva/exterior/research_alley) +"wwZ" = ( +/obj/structure/stairs/perspective{ + dir = 8; + icon_state = "p_stair_sn_full_cap" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "wxs" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/reagent_container/spray/cleaner{ @@ -27049,6 +26999,13 @@ dir = 1 }, /area/shiva/interior/lz2_habs) +"wLM" = ( +/obj/structure/stairs/perspective{ + dir = 1; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/snow/layer0, +/area/shiva/interior/caves/cp_camp) "wMh" = ( /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) @@ -27084,6 +27041,16 @@ /obj/structure/window/framed/shiva, /turf/open/floor/plating/icefloor, /area/shiva/interior/telecomm/lz1_biceps) +"wNB" = ( +/obj/structure/machinery/door_control/brbutton{ + id = "hangar_ice_2"; + pixel_y = 28 + }, +/obj/structure/platform/shiva/catwalk{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/lz1_valley) "wOq" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/shiva{ @@ -27102,9 +27069,10 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/research_hab) -"wPp" = ( -/turf/closed/wall/shiva/ice, -/area/shiva/interior/colony/research_hab) +"wPs" = ( +/obj/item/lightstick/red/variant/planted, +/turf/open/auto_turf/snow/layer1, +/area/shiva/exterior/cp_s_research) "wPz" = ( /obj/effect/decal/cleanable/blood/drip{ icon_state = "3" @@ -27132,10 +27100,6 @@ "wRm" = ( /turf/open/floor/plating, /area/shiva/interior/aerodrome) -"wRL" = ( -/obj/structure/prop/ice_colony/soil_net, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/cp_s_research) "wSv" = ( /obj/item/lightstick/red/variant/planted{ pixel_x = -7; @@ -27174,15 +27138,8 @@ }, /area/shiva/interior/colony/research_hab) "wTx" = ( -/obj/item/lightstick/red/spoke/planted{ - pixel_x = 15; - pixel_y = -3 - }, -/obj/item/lightstick/red/spoke/planted{ - pixel_x = -16; - pixel_y = -3 - }, -/turf/open/auto_turf/ice/layer0, +/obj/effect/spawner/random/toolbox, +/turf/open/auto_turf/snow/layer1, /area/shiva/interior/caves/cp_camp) "wTz" = ( /obj/structure/largecrate/random/mini/chest{ @@ -27239,6 +27196,10 @@ icon_state = "multi_tiles" }, /area/shiva/interior/colony/research_hab) +"wXs" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/aerodrome) "wXQ" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/shiva{ @@ -27307,16 +27268,6 @@ icon_state = "bluefull" }, /area/shiva/interior/colony/n_admin) -"xbm" = ( -/obj/structure/largecrate/random/case/small, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) -"xbn" = ( -/obj/structure/prop/invuln/ice_prefab/trim{ - dir = 6 - }, -/turf/closed/wall/shiva/ice, -/area/shiva/interior/caves/cp_camp) "xbz" = ( /obj/structure/window/framed/shiva, /obj/structure/blocker/forcefield/multitile_vehicles, @@ -27328,12 +27279,6 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) -"xbT" = ( -/obj/effect/landmark/static_comms/net_one, -/turf/open/floor/shiva{ - icon_state = "yellowfull" - }, -/area/shiva/interior/telecomm/lz1_biceps) "xbZ" = ( /obj/structure/prop/invuln/minecart_tracks{ dir = 8 @@ -27342,10 +27287,6 @@ dir = 1 }, /area/shiva/exterior/cp_colony_grounds) -"xct" = ( -/obj/structure/blocker/forcefield/multitile_vehicles, -/turf/open/auto_turf/ice/layer1, -/area/shiva/interior/caves/cp_camp) "xcE" = ( /obj/structure/inflatable/popped, /turf/open/floor/shiva{ @@ -27371,7 +27312,7 @@ dir = 4; pixel_y = 10 }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer3, /area/shiva/interior/caves/cp_camp) "xeE" = ( /obj/effect/decal/warning_stripes{ @@ -27380,10 +27321,6 @@ /obj/structure/window/reinforced, /turf/open/floor/wood, /area/shiva/interior/colony/central) -"xfZ" = ( -/obj/structure/prop/ice_colony/surveying_device, -/turf/open/auto_turf/ice/layer0, -/area/shiva/interior/caves/cp_camp) "xgc" = ( /turf/open/auto_turf/snow/layer1, /area/shiva/exterior/cp_s_research) @@ -27471,13 +27408,6 @@ icon_state = "yellow" }, /area/shiva/interior/colony/medseceng) -"xog" = ( -/obj/structure/platform/strata, -/obj/structure/platform/strata{ - dir = 8 - }, -/turf/open/gm/river, -/area/shiva/interior/caves/cp_camp) "xoi" = ( /obj/structure/machinery/light/double{ dir = 1; @@ -27510,9 +27440,6 @@ /obj/structure/foamed_metal, /turf/open/floor/plating/plating_catwalk/shiva, /area/shiva/exterior/lz2_fortress) -"xrC" = ( -/turf/open/auto_turf/snow/layer0, -/area/shiva/exterior/research_alley) "xst" = ( /obj/item/lightstick/red/spoke/planted{ layer = 2.99; @@ -27547,6 +27474,10 @@ }, /turf/open/gm/river, /area/shiva/exterior/cp_lz2) +"xun" = ( +/obj/structure/tunnel, +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/colony/research_hab) "xuz" = ( /obj/structure/machinery/space_heater, /turf/open/auto_turf/ice/layer1, @@ -27555,12 +27486,6 @@ /obj/structure/flora/bush/ausbushes/lavendergrass, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/lz1_valley) -"xvd" = ( -/obj/structure/surface/rack, -/obj/item/tool/shovel/snow, -/obj/item/storage/belt/utility/full, -/turf/open/auto_turf/snow/layer3, -/area/shiva/exterior/research_alley) "xvf" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/paper_bin, @@ -27613,6 +27538,15 @@ icon_state = "redfull" }, /area/shiva/interior/colony/n_admin) +"xxY" = ( +/obj/item/lightstick/red/spoke/planted{ + layer = 2.99; + pixel_x = 12; + pixel_y = 28 + }, +/obj/structure/largecrate/random/case/double, +/turf/open/auto_turf/snow/layer4, +/area/shiva/interior/caves/cp_camp) "xyd" = ( /obj/structure/prop/invuln/minecart_tracks{ dir = 10 @@ -27697,12 +27631,29 @@ dir = 1 }, /area/shiva/interior/colony/medseceng) +"xCz" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W-corner" + }, +/obj/item/lightstick/red/spoke/planted{ + pixel_x = -11; + pixel_y = 25 + }, +/turf/open/floor/plating, +/area/shiva/exterior/junkyard) "xCA" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/prison{ icon_state = "kitchen" }, /area/shiva/interior/bar) +"xCD" = ( +/obj/effect/decal/cleanable/blood{ + dir = 4; + icon_state = "gib6" + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "xCN" = ( /obj/structure/prop/souto_land/pole{ dir = 1 @@ -27777,9 +27728,6 @@ }, /turf/open/auto_turf/snow/layer4, /area/shiva/exterior/cp_lz2) -"xFP" = ( -/turf/open/auto_turf/snow/layer0, -/area/shiva/interior/colony/research_hab) "xFR" = ( /turf/open/floor/shiva{ dir = 8; @@ -27799,6 +27747,9 @@ icon_state = "floor3" }, /area/shiva/interior/aerodrome) +"xHv" = ( +/turf/open/auto_turf/ice/layer1, +/area/shiva/interior/aerodrome) "xIL" = ( /obj/item/powerloader_clamp, /turf/open/floor/shiva{ @@ -27831,6 +27782,22 @@ icon_state = "yellowfull" }, /area/shiva/interior/colony/research_hab) +"xLy" = ( +/obj/structure/platform/strata, +/obj/structure/platform/strata{ + dir = 8 + }, +/turf/open/gm/river, +/area/shiva/exterior/cp_s_research) +"xMs" = ( +/obj/structure/prop/ice_colony/ground_wire{ + dir = 4 + }, +/obj/structure/prop/ice_colony/ground_wire{ + dir = 4 + }, +/turf/open/auto_turf/snow/layer3, +/area/shiva/interior/caves/cp_camp) "xMz" = ( /turf/closed/wall/shiva/ice, /area/shiva/exterior/lz1_valley) @@ -27864,6 +27831,13 @@ }, /turf/open/auto_turf/snow/layer0, /area/shiva/interior/caves/cp_camp) +"xMX" = ( +/obj/effect/spawner/random/toolbox, +/obj/effect/landmark/crap_item, +/turf/open/floor/shiva{ + icon_state = "floor3" + }, +/area/shiva/interior/caves/cp_camp) "xNe" = ( /obj/structure/machinery/iv_drip, /turf/open/floor/shiva{ @@ -27871,16 +27845,9 @@ icon_state = "redfull" }, /area/shiva/interior/colony/medseceng) -"xNO" = ( -/turf/open/auto_turf/snow/layer4, -/area/shiva/exterior/research_alley) "xOb" = ( /turf/open/floor/plating/plating_catwalk/shiva, /area/shiva/interior/bar) -"xOT" = ( -/obj/item/device/flashlight/lamp/tripod/grey, -/turf/open/auto_turf/ice/layer2, -/area/shiva/interior/caves/left_spiders) "xPd" = ( /turf/open/floor/shiva{ icon_state = "radiator_tile2" @@ -27994,12 +27961,6 @@ }, /turf/open/auto_turf/ice/layer1, /area/shiva/interior/caves/cp_camp) -"xWy" = ( -/obj/structure/flora/grass/tallgrass/ice/corner{ - dir = 5 - }, -/turf/open/auto_turf/snow/layer4, -/area/shiva/exterior/junkyard) "xXv" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/trash/plate{ @@ -28024,6 +27985,10 @@ }, /turf/open/auto_turf/snow/layer2, /area/shiva/exterior/cp_colony_grounds) +"xXQ" = ( +/obj/structure/inflatable, +/turf/open/auto_turf/snow/layer0, +/area/shiva/exterior/cp_s_research) "xXV" = ( /obj/structure/closet/secure_closet/engineering_welding, /obj/effect/landmark/objective_landmark/close, @@ -28121,6 +28086,10 @@ icon_state = "floor3" }, /area/shiva/interior/lz2_habs) +"yhA" = ( +/obj/structure/fence, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "yhX" = ( /obj/structure/surface/table, /obj/item/tool/wrench{ @@ -28195,6 +28164,12 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/closed/wall/shiva/prefabricated, /area/shiva/interior/colony/medseceng) +"ylF" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/auto_turf/snow/layer1, +/area/shiva/interior/caves/cp_camp) "ylO" = ( /obj/structure/machinery/colony_floodlight_switch{ pixel_y = 32 @@ -28213,7 +28188,7 @@ /obj/structure/prop/ice_colony/ground_wire{ dir = 4 }, -/turf/open/auto_turf/snow/layer0, +/turf/open/auto_turf/snow/layer1, /area/shiva/interior/caves/cp_camp) "ylZ" = ( /obj/structure/machinery/light/double, @@ -28360,22 +28335,22 @@ puZ puZ puZ puZ -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD -qgD +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -28505,39 +28480,39 @@ puZ puZ puZ puZ -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -aIO -pxA -pxA -pxA -pxA puZ puZ puZ -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -28660,46 +28635,46 @@ puZ puZ puZ puZ -asz -asz -asz -asz -asz -asz puZ -pxA -ueu -mMa -euA -vKu -euA -euA -vKu -rhS -oqQ -oqQ -rhS -ueu -pxA -pxA -pxA -pxA -pxA -sym -ctk -ugP -pxA -pxA -xwi -thc -ckI -dTn -pxA -pxA -rZt -rZt -rZt -pxA +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -28820,48 +28795,48 @@ puZ puZ puZ puZ -asz -asz -asz -goj -djO -goj -goj -asz -pxA -pxA -lkX -ffw -uim -vKu -uim -ffw -lkX -vKu -vKu -vKu -vKu -vKu -uLu -pxA -pxA -bJi -bJi -euA -vPR -euA -euA -bJi -euA -euA -vPR -euA -bJi -euA -euA -bJi -rZt -pxA +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -28982,50 +28957,50 @@ puZ puZ puZ puZ -asz -fjd -rZt -djO -kts -wAM -djO -asz -pxA -pxA -ift -smI -hUG -vKu -udJ -euA -ift -pKP -nNN -kZy -pKP -vKu -uLu -pxA -pxA -bJi -rZt -dTU -dTU -dTU -dTU -rZt -dTU -dTU -dTU -dTU -rZt -dTU -rZt -mwF -rZt -pxA -kTd -kTd +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +hFl +hFl +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -29144,51 +29119,51 @@ puZ puZ puZ puZ -asz -wgp -rZt -goj -qNK -hrb -goj -wnK -rZt -vKu -lkX -ift -sQU -vKu -sQU -ift -lkX -rhS -oqQ -oqQ -lNm -vKu -pxA -pxA -ctk -mwF -chU -bJi -euA -euA -euA -bJi -euA -euA -euA -euA -bJi -bJi -chU -mwF -rZt -twi -kue -kTd -flN +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +hFl +jCE +jCE +jCE +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -29303,55 +29278,55 @@ puZ puZ puZ puZ +tlB +oRH +tlB +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +hFl +jCE +jCE +kAg +jCE +jCE +puZ +puZ puZ puZ puZ -asz -tqs -rZt -goj -rZt -fHM -goj -wnK -rZt -vKu -wnK -rZt -rZt -wnK -rZt -rZt -wnK -vKu -vKu -vKu -vKu -vKu -bqy -pxA -ugP -mwF -chU -mwF -pxA -pxA -pxA -pxA -wnK -vKu -xIL -vKu -wnK -bJi -chU -bJi -rZt -twi -flN -flN -kue -flN puZ puZ puZ @@ -29451,6 +29426,8 @@ puZ puZ puZ puZ +ntJ +ntJ puZ puZ puZ @@ -29461,6 +29438,21 @@ puZ puZ puZ puZ +hBq +tlB +hBq +hBq +oRH +tlB +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -29468,52 +29460,35 @@ puZ puZ puZ puZ -asz -asz -rZt -goj -rZt -rZt -goj -wnK -xEB -vKu -wnK -rZt -rZt -eFQ -rZt -rZt -wnK -vKu -vKu -vKu -vKu -vKu -jqT -pxA -ctk -cVy -chU -mwF -pxA -kRV -kVe -wnK -mwF -mwF -yiS -mwF -vKu -mwF -chU -mwF -rZt -flN -flN -flN -kTd -kTd +puZ +puZ +puZ +snN +uqb +uqb +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +oaP +jCE +jCE +jCE +jCE +jCE +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -29612,6 +29587,9 @@ puZ puZ puZ puZ +wMh +ntJ +ntJ puZ puZ puZ @@ -29621,6 +29599,13 @@ puZ puZ puZ puZ +hBq +tlB +oRH +oRH +oRH +hBq +oRH puZ puZ puZ @@ -29630,68 +29615,58 @@ puZ puZ puZ puZ -asz -iIe -rZt -goj -fHM -rZt -goj -wnK -rZt -vKu -vKu -vKu -vKu -vKu -vKu -vKu -toN -vKu -vKu -dgF -hEE -wnK -pxA -pxA -pxA -wnK -wnK -wnK -pxA -hQO -pve -wnK -flN -wAP -flN -dJS -flN -mwF -chU -mwF -rZt -rZt -wBf -pxA -kTd -kue -flN puZ puZ -"} -(10,1,1) = {" puZ puZ puZ -caS -caS -caS -dsD -gpn -caS -caS -caS +puZ +puZ +puZ +uqb +uqb +uqb +kLM +uqb +uqb +uqb +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +hFl +jLx +iWS +jCE +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +"} +(10,1,1) = {" +puZ +puZ +puZ +caS +caS +caS +dsD +gpn +caS +caS +caS aac aac tQN @@ -29773,15 +29748,63 @@ puZ puZ puZ puZ +ntJ +wMh +wMh +wMh puZ puZ puZ -aau -aau -aau puZ puZ puZ +xAS +xAS +hBq +tlB +oRH +oRH +tlB +tlB +oRH +tlB +hBq +puZ +puZ +puZ +puZ +puZ +puZ +slO +slO +slO +puZ +puZ +mev +cQW +rbA +aDM +cko +rLu +rLu +nMR +uqb +uqb +uqb +uqb +uqb +uqb +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +jCE puZ puZ puZ @@ -29789,56 +29812,8 @@ puZ puZ puZ puZ -lhu puZ puZ -asz -bNu -rZt -djO -qCs -pPt -goj -wnK -qyE -wnK -asz -fNE -fNE -fNE -pxA -xvS -xvS -pxA -pxA -iQe -qaF -chU -pxA -pxA -pxA -vKu -vKu -vKu -pxA -lGU -wnK -wnK -aPd -aRz -aXi -bag -flN -mwF -chU -mwF -rZt -flN -flN -pxA -flN -kTd -kue puZ puZ "} @@ -29935,14 +29910,62 @@ puZ puZ puZ puZ +jmW +jmW +jmW +wMh +ntJ +puZ +puZ +puZ +vrG +gXu +xAS +xAS +oRH +hBq +oRH +tlB +oRH +xAS +xAS +oRH +hBq +oRH +puZ +puZ +puZ +puZ +puZ +slO +slO +slO +slO +puZ +lLv +cQW +rbA +uqb +mNs +xMz +slO +ofl +uqb +uqb +aDM +uqb +uqb +uqb +uqb +riV +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ -pct -hsu -hsu -aaP -aau -aau puZ puZ puZ @@ -29950,57 +29973,9 @@ puZ puZ puZ puZ -clK puZ puZ puZ -asz -iqt -rZt -goj -axa -hVs -djO -dBB -rZt -rZt -fNE -sdF -biM -biM -fNE -rZt -vKu -pxA -pxA -rZt -hEE -chU -gFb -sfM -oHF -wnK -wnK -wnK -pxA -lYG -wnK -wnK -aPe -aSJ -aXn -bah -flN -mwF -chU -mwF -flN -rZt -rZt -flN -flN -kTd -kue puZ puZ "} @@ -30097,72 +30072,72 @@ puZ puZ puZ puZ +wMh +wMh +wMh +jmW +ntJ +puZ +puZ +xAS +xAS +xAS +xAS +aFO +xAS +oRH +nmf +dcn +fVq +wwl +gpj +tlB +oRH +hBq +puZ +puZ +puZ +puZ +slO +slO +slO +poz +hhT +puZ +bCr +cTU +iOp +qza +mNs +slO +slO +ofl +uqb +xvb +kGW +aDM +uqb +uqb +uqb +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ -pct -hsu -aav -clK -uoZ -aau puZ puZ puZ -aav -clK -aav -clK -aav puZ puZ puZ -asz -asz -asz -goj -goj -djO -goj -wnK -rZt -rZt -fNE -nPH -biM -biM -fNE -chU -wnK -vFX -pxA -iQe -qaF -chU -kyu -drx -rZt -chU -rZt -chU -fNE -mHU -pDp -wnK -aQm -aXc -aXI -bbG -flN -mwF -chU -mwF -rZt -flN -rZt -flN -flN -flN -kue puZ puZ "} @@ -30259,72 +30234,72 @@ puZ puZ puZ puZ -puZ -aaw -hsu +wMh +wMh +wMh uoZ -clK -clK -aav -clK -aav -aav -rpE -clK -aav -aaP -aav -clK -dCY -asz -asz -asz -asz -asz -wnK -wnK -wnK -wnK -wnK -rZt -rZt -asz -wTm -biM -biM -fNE -chU -vKu -vQm -pxA -rZt -iQe -wnK -gFb -nMk -chU -rZt -chU -rZt -fNE -mWE -pDu -wnK -flN -flN -flN -flN -flN -mwF -chU -fww -sNX -dAt -flN -pxA -flN -flN -kue +ntJ +puZ +puZ +gEn +xAS +xAS +xAS +aFO +hBq +oRH +tlB +xxY +eHY +saA +oRH +lfe +oRH +oRH +puZ +puZ +puZ +puZ +vZS +vZS +niL +hic +aDM +uqb +uqb +uqb +uqb +mfa +jqx +slO +ivE +oqH +uqb +aDM +kLM +kLM +xvb +uqb +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ "} @@ -30421,72 +30396,72 @@ puZ puZ puZ puZ +wMh +jmW +wMh +wMh +wMh +puZ +puZ +gEn +tlB +oRH +aFO +aFO +aFO +hBq +hBq +xAS +oRH +xAS +oRH +oRH +oRH +xAS +xAS +kvQ +uqb +aDM +uqb +uqb +uqb +uqb +uqb +uqb +qza +kLM +hXX +kLM +mOv +niL +hic +kLM +uqb +uqb +aDM +xvb +uqb +uqb +uqb +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ -aaw -hsu -clK -aau -aau -clK -aav -hsu -aav -rpE -clK -aav -clK -aav -clK -dCY -asz -wFB -eSt -wFB -dTU -rZt -gAV -rZt -dTU -asz -asz -asz -asz -asz -goj -goj -fNE -chU -wnK -pxA -pxA -pxA -pxA -pxA -pxA -mcw -rZt -chU -rZt -chU -pxA -pxA -pxA -wnK -mwF -mwF -mwF -mwF -vKu -mwF -chU -uOR -rZt -acP -flN -pxA -flN -flN -kue puZ puZ "} @@ -30582,73 +30557,73 @@ puZ puZ puZ puZ +wMh +jmW +jmW +wMh +puZ +puZ +puZ +puZ +lhP +dcn +fVq +vwx +aFO +dDj +aFO +aFO +aFO +aFO +aFO +xAS +oRH +oRH +xAS +xAS +kvQ +iOu +kLM +kLM +kLM +kLM +kLM +uqb +uqb +uqb +uqb +kLM +iQq +uqb +uqb +kLM +kLM +kLM +uqb +uqb +uqb +uqb +kLM +uqb +kLM +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ -aaU -uoZ -aav -aau -dRb -dRb -aau -clK -clK -aau -dRb -dRb -dRb -dRb -aaL -abL -dCY -asz -gha -uuN -sNX -rZt -chU -gAV -chU -rZt -asz -dnH -jft -ghS -asz -goj -goj -pxA -rZH -vKu -ghU -pxA -vQm -vFX -pxA -pxA -wnK -wnK -wnK -wnK -wnK -pxA -rZt -vKu -vKu -wnK -vKu -wnK -vKu -wnK -bJi -chU -fww -gaJ -dAt -rZt -rZt -flN -flN -kTd puZ puZ "} @@ -30743,74 +30718,74 @@ puZ puZ puZ puZ +wMh +wMh +wMh +wMh +puZ +puZ +puZ +puZ +puZ +xAS +eSf +xAS +hEx +aFO +aFO +aFO +aFO +elf +too +xAS +oRH +aFO +aFO +xAS +aFO +iQq +iQq +iQq +iQq +uqb +uqb +uqb +uqb +kLM +kLM +iQq +gCx +uqb +uqb +qkI +iQq +kLM +kLM +kLM +kLM +gCx +kLM +uqb +uqb +aDM +upf +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ -clK -aav -clK -aav -tkB -tue -dRb -clK -hsu -aav -dRb -dRb -dRb -dRb -dRb -dRb -dRb -dRb -asz -wFB -eSt -wFB -dTU -rZt -gAV -rZt -txX -kRj -qOZ -cEj -qOZ -goj -fwv -goj -bXo -chU -kQJ -vKu -wnK -vKu -wnK -vKu -kap -rZt -crF -crF -crF -wnK -vKu -wnK -chU -rZt -chU -rZt -chU -rZt -chU -rZt -chU -mwF -byr -rZt -rZt -flN -flN -kTd -kue puZ puZ "} @@ -30905,74 +30880,74 @@ puZ puZ puZ puZ -clK -aav -hsu -aau -clK -trw -qPj -abL -clK -aav -aaL -dRb -dRb -dRb -dRb -dRb -dRb -dRb -dRb -asz -rZt -byr -rZt -rZt -chU -gAV -chU -iaK -feA -biM -biM -biM -uuv -yhX -goj -pxA -rZt -dTU -hWY -dTU -dTU -dTU -rZt -kap -rZt -crF -crF -crF -wnK -vKu -wnK -chU -rZt -chU -rZt -chU -rZt -chU -rZt -chU -mwF -bgC -flN -flN -rZt -flN -kTd -flN +wMh +lqT +wMh +puZ +puZ +puZ +puZ +puZ +puZ +xAS +xAS +aFO +aFO +aFO +aFO +xAS +xAS +oRH +uIO +oRH +oRH +xAS +tlB +xAS +xAS +kvQ +oUu +uqb +kLM +kLM +uqb +iQq +gCx +kLM +uqb +kLM +iQq +iQq +kLM +kLM +kLM +kLM +kLM +iQq +iQq +kLM +kLM +kLM +uqb +uqb +uqb +kLM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ "} @@ -31066,86 +31041,86 @@ puZ puZ puZ puZ -hsu +jmW pct -clK -clK -aav -clK -aaw -abL -clK -aav -hsu -abD -tkB -tue -dRb -dRb -dRb -dRb -dRb -dRb -asz -eaa -rZt -rZt -rZt -chU -gAV -chU -iaK -kTI -biM -xtI -qOd -goj -wnK -goj -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -pxA -wnK -wnK -wnK -wnK -wnK -pxA -rZt -vKu -vKu -wnK -vKu -wnK -vKu -wnK -bJi -chU -fww -sNX -dAt -flN -rZt -flN -kTd -puZ -puZ -puZ -"} -(19,1,1) = {" -puZ -puZ -puZ -caS -caS -mFm -mFm +wMh +pcY +pcY +pcY +pcY +pcY +pcY +oRH +xAS +aFO +aFO +aFO +aFO +xAS +oRH +tkS +xAS +aFO +oRH +xAS +oRH +xAS +xAS +xAS +kvQ +uqb +dgG +kLM +kLM +kLM +kLM +kLM +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +gCx +kLM +kLM +uqb +kLM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +"} +(19,1,1) = {" +puZ +puZ +puZ +caS +caS +mFm +mFm mFm mFm mhP @@ -31227,75 +31202,75 @@ puZ puZ puZ puZ -clK -uoZ -hsu -aau -aaP -clK -aau -aau -clK -aaE +wMh +jfO +jmW aau -hsu -uoZ -trw -qPj -dRb -dRb -dRb -dRb -dRb -dRb -asz -rZt -bgC -rZt -rZt -chU -gAV -chU -rZt -asz -biM -biM -biM -goj -lpA -uWA -pxA -tNP -lFp -jcv -fqJ -cSn -pxA -pxA -pxA -rZH -rZt -chU -rZt -rZt -pxA -pxA -pxA -wnK -mwF -mwF -mwF -mwF -vKu -mwF -chU -uOR -uuN -acP -flN -pxA -flN -kTd +ntJ +ntJ +wMh +wMh +wMh +oRH +xAS +aFO +aFO +aFO +oRH +xAS +eUn +tlB +xAS +aFO +xAS +xAS +oRH +oRH +rzw +nUk +xMz +xMz +uqb +uqb +kLM +kLM +gCx +iQq +iQq +cQW +cQW +cQW +iQq +iQq +iQq +gGH +iQq +iQq +cQW +cQW +cQW +cQW +kLM +iQq +iQq +iQq +kLM +uqb +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -31389,75 +31364,75 @@ puZ puZ puZ puZ -aav -clK -abC -clK -aau -aav -hsu -clK -clK -aau -clK -pct -hsu -aaL -dRb -dRb -dRb -dRb -aau -aau -dRb -asz -dAt -sNX -dAt -rZt -chU -gAV -chU -rZt -bXo -biM -biM -biM -goj -xJA -goj -bXo -vKu -soj -wnK -wnK -cSn -pxA -pxA -pxA -wnK -wnK -wnK -wnK -wnK -pxA -kRV -pEv -wnK -flN -flN -flN -flN -flN -mwF -chU -fww -sNX -dAt -rZt -pxA -kTd -flN +lqT +wMh +lqT +wMh +wMh +jmW +jmW +wMh +oRH +oRH +xAS +aFO +aFO +xAS +xAS +tlB +nig +mME +fVq +fXr +oRH +oRH +xAS +kRq +aFc +wMh +xMz +xMz +aDM +uqb +kLM +kLM +gGH +iQq +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +iQq +cQW +cQW +cQW +cQW +kLM +gGH +cQW +iQq +kLM +uqb +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -31551,74 +31526,74 @@ puZ puZ puZ puZ -aav -clK -aav -clK -aav -dRb -dRb -abI -clK -aau -aau -clK -aav -abD -dRb -dRb -aav -aav -hsu -clK -dRb -asz -gha -rZt -sNX -rZt -chU -gAV -chU -rZt -asz -wqc -tOq -hXQ -asz -goj -goj -pxA -vKu -wnK -wnK -cSn -pxA -pxA -sIX -chU -rZt -chU -rZt -wnK -pxA -pxA -nmT -pve -wnK -aPd -aRz -aXi -bag -flN -mwF -chU -mwF -flN -wBf -pxA -pxA -kTd +lqT +wMh +lqT +wMh +wMh +wMh +wMh +wMh +oRH +hBq +xAS +aFO +xAS +xAS +hBq +xAS +pcY +cIs +hBq +pCw +xAS +oRH +xAS +xAS +mfc +xMz +xMz +aDM +uqb +uqb +kLM +iQq +iQq +iQq +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +kLM +cQW +iQq +kLM +kLM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -31712,78 +31687,78 @@ puZ puZ puZ puZ -aav -hsu -aav -aav -clK -dRb -dRb -tkB -tue -xOT -aau -clK -aav -hsu -hsu -abD -rpE -hsu -hsu -uoZ -clK +lqT +jmW +lqT +lqT +wMh +abH +wMh +oRH +oRH +hBq +xAS +aFO +aFO +xAS +xAS +oRH +pcY +pcY +pcY +pcY +pcY aat -asz -dAt -sNX -dAt -rZt -chU -gAV -chU -asz -asz -asz -asz -asz -asz -asz -asz -pxA -vdS -wnK -vKu -pxA -pxA -ahu -wnK -wnK -wnK -wnK -mUT -uYt -amu -pxA -nrr -wnK -wnK -aPe -act -acA -bah -flN -mwF -chU -bJi -rZt -flN -flN -rZt -flN +oRH +oRH +xAS +oRH +xMz +xMz +aDM +uqb +kLM +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +kLM +kLM +kLM +aDM +aDM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ -ifQ puZ "} (23,1,1) = {" @@ -31874,75 +31849,75 @@ puZ puZ puZ puZ -uoZ -aav -clK -aaL -abD -dRb -dRb -trw -qPj -abD -hsu -aau -clK -aau -clK -uoZ -rpE -aav -aav -clK -aav -aat -asz -asz -asz -asz -asz -chU -gAV -chU -adS -aea -ptr -aew -aew -aex -asz -asz -lXy -nxA -vKu -vKu -bUe -rZt -chU -rZt -chU -dwQ -wnK -pxA -amu -amu -pxA -nzf -wnK -wnK -aQm -aXc -aXI -bbG -flN -mwF -chU -bJi -bJi -wBf -flN -kTd -kTd +jfO +lqT +wMh +wMh +wMh +oRH +oRH +oRH +tlB +tlB +xAS +aFO +aFO +xAS +oRH +oRH +pcY +pcY +pcY +pcY +pcY +pcY +cIZ +tlB +xAS +oRH +xMz +xMz +kLM +uqb +kLM +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +iQq +iQq +kLM +kLM +uqb +kLM +uqb +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -32037,73 +32012,73 @@ puZ puZ puZ rpE -rpE -rpE -dRb -dRb -dRb -dRb -dRb +jmW +jmW +pcY +pcY +xAS +oRH +oRH +tlB +xAS +tlB +xAS +xAS +oRH +xAS +oRH +pcY +pcY +pcY +pcY +pcY +pcY +yhA dRb -abO -aav -hsu -aaE -aav -aau -clK -rpE -aav -aaP -aav -clK -aat -aat -aat -aat +tlB dRb -asz -chU -gAV -chU -adT -rZt -rZt -rZt -rZt -mRU -aex -asz -nVn -iCJ -pxA -pxA -pxA -wnK -wnK -wnK -wnK -mUT -wnK -amu -jrg -jrg -pxA -nHH -pDp -wnK -flN -flN -flN -flN -flN -mwF -rZt -rZt -mwF -pxA -kTd -kTd +yhA +xMz +uqb +kLM +iQq +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +boD +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +iQq +iQq +iQq +iQq +iQq +kLM +lMO +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -32193,78 +32168,78 @@ tlB puZ wMh wMh -aFO -fuz -aFO -dJl -fuz -aFO +tlB +vym +tlB +sDd +vym +xAS wMh abB -dRb -dRb -dRb -dRb -dRb -dRb -tkB -tue -aav -hsu -clK -clK -aav -rpE -clK -aav -clK -aav -clK -clK -clK -clK -dRb -asz -chU -gAV -chU -adV -rZt -rZt -rZt -rZt -rZt -mOu -asz -asz -asz -asz -asz -rZt -flN -rZt -rZt -dwQ -pxA -amu -amu -jrg -jrg -pxA -mWE -pJA -wnK -mwF -mwF -mwF -mwF -vKu -bJi -bJi -chU -mwF -pxA -flN +pcY +pcY +xAS +xAS +tlB +xAS +tlB +xAS +tlB +oRH +ben +vpD +vpD +pcY +pcY +pcY +pcY +pcY +pcY +pcY +tlB +xAS +tlB +tlB +xMz +uqb +uqb +kLM +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +iQq +iQq +iQq +kLM +kLM +ath +aDM +kLM +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -32355,102 +32330,102 @@ tlB tlB oRH oRH -elN +pGi jmW -tPs -elN +ohd +pGi jmW -tPs +nEU abv wMh -dRb -dRb -dRb -dRb -dRb -dRb -trw -qPj -clK -uoZ -clK -aav -clK -rpE -aav -clK -uoZ -mOT -uoZ -aav -dRb -dRb -dRb -asz -rZH -gAV -chU -adW -aeb -rZt -miD -miD -adi -aCB -asz -asz -asz -asz -wnK -wnK -wnK -wnK -dwQ -flN -jrg -jrg -jrg -jrg -jrg -pxA -pxA -pxA -wnK -wnK -vKu -wnK -vNN -wnK -rZt -mwF -chU -mwF -pxA -puZ -puZ -puZ -puZ -puZ -puZ -puZ -"} -(27,1,1) = {" -puZ -puZ -puZ -caS -caS -mFm -mFm -mFm -mFm -mhP -jLc -mFm -mFm -aar -mFm -gkY +pcY +aFO +aFO +wMh +uir +uir +wMh +xAS +oRH +oRH +vpD +vpD +qFx +pcY +pcY +pcY +pcY +pcY +pcY +tlB +xAS +aFO +xAS +tlB +xMz +uqb +uqb +uqb +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +iQq +kLM +kLM +lNg +uqb +kLM +kLM +vNN +kAw +kAw +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +"} +(27,1,1) = {" +puZ +puZ +puZ +caS +caS +mFm +mFm +mFm +mFm +mhP +jLc +mFm +mFm +aar +mFm +gkY gkY gkY gkY @@ -32514,80 +32489,80 @@ oRH oRH jVi oRH -xAS -aFO -aFO -vtz -pMV +tlB +tlB +tlB +rUW +xMs jqo -aFO -pMV -aFO +tlB +rld +tlB +xAS +wMh +wMh aFO wMh +jOi +ecx +uir +uir wMh -dRb -dRb -dRb -dRb -dRb -dRb -dRb -uoZ -clK -aav -clK -aav -dRb +hBq +xAS +vpD +vpD +vpD +ccu leg -uoZ -hsu -pct -dRb -dRb -dRb -dRb -dRb -asz -chU -gAV -chU -asz -asz -aed -asz -asz -aez -mRU -aeQ -asz -asz -rZt -flN -rZt -dwQ -flN -flN -amu -bJj -jrg -jrg -jrg -jrg -jrg -jrg -pxA -wnK -wnK -pxA -pxA -pxA -pxA -pxA -mwF -chU -mwF -pxA +pcY +pcY +pcY +pcY +rkG +xAS +aFO +xAS +tlB +xMz +aDM +uqb +uqb +kLM +iQq +iQq +iQq +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +kLM +cQW +iQq +kLM +kLM +wgM +kLM +ath +iQq +vNN +cwZ +kAw +puZ +puZ +puZ +puZ puZ puZ puZ @@ -32676,80 +32651,80 @@ jmW tlB oRH xAS -aFO +tlB vtz -aFO -aFO +xAS +tlB mCQ pPK eFI -aFO +tlB vtz gva -aFO +xAS wMh eFI wMh -dRb -dRb -dRb -dRb -dRb -hsu -aav -aav -dRb -dRb -dRb -aaw -aav +jOi +jOi +xMX +uir +wMh +wMh +wMh aav -dRb -dRb -lSU -lSU -lSU -lSU -lSU -chU -gAV -rZt -dTU -dTU -dTU -rZt -fNE -aeC -rZt -aeR -asz -wnK -dwQ -wnK -wnK -wnK -dwQ -bJj -bJj -jrg -jrg -bJj -osE -jrg -jrg -jrg -pxA -wnK -wnK -pxA -pxA -pxA -pxA -pxA -vKu -vKu -vKu -pxA +ben +vpD +vpD +vpD +pcY +pcY +pcY +pcY +tlB +tlB +xAS +tlB +xAS +xMz +aDM +uqb +uqb +uqb +kLM +gGH +iQq +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +cQW +kLM +cQW +cQW +cQW +cQW +kLM +gGH +cQW +kLM +uqb +lNg +erj +kLM +tcp +iQq +vNN +cwZ +kAw +kAw +hrk +puZ +puZ puZ puZ puZ @@ -32837,81 +32812,81 @@ pcY jmW wMh oRH -aFO -aFO -oRH -oRH +tlB +tlB +xAS +xAS wMh pcY jmW nuY wMh -elN +pGi jmW -tPs +ohd wMh wMh wMh wMh +jOi +kHG +uir wMh +ntJ +ntJ +wMh +wMh +wMh +wMh +oRH +pcY +pcY +pcY +pcY +yhA dRb +xAS dRb -aav -uoZ -clK -aav -dRb -dRb -dRb -dRb -dRb -dRb -dRb -dRb -lSU -rHO -rHO -fgK -lSU -chU -gAV -gAV -gAV -gAV -gAV -chU -fNE -aeP -miD -aiV -asz -rZt -rZt -rZt -rZt -flN -amu -fXX -bJj -jrg -bJj -bJj -bJj -bJj -bJj -osE -pxA -wnK -wnK -pxA -pxA -pxA -pxA -pxA -mwF -chU -mwF -pxA +yhA +xMz +cnt +cnt +uqb +xvb +kLM +gCx +kLM +iQq +cQW +cQW +cQW +iQq +iQq +iQq +gGH +kLM +kLM +cQW +cQW +cQW +cQW +kLM +iQq +iQq +kLM +kLM +lNg +xMz +xMz +iQq +kLM +vNN +cwZ +kAw +kAw +hrk +ugC +puZ puZ puZ puZ @@ -33008,72 +32983,72 @@ pcY pcY pcY wMh -aFO -pMV -dJl -aFO -aFO -aFO +tlB +xMs +ilW +xAS +xAS wMh -eFI +jOi +jOi wMh -dRb -rpE -rpE -rpE -dRb -dRb -dRb -dRb -dRb -dRb -dRb -dRb -dRb -ocl -dwQ -dwQ -dwQ -bXo -rZt -dTU -dTU -rZt -gAV -gAV -chU -asz -asz -asz -asz -asz -wnK -wnK -dwQ -wnK -fXX -bJj -bJj -gpz -gpz -gpz -bJj -osE -osE -gpz -gpz -xTK -fXX -fXX -jrg -jrg -jrg -jrg -pxA -xcE -ggL -xcE -pxA +uir +wMh +jmW +ntJ +jmW +ntJ +wMh +wMh +pcY +pcY +pcY +pcY +pcY +pcY +tlB +xAS +xAS +hBq +xMz +xMz +xMz +xMz +oqf +uqb +kTP +kLM +kLM +iQq +iQq +iQq +kLM +iQq +iQq +iQq +iQq +iQq +kLM +kLM +iQq +iQq +iQq +qkI +iQq +uqb +kLM +aDM +xMz +xMz +xMz +iQq +vNN +cwZ +kAw +kAw +kAw +hrk +puZ puZ puZ puZ @@ -33170,72 +33145,72 @@ pcY pcY pcY ouS -aFO +tlB jpp wMh wMh wMh +tlB +xAS wMh -aFO -aFO wMh -abP wMh +jmW +wMh +wMh +ntJ +jmW wMh -abB pcY pcY +tlB +hBq +tlB pcY -lSU -dRb -dRb -abY -abY -dRb -lSU -dwQ -dwQ -lSU -lSU -lSU -lSU -lSU -shO -gAV -gAV -chU -rZt -rZt -ahB -rZt -rZt -rZt -rZt -rZt -rZt -bJj -bJj -osE -gpz -bJj -bJj -bJj -bJj -bJj -gpz -gpz -rad -fXX -osE -gRJ -jrg -jrg -jrg -pxA -mwF -chU -mwF -pxA +hBq +tlB +xAS +aFO +tlB +hBq +xMz +xMz +xMz +xMz +aDM +uqb +kLM +gCx +kLM +kLM +kLM +kLM +kLM +kLM +iQq +iQq +kLM +iQq +iQq +kLM +uqb +iQq +iQq +iQq +kLM +xvb +uqb +uCs +xMz +xMz +xMz +xMz +cwZ +cwZ +kAw +kAw +kAw +hrk puZ puZ puZ @@ -33332,72 +33307,72 @@ pcY pcY pcY laz -aFO -aFO +tlB +tlB yjM kSO qBM -wMh -aFO -aFO -wMh +tlB +tlB xAS xAS -abQ +xAS +xAS +hBq +wMh +wMh +ntJ wMh -pcY -pcY -pcY -lSU dRb -abX -ors -ors -lSU -lSU -dwQ -dwQ -lSU -ada -ady -adE -lSU -goj -goj -goj -goj -goj -goj -goj -goj -goj -wnK -wnK -dwQ -flN -fXX -bJj -bJj -osE -bJj -bJj -gpz -gpz -bJj -bJj -xuz -ciL -bJj -bJj -bJj -jrg -jrg -jrg -amu -fXX -fXX -fSR -amu +xAS +hBq +tlB +tlB +hBq +tlB +tlB +tlB +xAS +aFO +tlB +xAS +tlB +xAS +kvQ +kLM +xvb +kLM +kLM +kLM +kLM +kLM +gCx +kJQ +kLM +qkI +iQq +kLM +iOu +kLM +iQq +qkI +lNg +kLM +lNg +uqb +uqb +xMz +xMz +xMz +xMz +xMz +xMz +cwZ +cwZ +kAw +kAw +kAw +kAw puZ puZ puZ @@ -33489,77 +33464,77 @@ wMh tQn nBo tlB -oRH +xAS sFj pcY kBo obH -aFO -aFO +tlB +tlB cQY rJI gso -pcY -wMh +tlB +tlB +tlB +oRH wMh -aFO -aFO +tlB +xAS xAS wMh -iZI ntJ -ntJ -pcY -lSU -abV -skl -skl -ors -elw -dwQ -dwQ -dwQ -lSU -ada -dwQ -dwQ -adI -goj -chU -goj -chU -chU -chU -goj -chU -aiD -rZt -flN -rZt -dwQ -bJj -osE -bJj -osE -osE -osE -gpz -bJj -gpz -gpz -bJj -ciL -gpz -bJj -xuz -jrg -jrg -jrg -amu -bJj -fSR -fXX -amu +wMh +mpI +hBq +tlB +tlB +xAS +xAS +xAS +xAS +xAS +xAS +xAS +aFO +xAS +tlB +xAS +cdh +aDM +uqb +kLM +kLM +uqb +uqb +kLM +kLM +kLM +iQq +bzK +iQq +iQq +kLM +kLM +iQq +iQq +iQq +iQq +iQq +iQq +iQq +xMz +xMz +xMz +xMz +xMz +xMz +kAw +kAw +kAw +kAw +kAw +kAw puZ puZ puZ @@ -33651,119 +33626,119 @@ pcY pcY pcY xeq -aFO +xAS tze wMh wMh pWn -aFO +tlB tTc cQY aNy xtc -nKD +tlB wMh wMh -vtz -aFO -aFO +tlB +tlB +tlB +xAS xAS wMh wMh -ntJ +aaA wMh -lSU -sgB -skl -skl -ors -dwQ -elw -dwQ -dwQ -adI -adj -dwQ -adH -lSU -goj -wnK -goj -wnK -wnK -wnK -goj -txU -goj -rZt -rZt -flN -asz -jrg -jrg -jrg -osE -osE -osE -osE -bJj -bJj -bJj -bJj -sLj -sLj -tnG -jrg -jrg -jrg -jrg -nkH -bJj -fXX -fSR -amu -puZ -puZ -puZ -puZ -puZ -puZ -puZ -"} -(35,1,1) = {" -puZ -puZ -puZ -caS -caS -mFm -mFm -mFm -caS -caS -mFm -mFm -caS -caS -mFm -lTL -caS -voH -slj -vOd -vOd -slj -las -caS -mFm -mFm -wMj -wMj -mFm -mFm -caS -voH -slj +xAS +tlB +xAS +xAS +aFO +aFO +aFO +aFO +aFO +tlB +xAS +aFO +xAS +tlB +kLM +uqb +kLM +kLM +kLM +kLM +kLM +iQq +iQq +kLM +iQq +iQq +iQq +iQq +kLM +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +xMz +xMz +xMz +xMz +xMz +xMz +kAw +kAw +kAw +kAw +kAw +kAw +puZ +puZ +puZ +puZ +puZ +puZ +puZ +"} +(35,1,1) = {" +puZ +puZ +puZ +caS +caS +mFm +mFm +mFm +caS +caS +mFm +mFm +caS +caS +mFm +lTL +caS +voH +slj +vOd +vOd +slj +las +caS +mFm +mFm +wMj +wMj +mFm +mFm +caS +voH +slj vFq ghK slj @@ -33813,77 +33788,77 @@ wMh cQY xhU wMh -aFO -aFO -dJl -fuz -dJl -aFO -aFO -pXU +tlB +tlB +sDd +vym +sDd +tlB +tlB +nZG wMh wMh -aFO +tlB +hBq +tlB +tlB +oRH +tlB +tlB wMh wMh wMh -eFI +wMh +mpI +hBq +aFO +aFO +aFO +aFO aFO aFO xAS -wMh -ntJ -wMh -lSU -kbT -skl -skl -ors -lSU -lSU -dwQ -dwQ -lSU -dwQ -dwQ -dwQ -lSU -dtE -rZt -rZt -iXr -pue -wui -rZt -rZt -goj -asz -asz -asz -asz -asz -asz -jrg -jrg -jrg -bJj -bJj -bJj -gpz -osE -osE -bJj -osE -osE -jrg -jrg -jrg -jrg -jrg -bJj -gRJ -bJj -amu +tlB +tlB +tlB +xAS +aFO +xAS +kvQ +uqb +aDM +iQq +kLM +kLM +iQq +uqb +uqb +iQq +iQq +iQq +iQq +iQq +kLM +kLM +iQq +iQq +uqb +lNg +lNg +xvb +uqb +xMz +xMz +xMz +xMz +xMz +xMz +kAw +nZA +kAw +kAw +nZA +kAw puZ puZ puZ @@ -33975,77 +33950,77 @@ oRH cQY oRH sIP -aFO -aFO -elN +tlB +tlB +pGi jmW -tPs -aFO +ohd +tlB wMh wMh wMh -aFO -aFO +tlB +tlB +tlB +tlB +oRH +tlB +tlB +xAS +wMh wMh -aFO wMh +wMh +dRb +xAS +tlB +xAS aFO +xAS +xAS +tlB +tlB +xAS +xAS +xAS aFO -tTc +xAS aFO -vaT -wMh -wMh -lSU -xFP -mIx -aca -wPp -wPp -lSU -dwQ -dwQ -lSU -gpb -adC -adC -lSU -goj -wnK -goj -gKE -pue -iYc -onM -wnK -goj -asz -afz -azH -agZ -aUS -asz -jrg -jrg -jrg -jrg -jrg -bJj -gpz -osE -osE -gpz -bJj -bJj -mKF -jrg -jrg -gRJ -sUD -hXH -apD -hXH -czI +fKb +kLM +iQq +kLM +kLM +kLM +kLM +uqb +iOu +kLM +iQq +iQq +iQq +iQq +iQq +iOu +iQq +iQq +uqb +hbD +iDy +iDy +hzJ +hzJ +xMz +xMz +xMz +xMz +xMz +kAw +nZA +nZA +kAw +kAw +kAw puZ puZ puZ @@ -34135,80 +34110,80 @@ aFO aFO aFO wfP -oRH +xAS tlB oRH -aFO -dJl +tlB +sDd hCa -dJl -aFO -aFO +sDd +tlB +tlB wMh wMh -aFO -aFO -aFO -aFO -aFO -aFO -aFO -vtz -aFO +hBq +wMh +wMh +hBq +tlB +tlB xAS +tlB wMh +jmW pcY -lSU -wPp -wPp -acb -wPp -wPp -lSU -dwQ -dwQ -lSU -lSU -lSU -lSU -lSU -goj -chU -dsY -hTb -pRH -lpA -goj -chU -goj -fNE -afV -rZt -rZt -aCB -asz -jrg -jrg -jrg -jrg -bJj -bJj -bJj -gpz -gpz -gpz -bJj -bJj -bJj -jrg -gRJ -bJj -osE -gpz -bJj -bJj -jrg -puZ +pcY +pcY +pcY +hBq +xAS +xAS +pcY +pcY +xAS +xAS +xAS +xAS +cbG +ylF +tlB +uji +uji +uji +uji +uji +uAd +kbK +jpE +iQq +kLM +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +kLM +kLM +qoU +hXB +hzJ +hzJ +hzJ +xMz +xMz +xMz +xMz +kAw +kAw +kAw +kAw +kAw +kAw +hrk +hrk puZ puZ puZ @@ -34301,76 +34276,76 @@ pZB wMh wMh aaA -elN +pGi jmW swV -aFO -aFO -aFO -wMh -wMh -wMh -aFO -wMh +xAS +xAS +tlB wMh +hBq +tlB wMh -aFO -vtz +tlB +oRH +tlB +tlB wMh wMh +ntJ pcY pcY -lSU -wPp -wPp -wPp -wPp -wPp -lSU -elw -dwQ -dwQ -dwQ -dwQ -lSU -lQm -goj -chU -goj -dqH -rZt -sCl -onM -chU -goj -fNE -afX -rZt -rZt -ahS -asz -jrg -jrg -jrg -jrg -bJj -bJj -bJj -osE -bJj -bJj -gpz -bJj -bJj -jrg -osE -bJj -bJj -gpz -bJj -jrg -jrg -puZ +pcY +pcY +tlB +hBq +xAS +pcY +pcY +pcY +xAS +toO +jld +xAS +pff +tlB +uji +uji +uji +uji +uji +kLM +kLM +knI +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +kLM +uqb +uqb +uqb +qEB +hzJ +hzJ +hzJ +hzJ +kAw +hrk +kAw +kAw +kAw +kAw +kAw +nZA +kAw +kAw +kAw +kAw puZ puZ puZ @@ -34463,77 +34438,77 @@ pcY gXW gXW kQW -dJl +ilW ylU -dJl -aFO -wMh +ilW +tlB wMh -aFO wMh -aFO -aFO -aFO +xAS wMh -aFO -aFO +tlB +tlB +tlB +tlB xAS +tlB +wMh +wMh wMh pcY pcY pcY -wPp -wPp -wPp -lSU -lSU -lSU -lSU -dwQ -oaO -dwQ -dwQ -dwQ -bXo -rZt -goj -vuj -goj -eaz -rZt -nwd -goj -wnK -goj -fNE -aud -rZt -rZt -ahT -asz -jrg -jrg -jrg -jrg -bJj -bJj -bJj -bJj -bJj -bJj -bJj -gpz -gpz -bJj -osE -bJj -gpz -gpz -bJj -jrg -jrg -puZ -puZ +pcY +hBq +tlB +pcY +pcY +pcY +uKZ +iMA +aYy +bbj +aYy +iMA +uKZ +uji +uji +uji +uji +uji +uji +qhm +qhm +kXs +mcH +mcH +mcH +mcH +nEH +mcH +mcH +mcH +pNo +qhm +qhm +hzJ +hzJ +hzJ +hzJ +hzJ +kAw +kAw +kAw +hrk +hrk +kAw +nZA +nZA +kAw +kAw +kAw +kAw +hrk puZ puZ puZ @@ -34629,73 +34604,73 @@ mbt mbt abt wMh -aFO -aFO -aFO -aFO -aFO -aFO -fXQ -pcY -wMh -vtz +xAS +tlB +xAS +tlB xAS wMh -pcY +wMh +tlB +tlB wMh wMh -wPp -wPp -wPp -lSU -dwQ -dwQ -dwQ -oaO -dwQ -rEW -lSU -lSU -lSU -ehe -bxW -chU -goj -rZt -rZt -rZt -goj -chU -oag -asz -aud -rZt -rZt -tiw -asz -jrg -jrg -jrg -bJj -osE -bJj -bJj -jrg -bJj -osE -bJj -gpz -gpz -gpz -bJj -bJj -gpz -gpz -fXX -jrg -iTQ -puZ -puZ +wMh +jmW +pcY +pcY +pcY +uji +uKZ +uKZ +uji +uji +uji +uKZ +fRg +fRg +fRg +bfy +fRg +uKZ +uji +dMo +ibP +dMo +uji +uji +kLM +lNE +uqb +iOu +kLM +iQq +iQq +iQq +iQq +kLM +kLM +uqb +uqb +uqb +hzJ +huz +huz +huz +huz +ncS +ncS +ncS +huz +huz +hrk +kAw +kAw +kAw +kAw +kAw +hrk +hrk puZ puZ puZ @@ -34793,70 +34768,70 @@ gXW mbt abw wMh -aFO -aFO -aFO +tlB +tlB +xAS wMh -sFj -pcY wMh -aFO +tlB xAS wMh -iZI -ntJ +wMh ntJ wMh -wPp -wPp -lSU -dwQ -eBG -dwQ -dwQ -elw -rRP -lSU -cvn -lSU -exm -goj -rWS -fVI -rZt -rZt -rZt -goj -chU -goj -aeU -rZt -rZt -rZt -aCB -asz -jrg -jrg -jrg -osE -bJj -bJj -bJj -jrg -bJj -bJj -bJj -bJj -bJj -bJj -bJj -gpz -bJj -bJj -fXX -fXX -iTQ -puZ +pcY +pcY +pcY +uji +oYH +ahe +pvv +sKi +pvv +pvv +aWY +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +fRg +uji +aDM +uqb +uqb +uqb +kLM +kLM +iQq +iQq +iQq +iQq +kLM +kLM +sqb +lNg +aDM +aDM +huz +huz +huz +huz +tRN +rdS +xvQ +huz +huz +kAw +kAw +kAw +kAw +nZA +kAw +hrk puZ puZ puZ @@ -34954,110 +34929,110 @@ idR jHg aui ecz -aFO -aFO -aFO -wMh -jmW -pcY -pcY -pcY -aFO -aFO +tlB +tlB +tlB xAS -iZI +tlB +tlB +tlB +tlB wMh wMh ntJ -wPp -wPp -lSU -dwQ -lSU -lSU -lSU -lSU -lSU -lSU -dwQ -lSU -qRo -goj -wnK -goj -kMJ -rZt -neS -goj -wnK -oag -asz -agl -rZt -rZt -apk -asz -jrg -jrg -jrg -osE -bJj -bJj -jrg -jrg -bJj -bJj -gpz -gpz -bJj -bJj -bJj -gpz -bJj -fXX -bJj -fXX -amu -puZ -puZ -puZ -puZ -puZ -puZ -puZ -"} -(43,1,1) = {" -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -eni -mMK -ntc -vYm -vYm -vYm -vYm -vYm -vYm -vYm -vYm -vYm -vYm -vYm -ntc -vYm -vYm -vYm -vYm -eni -ntc -ntc +ntJ +pcY +pcY +pcY +uji +dtr +oYH +pvv +aTn +pvv +pvv +pvv +pvv +pvv +bfi +pvv +pvv +pvv +pvv +pvv +fRg +hGj +kLM +iOu +uqb +kJQ +uqb +iQq +iQq +iQq +iQq +kLM +iQq +kLM +uqb +kLM +que +aDM +huz +kys +pef +rdS +axJ +axJ +xvQ +fXB +ncS +kAw +nZA +kAw +kAw +nZA +kAw +hrk +puZ +puZ +puZ +puZ +puZ +puZ +"} +(43,1,1) = {" +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +puZ +eni +mMK +ntc +vYm +vYm +vYm +vYm +vYm +vYm +vYm +vYm +vYm +vYm +vYm +ntc +vYm +vYm +vYm +vYm +eni +ntc +ntc eni eni ntc @@ -35118,69 +35093,69 @@ tes sPo wMh tze -aFO -xbm -pcY -pcY -pcY +tlB +tlB +tlB +tlB +xAS +xAS wMh wMh -vtz -aFO -cyW -xAS wMh wMh wMh -iZI -lSU -jis -lSU -acU -acU -lSU -lSU -lSU -fgH -lSU -bYk -goj -chU -dsY -uKo -rZt -wjK -goj -vTj -goj -asz -agm -rZt -rZt -ard -asz -asz -asz -jrg -bJj -bJj -bJj -jrg -jrg -jrg -bJj -gpz -bJj -gpz -bJj -osE -jrg -amu -fXX -fXX -bJj -amu -puZ +pcY +pcY +uji +fRg +oYH +pvv +pvv +aTh +aVx +aWI +aYd +baX +bcJ +pvv +pvv +pvv +pvv +pvv +fRg +hGj +kLM +iQq +kLM +uqb +kLM +iQq +iQq +iQq +iQq +iQq +kLM +iQq +iQq +kLM +kLM +kLM +huz +krU +axJ +axJ +trX +uLT +wTT +fXB +ncS +hrk +hrk +nZA +kAw +kAw +kAw +kAw puZ puZ puZ @@ -35279,70 +35254,70 @@ aRL uLf nlx wMh -aFO -aFO +tlB +tlB wMh -jmW -pcY wMh -aFO -aFO -aFO -aFO -vtz -aFO -aFO +wMh +wMh +tlB xAS wMh -iZI wMh -flN -kEs -agw -agw -kEs -wXh -lSU -cvn -lSU -wOO -goj -chU -goj -lfk -rZt -uII -aiD -chU -goj -fNE -aud -rZt -rZt -mRU -ptr -aue -asz -jrg -bJj -gpz -gpz -bJj -jrg -jrg -jrg -gpz -gpz -gpz -bJj -osE -jrg -iTQ -rbq -rbq -rbq -amu -puZ +wMh +ntJ +wMh +wMh +uKZ +fRg +oYH +pvv +pvv +aUw +aVB +aWQ +aVN +aVN +aVN +bqN +aVx +dbH +pvv +pvv +gxK +hGj +iQq +iQq +iQq +kLM +iQq +iQq +iQq +iQq +iQq +iQq +iQq +kLM +kLM +iQq +iQq +iQq +huz +axJ +axJ +rBC +rdS +axJ +axJ +tkm +ncS +hrk +hrk +kAw +kAw +kAw +kAw +kAw puZ puZ puZ @@ -35441,72 +35416,72 @@ wMh wMh jJv afY -aFO +tlB tTc wMh +gZk +tlB +tlB +tlB +xAS wMh wMh -aFO -aFO -aFO -aFO -aFO -aFO -tTc -vtz -aFO -eFI -xct wMh -kEs -flN -flN -kEs -flN -kOi -lSU -lSU -lSU -lSU -bxW -wnK -goj -aNf -rZt -nBs -goj -txU -goj -fNE -aud -ptr -miD -miD -rZt -ava -asz -asz -dVw -gpz -gpz -bJj -bJj -jrg -bJj -bJj -gpz -bJj -bJj -jrg -jrg -amu -rbq -rbq -rbq -amu -puZ -puZ -puZ +wMh +ntJ +ntJ +uKZ +aQg +oYH +pvv +aTh +aUx +aVL +aWS +rNx +bbg +rNx +aWS +bYO +aWQ +dbH +fhv +fRg +hGj +kLM +kLM +iQq +iQq +kLM +vdk +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +tpg +exX +qIr +axJ +axJ +axJ +dQq +axJ +huz +huz +huz +hrk +kAw +kAw +kAw +kAw +kAw +fNf +oFl puZ puZ puZ @@ -35602,75 +35577,75 @@ wMh ntJ wMh wMh +tlB +tlB +hBq +pcY wMh -aFO -aFO -aFO -aFO -aFO -aFO -wMh -pWY -wMh -wMh -xAS -xAS +tlB +tlB +tlB wMh +pcY +pcY wMh -tig wMh -eFI -flN -kEs -kEs -fgB -kEs -kOi -lSU -coj -coj -lSU -dtE -rZt -rZt -rZt -rZt -mgT -rZt -uvU -goj -fNE -aud -miD -ptr -ptr -rZt -aCB -aeU -dwQ -bJj -bJj -bJj -bJj -bJj -bJj -bJj -bJj -gpz -bJj -bJj -bJj -jrg -amu -gpz -bJj -osE -amu -puZ -puZ -puZ -puZ -puZ +ntJ +ntJ +uKZ +aQg +oYH +pvv +aTi +aUy +aVL +vVq +aVL +aVL +aVL +aWS +clp +aVU +aUA +gIQ +fRg +hGj +uqb +uqb +uqb +kLM +iQq +ipc +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +iQq +eSN +akF +alS +aMW +wHx +dQq +axJ +axJ +huz +huz +huz +hrk +nZA +nZA +nZA +kAw +kAw +rBk +hip +puZ +puZ puZ puZ "} @@ -35756,7 +35731,7 @@ oRH oRH tlB wMh -tlB +xAS wMh wMh oRH @@ -35764,71 +35739,71 @@ tlB tlB wMh wMh -aFO -aFO -aFO -aFO -wMh -wMh -wMh -wMh -wMh -iZI -wMh -wMh -wMh +tlB +tlB +hBq +pcY +pcY +dRb +dRb +dRb +pcY +pcY +pcY +pcY wMh -jmW -xct wMh wMh -gCL -flN -kEs -flN -flN -vTc -rMI -dTU -dTU -rMI -goj -wnK -goj -wnK -wnK -wnK -goj -wnK -goj -fNE -aud -rZt -rZt -rZt -nBh -ajg -asz -asz -jrg -jrg -jrg -cBU -cBU -cBU -bJj -bJj -bJj -gpz -bJj -bJj -bJj -bJj -fXX -osE -fXX -amu -puZ +uKZ +fRg +oYH +pvv +aTj +aUz +aVU +aWS +rPa +baY +rPa +aWS +cbk +aWU +deV +eVG +fRg +hGj +uqb +kLM +kLM +iQq +iQq +ipc +iQq +kLM +iQq +iQq +iQq +iQq +iQq +iQq +iQq +tpg +exX +qIr +rdS +axJ +axJ +axJ +axJ +axJ +huz +huz +sax +hrk +nZA +nZA +kAw +kAw puZ puZ puZ @@ -35925,77 +35900,77 @@ wMh oRH oRH wMh -aFO -aFO -aFO -aFO -wMh -wMh -pcY +tlB +tlB +tlB +tlB +tlB +tlB +hBq +tlB +xAS pcY pcY pcY -iZI pcY -wMh -ntJ -wMh -xct -wMh -wMh -wMh -flN -flN -eit -kEs -kEs -flN -rMI -dTU -dTU -rMI -goj -chU -goj -chU -chU -chU -goj -chU -aiD -asz -twt -agY -aha -arK -arU -asz -asz -qNE -qNE -enh -xNO -bJj -cBU -cBU -cBU -bJj -fXX -gpz -gpz -vlD -bJj -bJj -bJj -osE -bJj -amu -amu -amu -amu -amu -amu -amu +uji +uKZ +uKZ +uji +dtr +oYH +pvv +fhv +aUA +aVB +aWU +aVx +aVx +aVx +bqN +aVN +deV +dKR +pvv +fRg +hGj +kLM +iQq +iQq +iQq +iQq +iQq +kLM +kLM +uqb +kLM +iQq +iQq +iQq +iQq +iQq +tpg +exX +qIr +aut +rdS +rdS +axJ +axJ +rdS +huz +huz +sax +hrk +kAw +nZA +kAw +kAw +puZ +puZ +puZ +puZ +puZ puZ "} (49,1,1) = {" @@ -36087,77 +36062,77 @@ wMh wMh wMh wMh -aFO -aFO -aFO -aFO -aFO -wMh -pcY -pcY +tlB +tlB +oRH +tlB +tlB +tlB +tlB +tlB +xAS pcY pcY pcY pcY -jmW -abT -wMh -iZI -pWY -wMh -wMh -flN -kEs -kEs -flN -eit -vTc -asz -coj -coj -asz -dtE -goj -goj -goj -goj -goj -goj -aiD -goj -asz -agz -asz -asz -asz -asz -asz -asz -qNE -enh -xNO -acd -cBU -cBU -cBU -bJj -cBU -bJj -gpz -gpz -bJj -bJj -gpz -rbq -fXX -rbq -mwJ -fXX -fXX -fXX -fXX -pLS -amu +uKZ +cHB +xSk +afd +fRg +oYH +aSA +gIQ +aTj +aVN +aWV +aYx +bbh +beK +pvv +pvv +pvv +pvv +pvv +fRg +hGj +iQq +iQq +iQq +iQq +iQq +iQq +kLM +aDM +kLM +iQq +iQq +iQq +iQq +iQq +iQq +iQq +huz +aut +rdS +aCy +tdc +axJ +axJ +tZW +huz +huz +sax +hrk +kAw +nZA +kAw +kAw +puZ +puZ +puZ +puZ +puZ puZ "} (50,1,1) = {" @@ -36247,96 +36222,96 @@ wMh hBq wMh oRH -aFO -aFO -aFO -aFO -aFO -wMh -wMh -wMh -pcY -pcY +tlB +tlB +tlB +oRH +tlB +oRH +tlB +tlB +tlB +tlB pcY pcY pcY pcY -jmW -jmW pcY -lSU -lSU -lSU -lSU -lSU -wBf -kEs -fgB -kEs -flN -asz -asz -asz -asz -asz -asz -tDg -iWX -wZh -asz -rMI -kdy -asz -asz -asz -asz -asz -asz -asz -asz -asz -qNE -xNO -enh -wwW -bJj -bJj -bJj -jrg -cBU -bJj -fXX -fXX -bJj -gpz -bJj -bJj -fXX -vOb -cuJ -fXX -bJj -fXX -fXX -pLS -amu -puZ -"} -(51,1,1) = {" -puZ -puZ -puZ -puZ -puZ -anc -anc -iXC -ukU -iPU -anc -edw -bsM -iVj +uKZ +xSk +aNq +oYH +fRg +oYH +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +fRg +hGj +iQq +iOu +kLM +iOu +kLM +kLM +iQq +kLM +iQq +iQq +iQq +iQq +pKK +iQq +iOu +kLM +huz +rdS +axJ +amH +tbR +axJ +rdS +ixC +huz +huz +sax +hrk +kAw +kAw +kAw +kAw +puZ +puZ +puZ +puZ +puZ +puZ +"} +(51,1,1) = {" +puZ +puZ +puZ +puZ +puZ +anc +anc +iXC +ukU +iPU +anc +edw +bsM +iVj qII ntc ntc @@ -36409,15 +36384,13 @@ hBq wMh oRH xAS -aFO +tlB jCZ pGj -aFO -abH -wMh -wMh -pcY -pcY +tlB +hBn +oRH +tlB pcY pcY pcY @@ -36426,62 +36399,64 @@ pcY pcY pcY pcY -lSU -lSU -lSU -aSI -aRs -uRt -flN -sBW -rZt -nOB -rMI -rMI -asz -tRq -wdy -dTU -bZZ -dTU -twc -fNE -rZt -uvU -asz -asz -qNE -qNE -qNE -qNE -qNE -qNE -qNE -qNE -cEV -kSW -wwW -cBU -bJj -jrg -jrg -cBU -cBU -bJj -bJj -bJj -bJj -bJj -fXX -osE -gpz -amu -amu -amu -fXX -igJ -fXX -amu +uKZ +hsw +aNp +bfR +oYH +oYH +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +gqe +uji +wNB +khx +jac +khx +iHu +idG +kLM +iQq +iQq +kLM +kLM +huz +huz +huz +huz +huz +huz +mpt +axJ +rxd +sFv +axJ +rdS +hRC +huz +huz +sax +qCr +kAw +nZA +kAw +kAw +puZ +puZ +puZ +puZ +puZ puZ "} (52,1,1) = {" @@ -36571,79 +36546,79 @@ tlB wMh oRH xAS -elN +pGi jmW swV -aFO -wMh -xAS -wMh -pcY -pcY -xbn -qBn -rdp +tlB +oRH +oRH +tlB pcY pcY pcY pcY pcY -lSU -lSU -aOv -afF -rZt -rZt -gLv -afF -wBf -wnK -dTU -pkK -asz -emq -chU -kbZ -chU -gTv -chU -fNE -uvU -rZt -asz -asz -qNE -qNE -qNE -enh -enh -iSG -xNO -iSG -hRF -bax -wwW -wvS -cBU -bJj -bJj -cBU -cBU -bJj -bJj -bJj -qMc -bJj -rbq -osE -gpz -gpz -amu -amu -fXX -fXX -lAb -amu +uji +uji +uji +uji +uKZ +uKZ +uji +uji +uji +qLA +uji +uKZ +aVT +fRg +fRg +oYH +uKZ +bFS +ail +ail +ail +uKZ +uji +uji +iMA +iMA +iMA +uKZ +ehV +aDM +kTP +iQq +iQq +kLM +uqb +huz +cio +ieD +aKR +aDu +huz +axJ +rdS +rti +ieD +axJ +axJ +hIu +huz +huz +sax +sax +nZA +nZA +kAw +kAw +kAw +puZ +puZ +puZ +puZ puZ "} (53,1,1) = {" @@ -36733,79 +36708,79 @@ wMh wMh wMh oRH -aFO -pMV -aFO -aFO -wMh -wMh -pcY -pcY +tlB +xMs +tlB +oRH +tlB +oRH pcY -xbn -ppb -rdp pcY pcY pcY pcY pcY -lSU -lSU -tSI -rZt -gLv -rZt -gLv -afF -wBf -wnK -dTU -wnK -asz -kbZ -chU -gTv -sHf -tRq -chU -ogu -rZt -rZt -asz -asz -qNE -qNE -xNO -iSG -xNO -xNO -xNO -iSG -rwy -bBT -xrC -cBU -cBU -cBU -bJj -bJj -cBU -bJj -bJj -osE -bJj -bJj -bJj -amu -gpz -gpz -amu -amu -fXX -fXX -pLS -amu +uji +uji +fRg +aMs +bYV +lJh +loH +ppI +aMs +bKV +bKV +uKZ +nUa +bKV +bKV +bKV +iDW +bzh +fRg +fRg +fRg +fRg +aKS +fRg +ohq +mKB +cLq +iMA +avx +voo +kLM +iQq +iQq +kLM +tpg +exX +qIr +azS +qny +aDu +aut +kfW +axJ +axJ +axJ +axJ +axJ +rdS +huz +huz +sax +sax +nZA +nZA +kAw +kAw +kAw +puZ +puZ +puZ +puZ puZ "} (54,1,1) = {" @@ -36896,123 +36871,123 @@ wMh wMh oRH xAS -aFO -aFO +tlB +tlB wMh xAS -ntJ -pcY -pcY -pcY -xbn -qBn -rdp -wMh -wMh -wMh -ntJ +aFO pcY -lSU -lSU -afF -sBW -xDq -aSI -afF -aUT -asz -rMI -rMI -rMI -asz -emq -wnK -dTU -wnK -dTU -hfm -asz -rZt -rZq -asz -asz -rdQ -mmW -lLE -aSC -iSG -iSG -atJ -bax -bax -bBT -xrC -cBU -bJj -bJj -cBU -cBU -bJj -fjv -iTQ -osE -gpz -gpz -bJj -amu -gpz -gpz -amu -amu -fXX -fXX -amu -amu -puZ -"} -(55,1,1) = {" -puZ -puZ -puZ -puZ -anc -jWL -nTC -nTC -nTC -nTC -nTC -nTC -pFJ -anc -xkV -fxJ -frV -gNM -aMu -azy -vYm -vYm -vYm -vYm -vYm -vYm -vYm -vYm -ntc -ntc -aEJ -mMK -eni -kOV -kOV -vYm -ntc -ntc -eni -eni -eni -ntc +gUc +xgH +xgH +xgH +gQJ +uji +uji +fRg +fRg +fRg +fRg +fRg +fRg +fRg +bKV +bKV +iMA +vHX +aWX +bKV +bKV +bsC +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +fRg +xQa +iMA +avx +uqb +kLM +iQq +iQq +kLM +tpg +exX +alW +arW +anJ +dQq +hmo +rdS +axJ +dQq +axJ +axJ +axJ +axJ +huz +huz +sax +sax +nZA +nZA +kAw +kAw +kAw +puZ +puZ +puZ +puZ +puZ +"} +(55,1,1) = {" +puZ +puZ +puZ +puZ +anc +jWL +nTC +nTC +nTC +nTC +nTC +nTC +pFJ +anc +xkV +fxJ +frV +gNM +aMu +azy +vYm +vYm +vYm +vYm +vYm +vYm +vYm +vYm +ntc +ntc +aEJ +mMK +eni +kOV +kOV +vYm +ntc +ntc +eni +eni +eni +ntc kOV ntc kOV @@ -37057,78 +37032,78 @@ aFO xAS oRH xAS +tlB +tlB +xAS aFO -aFO -aFO -wMh xAS -ntJ -pcY -pcY +aFO pcY -xbn -ppb -rdp -wMh -ntJ -wMh -wMh -wMh -lSU -aNL -nmi -afP -asz -asz -aTQ -asz -asz -wnK -dTU -wnK -asz -asz -qkL -fNE -fNE -asz -asz -asz -crF -crF -asz -asz -qNE -iSG -bax -aUQ -xNO -iSG -iSG -iSG -wwW -pPY -wwW -bJj -fjv -fjv -fjv -bJj -fjv -jrg -amu -osE -gpz -gpz -fXX -bJj -gpz -gpz -amu -amu -fXX -fXX -amu +aGc +qkC +tzo +qkC +tGv +dtr +fRg +bKV +bKV +bKV +bKV +bKV +bKV +bKV +bKV +bKV +iMA +vHX +bKV +bKV +bKV +bsC +pvv +pvv +pvv +pvv +pvv +pvv +pvv +pvv +fRg +uKZ +uKZ +vqV +kLM +kLM +iQq +iQq +iQq +kLM +huz +pJM +ayZ +rdS +bqO +axJ +bqO +axJ +axJ +axJ +axJ +axJ +axJ +huz +huz +sax +sax +nZA +nZA +nZA +kAw +kAw +fNf +oFl +puZ puZ puZ "} @@ -37219,78 +37194,78 @@ aFO aFO xAS aFO +tlB +tlB +xAS aFO aFO aFO -wMh -wMh -ntJ -pcY -pcY -pcY -xbn -qBn -tyi -wMh -ntJ -ntJ -wMh -wMh -bXo -kxx -bIh -afQ -fNE -rZt -rZt -rZt -rZt -rZt -rZt -rZt -rkc -wnK -rZt -rZt -rZt -asz -asz -hMY -rZt -rZt -asz -asz -qNE -qPi -iSG -iSG -iSG -iSG -bax -iSG -wwW -pOy -wwW -jrg -cBU -fjv -fjv -fjv -jrg -jrg -amu -osE -gpz -osE -osE -bJj -gpz -amu -amu -amu -fXX -fXX -amu +xAS +aGd +aHd +aIG +tzo +aJk +fRg +fRg +bKV +bKV +aMK +aNl +aNl +aPn +bKV +bKV +tsU +uKZ +ocB +bKV +bKV +bKV +hDW +bAX +fRg +fRg +fRg +qXk +fRg +pvv +khz +fRg +iMA +nIA +scp +kLM +iQq +iQq +kLM +iQq +iQq +huz +aQq +axJ +axJ +axJ +axJ +jJZ +oXU +axJ +dQq +axJ +axJ +rdS +huz +huz +sax +sax +kAw +kAw +kAw +kAw +kAw +rBk +hip +puZ puZ puZ "} @@ -37378,81 +37353,81 @@ wMh wMh oRH oRH +xAS +tlB +tlB +hnj +tlB +tlB +xAS aFO aFO aFO -cou -aFO -aFO -xAS -wMh -pcY -jmW -pcY -pcY -aPX -dRi -abA -wMh -wMh -wMh -ntJ -wMh -asz -aNN -afN -afP -fNE -rZt -rZt -rZt -rZt -gGf -rZt -rZt -qVo -wnK -wnK -wnK -rZt -asz -asz -hLB -rZt -rZt -asz -asz -uil -iSG -ayJ -aSC -wwW -wwW -bax -wwW -wwW -cEV -rfv -jrg -amu -iTQ -amu -amu -amu -amu -amu -osE -gpz -osE -osE -bJj -gpz -amu -amu -amu -fXX -fXX -amu +aGd +tzo +qkC +tzo +aGd +fRg +fRg +bKV +bKV +bKV +bKV +kGz +bKV +bKV +ohE +bKV +uKZ +ahe +fRg +fRg +oYH +uKZ +bwk +cex +cex +cex +uKZ +xHu +pvv +pvv +oCG +kjM +oCG +iQq +iQq +iQq +kLM +aDM +kLM +iQq +huz +huz +avz +avz +axJ +axJ +alO +pJM +rgI +rdS +axJ +kLi +alP +huz +huz +sax +sax +kAw +kAw +nZA +kAw +kAw +kAw +puZ +puZ puZ puZ "} @@ -37546,75 +37521,75 @@ wMh wMh wMh aFO +tlB +xAS aFO xAS -wMh -jmW -jmW -wMh -wMh -wMh -ntJ -wMh -ntJ -wMh -wMh -ntJ -asz -asz -asz -asz -asz -asz -krT -rZt -rZt -rZt -gGf -bDx -asz -kXt -asz -wnK -rZt -asz -asz -kPX -rZt -rZt -asz -asz -qNE -nHp -bax -aUQ -wwW -wwW -bax -wwW -wwW -jrg -jrg -jrg -amu -igJ -fXX -fXX -fXX -fXX -fXX -osE -gpz -bJj -fXX -bJj -iTQ -amu -amu -amu -fXX -fXX -amu +aGb +tzo +qkC +tzo +aGd +fRg +fRg +bKV +bKV +pzj +pzi +bKV +bKV +bKV +bKV +bKV +oYH +bKV +bKV +bKV +bKV +oYH +bKV +bKV +bKV +bKV +iMA +sFR +pvv +pvv +oCG +wRm +oCG +iQq +iQq +iQq +szU +kLM +iQq +iQq +uqb +ncS +pTp +pTp +rdS +axJ +alO +huz +qWL +aut +axJ +kLi +kLi +huz +huz +sax +sax +kAw +kAw +nZA +nZA +kAw +kAw +puZ +puZ puZ puZ "} @@ -37709,74 +37684,74 @@ xAS wMh wMh aFO -aFO +tlB xAS -wMh -wMh -ntJ -ntJ -wMh -wMh -lAN -wMh -ntJ -ntJ -wMh -asz -abn -abF -abF -abF -acg -asz -aUU -aXh -mYX -bVr -aXh -aXh -bJf -rkc -wnK -rZt -hMY -asz -asz -crF -crF -asz -asz -xNO -iSG -iSG -iSG -iSG -wwW -xrC -xrC -iSG -enh -jrg -jrg -amu -lAb -fXX -fXX -fXX -fXX -fXX -fXX -bJj -bJj -gpz -osE -bJj -mwJ -bJj -fXX -fXX -fXX -amu +uji +aGe +tzo +tzo +aJj +aGd +fRg +fRg +bKV +bKV +aMK +aNl +aNl +aPn +bKV +bKV +bKV +fRg +bKV +bKV +bKV +bKV +uHA +bKV +bKV +rfd +bKV +iMA +hFJ +fRg +dZN +fRg +iMA +tLC +hye +kLM +iQq +kLM +iQq +iQq +kLM +uqb +ncS +mRc +rdS +aXk +axJ +jFq +huz +qPh +rdS +axJ +axJ +sXt +huz +huz +sax +sax +kAw +kAw +nZA +nZA +nZA +kAw +puZ +puZ puZ puZ "} @@ -37872,73 +37847,73 @@ wMh aFO aFO aFO -aFO -aFO -wMh -wMh -ntJ -gvY -ntJ -qXC -wMh -wMh -wMh -wMh -asz -abp -abG -abJ -abG -ach -asz -aWC -aWs -qkR -eRG -sbd -wnK -aXH -rkc -wnK -rZt -fir -asz -asz -rZt -rZt -asz -asz -iSG -iSG -iSG -bax -bax -wwW -xrC -nRL -kSW -enh -jrg -jrg -amu -cur -fXX -fXX -amu -amu -iTQ -bJj -fXX -gpz -gpz -bJj -fXX -cuJ -fXX -bJj -fXX -fXX -amu +tlB +uji +ahX +qkC +tzo +qkC +mhS +dtr +fRg +bKV +bKV +bKV +bKV +bKV +bKV +bKV +bKV +bKV +fRg +bKV +bKV +bKV +bKV +fRg +bKV +bKV +bKV +bKV +uKZ +uKZ +iMA +iMA +iMA +uKZ +uKZ +ehV +kLM +iQq +iQq +iQq +kLM +kLM +uqb +ncS +bWB +auh +aTO +hkS +itR +oNz +qOE +rdS +axJ +sYx +wFm +huz +huz +sax +sax +kAw +kAw +nZA +hrk +nZA +kAw +puZ +puZ puZ puZ "} @@ -38034,73 +38009,73 @@ wMh xAS xAS aFO -aFO -aFO -aFO -wMh -tRn -wMh -wMh -wMh -pyB -lAN -wMh -wMh -asz -abp -abJ -abJ -abJ -aSK -aTR -rMI -acY -rZt -bJi -rZt -wnK -aXH -rkc -wnK -wnK -asz -asz -dTj -rZt -rZt -tYA -fNE -iSG -aHz -iSG -bax -bax -eSc -xrC -cBs -xNO -enh -jrg -jrg -amu -amu -fXX -fXX -amu -jrg -osE -bJj -gpz -gpz -gpz -osE -bJj -iTQ -iTQ -amu -amu -amu -amu +xAS +uji +rXn +dsx +dsx +dsx +waS +uji +uji +fRg +fRg +pgh +fRg +fRg +fRg +lro +bKV +bKV +oYH +bKV +meg +bKV +bbi +beP +bKV +meg +bKV +bKV +eGG +bKV +bKV +ftr +obb +vHX +iMA +ehV +kLM +iQq +iQq +kLM +uqb +uqb +huz +huz +auh +bWB +qvY +gZZ +iof +aDu +qoY +axJ +axJ +wFm +sYx +huz +huz +sax +sax +nZA +kAw +nZA +nZA +nZA +kAw +puZ +puZ puZ puZ "} @@ -38197,70 +38172,70 @@ vXw wMh xAS aFO -aFO -aFO -aFO -wMh -kSO -thK -xog -kqE -wMh -wMh -wMh -asz -aNP -abJ -abG -abJ -abJ -rZt -kxx -oZs -bJi -bJi -bJi -wnK -bQx -asz -asz -qkL -asz -asz -rZt -rZt -iEF -cYC -fNE -iSG -iSG -bax -wwW -xrC -xrC -xrC -iSp -xNO -xNO -enh -jrg -jrg -amu -fXX -fXX -amu -jrg -bJj -gpz -bJj -bJj -bJj -osE -bJj -amu -puZ -puZ -puZ +uji +uji +uji +uji +uji +uji +uji +uji +uji +aKL +uji +aNh +aLs +uji +uji +iMA +iMA +uKZ +oYH +gxK +fRg +oYH +uKZ +iMA +iMA +uji +uKZ +uKZ +bKV +okc +bKV +krm +iXx +iMA +ehV +uqb +kLM +iQq +nAs +uqb +ajE +huz +qSW +arZ +aIh +aPf +gtx +aTO +oww +qmv +axJ +axJ +axJ +axJ +huz +huz +sax +sax +kAw +kAw +hrk +kAw +nZA +kAw puZ puZ puZ @@ -38359,71 +38334,71 @@ hPp pcY wMh xAS -aFO -aFO -nhF -aFO -rJI -pvR -vjg -wiG -wMh -ntJ -wMh -asz -aNR -abJ -abG -abJ -abJ -rZt -kxx -oZs -bJi -bJi -ahZ -eRG -aXH -rZt -rZt -rZt -hAX -crF -rZt -rZt -rZt -fhd -fNE -iSG -iSG -bax -wwW -xrC -xrC -xrC -xrC -xNO -xNO -enh -jrg -jrg -amu -eom -fXX -amu -osE -osE -bJj -bJj -bJj -bJj -bJj -bJj -amu -puZ -puZ -puZ -puZ +uji +uji +uji +uji +uji +uji +uji +uji +aLk +bKV +bKV +aNg +bKV +aOb +uji +snX +fRg +aKS +fRg +fRg +dLk +fRg +aKS +fRg +fRg +fRg +rIj +uKZ +giH +uji +iMA +iMA +iMA +uKZ +ehV +uqb +kLM +iQq +iQq +kLM +ajd +huz +fjS +anJ +aGf +aNE +ggr +hLE +qvY +qkQ +axJ +axJ +axJ +axJ +huz +huz +sax +iZj +kAw +kAw +hrk +kAw +nZA +kAw +hrk puZ puZ puZ @@ -38521,71 +38496,71 @@ pcY pcY wMh xAS -aFO -aFO -aFO -wMh -rJI -gso -aJd -ntJ +tPB wMh wMh +ntJ +ntJ +ntJ wMh -asz -abp -abJ -abJ -abJ -abJ -rZt -rMI -oZs -azm -bJi -rZt -wnK -aXH -rZt -rZt -rZt -dwQ -crF -rZt -rZt -rZt -rZt -fNE -iSG -iSG -wwW -xrC -wwW -jjq -iYu -eMx -xNO -xNO -jrg -jrg -jrg -amu -fXX -fXX -amu -osE -osE -gpz -bJj -jrg -bJj -bJj -gpz -osE -puZ -puZ -puZ -puZ +iMA +aKQ +bKV +bKV +omu +aFr +uji +uji +pvv +kJw +pvv +pvv +pvv +pvv +pvv +sYh +pvv +pvv +pvv +pvv +eGs +fRg +uji +xwo +jhm +bHC +bHC +iKW +kLM +iQq +iQq +iQq +iQq +qIr +oWk +qIr +anG +axJ +axJ +ggh +rdS +owe +axJ +rdS +axJ +axJ +axJ +huz +huz +sax +kAw +kAw +nZA +nZA +kAw +kAw +kAw +hrk puZ puZ puZ @@ -38683,71 +38658,71 @@ pcY jmW wMh aFO -aFO -aFO +tPB wMh -ntJ -rJI -gso -faR -ntJ wMh wMh +ntJ +ntJ wMh -asz -abp -abG -abJ -abG -acj -asz -aUX -aWB -gTU -wnK -wnK -wnK -aXH -rZt -rZt -rZt -asz -asz -rZt -rZt -hCY -hCY -fNE -iSG -iSG -xrC -wwW -bax -iSG -xrC -xrC -xNO -jrg -jrg -jrg -jrg -amu -fXX -fXX -amu -iTQ -bJj -gpz -bJj -jrg -bJj -bJj -gpz -osE -puZ -puZ -puZ -puZ +iMA +aJM +aJU +bKV +aLk +bMK +uji +snX +pvv +aSA +pvv +vFR +eVG +pvv +pvv +pvv +aSA +pvv +pvv +pvv +pvv +fRg +hvZ +kLM +iOu +kLM +iOu +kLM +iQq +kLM +iQq +iQq +iQq +qIr +oWk +qIr +ans +ans +aMW +fMq +aut +axJ +rdS +aut +huz +huz +huz +huz +huz +hrk +kAw +hrk +hrk +nZA +kAw +kAw +nZA +nZA puZ puZ puZ @@ -38845,70 +38820,70 @@ pcY jmW wMh nuy -nuy -aFO +vgR wMh ntJ -rJI -gso -qIu -ntJ ntJ wMh +ntJ wMh -asz -abx -abM -abM -abM -ack -asz -aUY -vjs -aXw -kaL -wnK -wnK -aXH -rZt -rZt -rZt -fNE -ril -rZt -iEF -far -nVL -fNE -iSG -wwW -xrC -wwW -wwW -enh -xNO -xNO -jrg -jrg -jrg -jrg -jrg -amu -fXX -fXX -osE -osE -gpz -gpz -jrg -jrg -bJj -bJj -osE -osE -puZ -puZ -puZ +uKZ +iMA +iMA +uji +uji +uji +uji +fRg +pvv +pvv +aTh +aVx +aWI +aYd +baX +bcJ +pvv +pvv +pvv +aSA +pvv +fRg +hvZ +kLM +iQq +iQq +iQq +iQq +kLM +iQq +iQq +iQq +iQq +qIr +akF +alS +ans +axJ +axJ +fbf +fbf +ook +hAS +aDu +huz +huz +huz +huz +huz +kAw +kAw +nZA +nZA +nZA +kAw +kAw +nZA puZ puZ puZ @@ -39007,70 +38982,70 @@ wMh wMh aFO nuy -nuy -aFO +hBq wMh -tRn -aNy -xtc -ggv +pcY ntJ +jmW +wMh ntJ wMh +fEl wMh -asz -asz -asz -asz -asz -asz -asz -ufb -wnK -jaU -uEx -bJi -bJi -aXH -rZt -rZt -rZt -fNE -mWA -rZt -iEF -etV -tNN -fNE -wwW -wwW -xrC -wwW -wwW -enh -enh -jrg -jrg -jrg -jrg -jrg -jrg -amu -fXX -fXX -osE -osE -bJj -bJj -jrg -jrg -jrg -bJj -bJj -bJj -puZ -puZ -puZ +hBq +lRJ +uKZ +fRg +gxK +pvv +pvv +aUw +fof +aWQ +aVN +aVN +aVN +bqN +aVN +dbH +wTz +pvv +fRg +hvZ +iQq +kLM +iQq +iQq +iQq +iQq +iQq +kLM +iQq +iQq +qIr +exX +qIr +rdS +rdS +axJ +axJ +axJ +bsS +pKf +iYC +huz +huz +oBV +pRU +hrk +hrk +kAw +nZA +nZA +nZA +kAw +kAw +nZA puZ puZ puZ @@ -39169,70 +39144,70 @@ aFO aFO aFO aFO -aFO -aFO -aFO -wMh -ofr -nJu -tze -wMh wMh -ntJ wMh pcY pcY -pcY -pcY -pcY -pcY -asz -asz -asz -ahu -qfI -bJi -bJi -nAp -rZt -asz -asz -asz -asz -qkL -asz -asz -asz -asz -wwW -wwW -iSG -enh -enh -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -amu -amu -amu -bJj -fXX -gpz -bJj -bJj -jrg -jrg -bJj -gpz -osE -puZ -puZ -puZ +jmW +jmW +wMh +wMh +fEl +upK +hBq +hBq +uKZ +fRg +fRg +pvv +aTh +aUx +aVM +aWS +rNx +bbg +rNx +aWS +bYO +aWQ +dbH +wvx +fRg +hvZ +kLM +iQq +kLM +iQq +iQq +iQq +kLM +snN +kTP +iQq +huz +huz +kLi +amI +aCy +rdS +axJ +axJ +nTu +hAS +sjh +huz +huz +tuA +kAw +hrk +hrk +kAw +kAw +kAw +nZA +kAw +kAw +nZA puZ puZ puZ @@ -39331,70 +39306,70 @@ tPs aFO aFO aFO -aFO -aFO -aFO -aFO -wMh -aFO -aFO -jmW wMh -lAN -ntJ wMh -cQY -skK -kSO -xog pcY pcY -asz -asz -asz -tpL -orO -orO -tJY -asz -asz -asz -gSJ -bJi -bJi -bJi -asz -xvd -lVJ -iSG -wwW -iSG -enh -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -fXX -bJj -bJj -gpz -bJj -bJj -bJj -gpz -bJj -puZ -puZ -puZ +pcY +pcY +pcY +pcY +pcY +lAN +nyc +tlB +uKZ +wUy +fRg +pvv +aTi +aUy +aVL +aWT +aVL +bOh +aVL +aWS +aVL +aVL +dCS +eoH +fRg +hvZ +iQq +iQq +kLM +iQq +iQq +kLM +bcM +aDM +lNg +kLM +huz +huz +dLi +amH +qsN +aMN +faH +hHf +nTu +qsN +iYC +huz +huz +dWO +hbB +kAw +hrk +kAw +kAw +kAw +kAw +kAw +oBV +nZA puZ puZ puZ @@ -39470,91 +39445,91 @@ aXb eni ntc kOV -oRH -xAS -aFO -aFO -aFO -wMh -jmW -xAS -xAS -aFO -aFO -xAS -xAS -aFO -aFO -cou -aFO -aFO -pMV -aFO -aFO -aFO -aFO -aFO -cou -aFO -aFO -aFO -aFO -aFO -aFO -aFO -wMh -wMh -wMh -cQY -ntJ -aNy -xtc -pcY -pcY -asz -crF -aXH -bJi -crF -crF -tHD -uEx -crF -fNE -hyx -xFp -xFp -sHL -asz -lVN -iSG -iSG -wwW -iSG -enh -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -gpz -bJj -gpz -gpz -gpz -bJj -bJj -bJj -bJj -puZ +oRH +xAS +aFO +aFO +aFO +wMh +jmW +xAS +xAS +aFO +aFO +xAS +xAS +aFO +aFO +cou +aFO +aFO +pMV +aFO +aFO +aFO +aFO +aFO +wMh +pcY +pcY +pcY +pcY +pcY +pcY +hBq +tlB +hBq +tlB +uKZ +xHu +fRg +pvv +aTj +cov +eHL +aWS +rPa +baY +rPa +aWS +fXp +aWU +deV +uyI +fRg +hvZ +iQq +iQq +iQq +iQq +iQq +iQq +kLM +aDM +uqb +iQq +huz +huz +huz +huz +huz +huz +huz +huz +huz +huz +huz +huz +huz +nNX +hbB +kAw +kAw +kAw +hrk +kAw +kAw +jzs puZ puZ puZ @@ -39655,68 +39630,68 @@ aFO aFO wMh aFO -nuy -aFO -aFO -aFO -xAS -aFO -aFO aFO -aFO -aFO -wMh -wMh -pei -wMh -xfZ -ntJ pcY pcY -asz -crF -aXH -tHD -crF -crF -tHD -uEx -crF -fNE -qud -tZA -ctC -ctC -asz -asC -asC -iSG -asC -asC -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -gpz -gpz -gpz -gpz -gpz -gpz -gpz -gpz -bJj -bJj +pcY +pcY +pcY +pcY +nyc +hBq +xCD +hBq +tlB +uKZ +uwS +fRg +pvv +pvv +aUw +xyY +aWU +aVx +aVx +aVx +bqN +aUA +deV +pti +pvv +fRg +hvZ +kLM +iQq +iQq +iQq +iQq +iQq +kLM +lNg +kLM +iQq +iQq +huz +huz +huz +huz +huz +huz +huz +huz +huz +huz +huz +huz +dWO +hbB +kAw +kAw +kAw +hrk +kAw +nZA +kAw puZ puZ puZ @@ -39817,68 +39792,68 @@ cou wMh wMh wMh -aFO -aFO -aFO -xAS wMh -jmW -aFO -aFO -aFO -aFO -aFO -aFO -cQY -mbt -mbt -mbt pcY pcY -asz -asz -asz -uOc -pCI -gmV -vTc -asz -asz -asz -fNE -fNE -fNE -fNE -asz -kVd -kVd -uzu -xgc -uzu -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -osE -gpz -gpz -gpz -gpz -bJj -bJj -bJj -gpz -bJj -bJj +pcY +pcY +pcY +hBq +nyc +hBq +cps +tlB +tlB +uKZ +oIR +fRg +pvv +pvv +aTj +aVN +aWV +aYx +bbh +beK +aSA +gIQ +oXM +pvv +pvv +fRg +hvZ +kLM +kLM +iQq +iQq +iQq +iQq +iQq +kLM +kLM +iQq +iQq +iQq +lXQ +cwZ +kAw +kAw +nZA +kAw +kAw +hrk +hrk +hrk +acl +kAw +kAw +hrk +kAw +kAw +kAw +kAw +kAw +puZ puZ puZ puZ @@ -39980,67 +39955,67 @@ wMh jmW jmW wMh -aFO -aFO -aFO -wMh -tJP -lAN -aFO -aFO -aFO -aFO -wMh -wMh -wMh -wMh -wMh -wMh pcY pcY -siZ -ukp -kVd -kVd -boW -boW -boW -siZ -dkv -xgc -kVd -kVd -rAH -rAH -kVd -uzu -boW -xgc -uzu -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -gpz -bJj -bJj -jrg -bJj -bJj -bJj -bJj -bJj -bJj +pcY +pcY +pcY +hBq +hBq +tlB +aFO +hBq +hBq +uKZ +rIj +wCn +pvv +pvv +pvv +pvv +pvv +mOY +drM +pvv +aSA +uaa +pvv +pvv +pvv +fRg +hvZ +kLM +iOu +kLM +iOu +kLM +kLM +iQq +kLM +iQq +iQq +kLM +iQq +jWh +cwZ +kAw +kAw +kAw +kAw +nZA +hrk +hrk +nZA +hRY +hrk +nZA +nZA +nZA +kAw +kAw +kAw +nDv +puZ puZ puZ puZ @@ -40112,98 +40087,98 @@ kOV kOV kOV kOV -kOV -kOV -aqd -eBc -aqI -aqI -aqI -aqI -asj -ntc -jmW -xAS -aFO -aFO -aFO -pMV -aFO -xAS -wMh -xAS -wMh -pcY -pcY -wMh -aFO -wMh -jmW -jmW -jmW -wMh -aFO -aFO -aFO -xAS -tJP -wMh -aFO -aFO -wMh -wMh -wMh -wMh -ntJ -ntJ -wMh -wMh -ukp -kVd -ckH -lIa -lIa -qjY -qjY -qjY -qjY -tsK -qjY -tsK -lIa -oHf -oHf -oHf -lIa -qjY -tsK -tsK -ckH -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -bJj -gpz -bJj -jrg -jrg -bJj -bJj -bJj -bJj -bJj -bJj -bJj +kOV +kOV +aqd +eBc +aqI +aqI +aqI +aqI +asj +ntc +jmW +xAS +aFO +aFO +aFO +pMV +aFO +xAS +wMh +xAS +wMh +pcY +pcY +wMh +aFO +wMh +jmW +jmW +jmW +wMh +pcY +pcY +pcY +pcY +tJP +nyc +tlB +xAS +xCD +xAS +hBq +uKZ +rIj +ohq +pvv +pvv +pvv +tXL +pvv +pvv +pvv +pvv +pvv +pvv +pvv +hZI +pvv +fWq +uji +iOA +aDM +lNg +kLM +uqb +uqb +iQq +iQq +kLM +kLM +kLM +kLM +fpF +wSv +kAw +kAw +kAw +kAw +kAw +nZA +nZA +nZA +aco +hrk +nZA +nZA +nZA +kAw +nZA +nZA +puZ +puZ +puZ puZ puZ puZ @@ -40304,68 +40279,68 @@ wMh jmW wMh wMh -aFO +wMh +pcY +pcY +tlB +hBq +tlB +xAS aFO xAS xAS -tJP -faW -faW -faW -jmW -wMh -wMh -wMh -ntJ -ntJ -wMh -wMh -kVd -kVd -kVd -kVd -kVd -boW -boW -boW -boW -xgc -boW -xgc -xgc -kVd -rAH -rAH -kVd -xgc -kVd -ukp -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -bJj -bJj -osE -bJj -bJj -jrg -jrg -bJj -bJj -osE -bJj -bJj -bJj -bJj +oRH +uKZ +uKZ +uKZ +fRg +fRg +fRg +fRg +fRg +fRg +oZR +fRg +iXc +fRg +bxL +bxL +gGc +rzR +uji +qrY +qrY +qrY +hHR +hHR +xCz +uxZ +uxZ +uxZ +lWC +hHR +hHR +sax +sax +sax +hrk +kAw +kAw +kAw +kAw +kAw +kAw +teK +hrk +hrk +hrk +kAw +nZA +nZA +puZ +puZ +puZ +puZ puZ puZ puZ @@ -40467,67 +40442,67 @@ wMh ntJ wMh aFO +hBq +xAS +xAS +xAS +xAS +xAS aFO -cpC -lfe -pcY -pcY -pcY -pcY -mTN +oRH nzr -uZF -wMh -wMh -ntJ -ntJ -wMh -kVd -kVd -xgc -xgc -boW -boW -boW -xgc -boW -xgc -xgc -rAH -xgc -xgc -rAH -rAH -kVd -xgc -uzu -mhs -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -bJj -jrg -bJj -bJj -bJj -iel -jrg -jrg -bJj -bJj -osE -bJj -bJj -jrg -bJj +xAS +oRH +hBq +uKZ +uKZ +uji +gpF +oYH +fUP +uji +uKZ +iMA +iMA +iMA +uKZ +uKZ +uKZ +uKZ +uji +ofw +ofw +jMf +tHd +kop +kop +kyD +kyD +kyD +tHd +kop +gzb +sax +sax +sax +bcV +oFl +kAw +kAw +kAw +hrk +bcV +tFd +hrk +hrk +kAw +nZA +nZA +nZA +puZ +puZ +puZ +puZ puZ puZ puZ @@ -40627,69 +40602,69 @@ ntc xAS wMh wMh -wMh -jmW -wMh -wMh -kSO -xog -pcY -pcY -pcY -kSO -xog +aFO +aFO +aFO +aFO +xAS +aFO +aFO +aFO +xAS +xAS +aFO wTx -wMh -wMh -ntJ -wMh -vnr -kVd -kVd -dyt -dyt -fHx -xgc -boW -boW -xgc -boW -boW -boW -xgc -xgc -kVd -rAH -rAH -uzu -kVd -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -bJj -bJj -bJj -bJj -osE -osE -bJj -bJj -bJj -mie -jrg -bJj -bJj -gpz -bJj -bJj -bJj -bJj +xAS +fOa +aFO +aFO +uji +uKZ +jLX +uKZ +uji +tHd +rtZ +tHd +tHd +rtZ +kop +kop +xvp +tHd +jMf +xvp +kop +kop +kop +tHd +kyD +kyD +kyD +tHd +kop +bhN +fCs +sax +sax +rBk +vAU +kAw +kAw +kAw +tad +tlr +tuz +tFy +hrk +kAw +nZA +nZA +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -40761,96 +40736,96 @@ aqI asj kOV kOV -kOV -kOV -eni -kOV -eni -eni -mMK -ntc -ntc -vYm -ntc -vYm -vYm -xAS -xAS -aFO -aFO -wMh -pcY -pcY -kOV -toD -toD -toD -toD -jmW -wMh -wMh -jmW -xAS -xAS -pcY -aNy -xtc -pcY -pcY -pcY -aNy -xtc -qKA -ntJ -wMh -wMh -ntJ -ntJ -kVd -kVd -boW -boW -xgc -boW -boW -boW -boW -boW -boW -boW -boW -kVd -xgc -rAH -rAH -uzu -kVd -jrg -jrg -jrg -jrg -jrg -jrg -jrg -jrg -bJj -jrg -bJj -bJj -bJj -osE -osE -bJj -gpz -bJj -bJj -jrg -gpz -gpz -bJj -bJj -bJj -bJj +kOV +kOV +eni +kOV +eni +eni +mMK +ntc +ntc +vYm +ntc +vYm +vYm +xAS +xAS +aFO +aFO +wMh +pcY +pcY +kOV +toD +toD +toD +toD +jmW +wMh +wMh +aFO +aFO +aFO +aFO +aFO +xAS +xAS +xAS +aFO +aFO +aFO +aFO +oRH +xAS +aFO +aFO +wwZ +qnJ +jOi +qnJ +mkC +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +tHd +iMC +kyD +kyD +tHd +tHd +kyD +tHd +kyD +kyD +tHd +kop +bhN +fCs +sax +sax +sax +sax +kAw +kAw +kAw +acl +rBk +vAU +hrk +kAw +nZA +nZA +nZA +puZ +puZ +puZ +puZ puZ puZ puZ @@ -40951,68 +40926,68 @@ kOV wMh wMh wMh -ntJ -pcY -pcY -pcY -pcY -pcY -pcY -pcY -pcY -pcY -gXW -muI -wMh wMh -eKp -mda +oRH wMh -wRL -kVd +xAS +xAS +xAS +aFO +aFO +xAS +xAS +xAS +xAS +xAS +aFO +aFO +aFO +wLM ajy -boW -akf -boW -boW -boW -boW -boW -boW -boW -boW -boW -xgc -xgc -kVd -kVd -uzu -ukp -jrg -jrg -jrg -jrg -jrg -jrg -xgc -ukp -ukp -kVd -kVd -bJj -bJj -bJj -bJj -gpz -dhx -bJj -osE -gpz -gpz -bJj -bJj -bJj -bJj +jOi +ajy +ppS +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +tHd +kop +lip +sax +sax +sax +sax +kAw +kAw +nZA +kAw +aco +kAw +hrk +kAw +nZA +nZA +nZA +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -41114,66 +41089,66 @@ pcY pcY wMh wMh -ntJ -wMh -wMh -pcY -bQX -wMh -cBX -wMh -wMh -hlh wMh +oRH +oRH +xAS wMh -pcY -pcY -pcY -acc -kVd -kVd -boW -boW -boW -boW -boW -boW -boW -boW -boW -fHx -boW -boW -kVd -xgc -rAH -kVd -kVd -uzu -ukp -jrg -jrg -jrg -jrg -jrg -ukp -kVd -xgc -xgc -rAH -kVd -bJj -bJj -bJj -bJj -bJj -bJj -gpz -gpz -bJj -bJj -jrg -bJj +aFO +xAS +oRH +xAS +xAS +aFO +aFO +aFO +aFO +aFO +wLM +ajy +jOi +ajy +ppS +kyD +kyD +kyD +kyD +kyD +kyD +tHd +tHd +kyD +tHd +tHd +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +tHd +ofw +sax +hrk +llZ +kAw +nZA +nZA +nZA +kAw +aco +kAw +kAw +kAw +nZA +kAw +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -41275,67 +41250,67 @@ aby pcY pcY wMh -wMh -wMh -wMh -wMh -wMh -wMh -wMh -hlh -hPp -hPp -hPp -hPp -hPp -hPp -hPp -pcY -pcY -kVd -kVd -dyt -dyt -fHx -boW -boW -boW -boW -boW -boW -dyt -boW -boW -boW -rAH -xgc -kVd -kVd -uzu -ukp -jrg -jrg -ukp -ukp -jrg -uzu -xgc -xgc -xgc -xgc -uzu -rAH -osE -bJj -bJj -bJj -bJj -gpz -gpz -bJj -bJj -bJj -bJj +hBq +vCe +oRH +oRH +xAS +xAS +aFO +aFO +xAS +xAS +oRH +xAS +xAS +aFO +aFO +aFO +wLM +ajy +jOi +ajy +ppS +tHd +tHd +tHd +kop +aQJ +kop +eyx +kop +tHd +kop +kop +tHd +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +grk +hrk +kAw +qgP +kAw +nZA +qgP +kAw +aco +kAw +nZA +kAw +kAw +nZA +puZ +puZ +puZ +puZ +puZ puZ puZ puZ @@ -41400,102 +41375,102 @@ oHE aLv pvU pvU -sfY -rfU -kOV -aCo -jrR -jrR -asu -mMK -eni -lop -eni -eni -eni -ntc -ntc -tJe -asB -ntc -ntc -vYm -ntc -eni -kOV -kOV -kOV -kOV -hUv -arP -arP -ijA -aqE -aqE -asI -abz -pcY -wMh -wMh -jmW -wMh -ntJ -wMh -ntJ -hlh -wMh -jmW -hPp -aMy -mnZ -pwT -mnZ -qKn -hPp -pcY -pcY -ukp -kVd -boW -boW -boW -boW -boW -xgc -boW -boW -boW -dyt -boW -boW -boW -kVd -xgc -rAH -uzu -uzu -uzu -ukp -ukp -uzu -uzu -fkB -xgc -uzu -rAH -rAH -uzu -rAH -kVd -osE -bJj -bJj -bJj -gpz -bJj -bJj -bJj -bJj +sfY +rfU +kOV +aCo +jrR +jrR +asu +mMK +eni +lop +eni +eni +eni +ntc +ntc +tJe +asB +ntc +ntc +vYm +ntc +eni +kOV +kOV +kOV +kOV +hUv +arP +arP +ijA +aqE +aqE +asI +abz +pcY +wMh +wMh +ulI +hBq +mzf +oRH +wMh +xAS +aFO +xAS +xAS +oRH +tlB +oRH +oRH +xAS +aFO +aFO +lCg +ajy +jOi +ajy +lGT +jMf +tHd +kop +jMf +sJo +ofw +etl +fLi +gGT +kop +tHd +xvp +kyD +kyD +kyD +tHd +kyD +kyD +kyD +tHd +oDi +nRD +kAw +vPr +kAw +nZA +nZA +sax +kAw +acp +kAw +nZA +nZA +kAw +nZA +puZ +puZ +puZ puZ puZ puZ @@ -41601,62 +41576,62 @@ ntJ wMh wMh wMh -ntJ -ntJ -ntJ wMh -sFj -hPp -hPp -quO +vzM +wMh +xAS +aFO +aFO +jNr +xAS pwT -hVr +tlB sud ggC -hPp -pcY -ukp -rAH -kVd -boW -boW -boW -boW -boW -boW -xgc -boW -boW -boW -boW -boW -boW -xgc -xgc -kVd -kVd -kVd -uzu -ukp -pLf -rAH -rAH -oHf -rAH -kVd -rAH -kVd -rAH -rAH -bJj -bJj -bJj -gpz -gpz -osE -bJj -bJj -bJj +xAS +aFO +uir +bni +bni +bni +uir +ofw +jMf +tHd +kop +jMf +gGT +kop +rli +kop +kop +tHd +kyD +kyD +kyD +tHd +kyD +tHd +kyD +kyD +kyD +tHd +kjX +kAw +vPr +qgP +vPr +sax +sax +sax +sax +kAw +nZA +nZA +kAw +puZ +puZ +puZ puZ puZ puZ @@ -41767,56 +41742,56 @@ jmW wMh ntJ ntJ -swn -hPp -aKo -qBN -jOi -jOi -jOi -fGb -hPp -xgc -rAH -xgc -kVd -boW -boW -boW -boW -xgc -boW -boW -boW -boW -boW -boW -boW -xgc -xgc -xgc -kVd -kVd -plS -uzu -uzu -rAH -rAH -rAH -fkB -xgc -rAH -kVd -kVd -bJj -bJj -bJj -osE -osE -gpz -osE -bJj -bJj +oRH +oRH +oRH +oRH +oRH +oRH +tlB +tlB +tlB +tHd +kwa +kwa +kyD +kyD +kyD +kyD +kyD +tHd +kyD +kyD +kyD +kyD +kyD +kop +kop +kop +tHd +tHd +jMf +jMf +qLS +ofw +ofw +kop +kyD +kop +hbp +kAw +llZ +nZA +nZA +acl +kAw +kAw +hrk +hrk +nZA +hrk +kAw +kAw puZ puZ puZ @@ -41930,55 +41905,55 @@ wMh jmW ntJ wMh -bni -jOi -txO -jOi -jOi -jOi -jOi -bni -xgc -xgc -boW -xgc -ajy -boW +oRH +oRH +oRH +oRH +oRH +tlB +hBq +tlB +tHd +qrY +kyD +kwa +kyD +kyD akf -boW -boW -xgc -boW -boW -boW -boW -boW -boW -xgc -kVd -kVd -kVd -plS +fDH +kyD +tHd +kyD +kyD +kyD +kop +kop +kop +kop +jMf +jMf +jMf +qLS bRU -uzu -rAH -ukp -uzu -rAH -fkB -uzu -uzu -uzu -ukp -bJj -bJj -bJj -osE -gpz -gpz -gpz -bJj -bJj +ofw +kop +mwE +ofw +kyD +hbp +kAw +kAw +jaT +hrk +aco +kAw +qgP +hrk +nZA +nZA +nZA +kAw +kAw puZ puZ puZ @@ -42092,54 +42067,54 @@ pcY wMh wMh wMh -bni -jOi -jOi -jOi -jOi -jOi -jOi -bni -rAH -rAH -boW -boW -boW -boW -boW -boW -boW -boW -boW -boW -boW -boW -boW -boW -kVd -uzu -kVd -kVd -kVd -uzu -plS -rAH -rAH -rAH -rAH -rAH -ckH -ukp -ukp -jrg -bJj -bJj -jrg -osE -gpz -gpz -osE -bJj +oRH +kAm +hBq +kAm +hBq +hBq +xAS +oRH +kop +qrY +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +jMf +ofw +jMf +jMf +jMf +ofw +qLS +kop +kyD +kop +kyD +mxr +kAw +vPr +vPr +nZA +acp +kAw +sax +hrk +nZA +nZA +hrk +kAw puZ puZ puZ @@ -42251,57 +42226,57 @@ wMh ntJ pcY pcY -kVd -kVd -kVd -hPp -hPp -hPp -hPp -hPp -hPp -hPp -hPp -rAH -xgc -xgc -boW +jMf +jMf +jMf +kAm +oRH +hBq +oRH +hBq +xAS +tlB +oRH +kop +qrY +kyD +kyD dyt dyt -boW -boW -boW -boW -boW -boW -boW -boW -xgc -boW -xgc -xgc -kVd -kVd -kVd -uzu -kVd -uzu +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +tHd +kyD +tHd +tHd +jMf +jMf +jMf +ofw +jMf +ofw bhB -rAH -rAH -ukp -jrg -jrg -jrg -jrg -jrg -bJj -bJj -osE -bJj -bJj -bJj -bJj +kop +kop +gss +sax +sax +sax +sax +sax +kAw +kAw +hrk +kAw +kAw +kAw +kAw puZ puZ puZ @@ -42413,57 +42388,57 @@ jmW pcY pcY pcY -rAH -rAH -rAH -siZ -pFq -fVl -qOP -aMZ -uzu -xgc -siZ -rAH -xgc -xgc -boW -boW +kop +kop +kop +kop +kop +kop +kop +kop +jMf +kop +ofw +kop +kyD +kyD +kyD +kyD fHx -boW -xgc -boW -boW -boW -boW -boW -boW -boW -boW -xgc -xgc -kVd -kVd -xgc -kVd -rAH -kVd -uzu -uzu -ddA -kVd -ukp -jrg -jrg -jrg -jrg -jrg -bJj -osE -bJj -bJj -bJj -bJj +kyD +tHd +kyD +kyD +kyD +kyD +kyD +kyD +kyD +kyD +tHd +tHd +jMf +jMf +tHd +jMf +kop +jMf +ofw +ofw +rgy +jMf +gss +sax +sax +sax +sax +sax +kAw +hrk +kAw +kAw +kAw +kAw puZ puZ puZ @@ -42575,56 +42550,56 @@ wMh pcY pcY pcY -rAH -rAH -rAH -kVd -kVd -kVd -kVd -kVd -kVd -kVd -kVd +kop +kop +kop +kop +kop +jMf +kop +ofw +jMf +jMf +jMf agy -boW -boW -boW -boW -boW -boW -boW -xgc -boW -boW -boW -boW -xgc -boW -boW -rAH -rAH -aaf -rAH -rAH -ddA -xgc -rAH -uzu -msh -uzu -uzu -rAH -ukp -jrg -jrg -jrg -jrg -jrg -osE -gpz -gpz -bJj +kyD +kyD +kyD +kyD +qrY +kyD +kyD +tHd +kyD +kyD +kyD +kyD +tHd +kyD +kop +kop +kop +bnD +kop +kop +rgy +tHd +kop +ofw +oxP +ofw +ofw +kop +mwE +sax +sax +sax +sax +sax +hrk +nZA +nZA +kAw puZ puZ puZ @@ -42737,56 +42712,56 @@ wMh pcY pcY pcY -rAH -rAH -rAH -kVd -uzu -kVd -uzu -kVd -uzu -kVd -rAH -xgc -ajy -boW -xgc -boW -boW -boW -boW -boW -boW -boW -boW -xgc -boW -boW -boW -kVd -kVd -rAH -rAH -kVd -rAH -rAH -xgc -kVd -kVd -kVd -rAH -rAH +kop +kop +kop +jMf +ofw +jMf +ofw +jMf +ofw +jMf +kop +tHd +kyD +kyD +kyD +kyD +qrY +kyD +kyD +kyD +kyD +kyD +kyD +tHd +kyD +kyD +kyD +jMf +jMf +kop +kop +jMf +kop +kop +tHd +jMf +jMf +jMf +kop +kop mhs -jrg -jrg -jrg -jrg -jrg -bJj -bJj -bJj -bJj +sax +sax +sax +sax +sax +kAw +kAw +qgP +kAw puZ puZ puZ @@ -42895,59 +42870,59 @@ kOV ntc kOV kOV -ukp -kVd -kVd -dHr -rAH -msh -uzu -uzu -xgc -rAH -kVd -kVd -rAH -xgc -rAH -xgc -xgc -boW -xgc -boW -xgc -boW -boW -xgc -xgc -xgc -xgc -boW -boW -boW -boW -kVd -kVd -kVd -kVd -ddA -rAH -kVd -kVd -rAH -xgc -xgc -kVd -uzu +mwE +jMf +jMf +mdV +kop +oxP +ofw +ofw +tHd +kop +jMf +jMf +kop +tHd +kop +fDH +tHd +kyD +tHd +kyD +qrY +kyD +kyD +tHd +tHd +tHd +tHd +kyD +kyD +kop +kop +jMf +jMf +jMf +jMf +rgy +kop +jMf +jMf +kop +tHd +tHd +jMf +ofw loe -jrg -jrg -jrg -jrg -jrg -bJj -gpz -bJj +sax +sax +sax +sax +sax +qgP +nZA +kAw puZ puZ puZ @@ -43057,59 +43032,59 @@ kOV kOV ntc kOV -kVd -kVd +jMf +jMf bhB -kVd -rAH -rAH -uzu -xgc -kVd -rAH -xgc -xgc -kVd -rAH -xgc -rAH -xgc -xgc -boW -boW -boW -xgc -uzu +jMf +kop +kop +ofw +tHd +jMf +kop +tHd +tHd +jMf +kop +tHd +kop +tHd +tHd +kyD +kyD +kyD +tHd +ofw gss gss gss gss -xgc -xgc -xgc -kVd -kVd -kVd -kVd -huF -uzu -rAH -uzu -aJR -kVd -rAH -rAH -rAH -rAH -kVd -rAH -jrg -jrg -jrg -jrg -bJj -gpz -bJj +tHd +tHd +tHd +jMf +jMf +jMf +jMf +gBp +ofw +kop +ofw +rEd +jMf +kop +kop +kop +kop +jMf +kop +sax +sax +sax +sax +hrk +nZA +kAw puZ puZ puZ @@ -43219,29 +43194,29 @@ kOV kOV ntc ntc -uzu +ofw vhM -uzu -kVd -kVd -rAH -rAH -kVd -rAH -uzu +ofw +jMf +jMf +kop +kop +jMf +kop +ofw dYp dYp dYp -kVd -kVd -rAH +jMf +jMf +kop fxy -boW -boW -boW +kyD +kyD +kyD fxy -xgc -rAH +tHd +kop gss gss gss @@ -43253,25 +43228,25 @@ tiO tiO gss abZ -kVd -kVd -rAH -rAH -rAH -boS -kVd -rAH -xgc -rAH -rAH -rAH -ukp -jrg -jrg -jrg -cIV -cIV -cIV +jMf +jMf +kop +kop +kop +gpS +jMf +kop +tHd +kop +kop +kop +mwE +sax +sax +sax +nZA +llZ +nZA puZ puZ puZ @@ -43381,16 +43356,16 @@ kOV kOV ntc ntc -kVd -uzu -kVd -kVd -rAH -kVd -xgc -rAH -rAH -uzu +jMf +ofw +jMf +jMf +kop +jMf +tHd +kop +kop +ofw dYp dYp dYp @@ -43431,9 +43406,9 @@ tHd mwE geE geE -mwE -mwE -mwE +kop +kop +plM tYw tYw tYw @@ -43543,15 +43518,15 @@ aEq ntc ntc vYm -xgc -kVd -kVd -xgc -xgc -rAH -xgc -kVd -uzu +tHd +jMf +jMf +tHd +tHd +kop +tHd +jMf +ofw dYp dYp dYp @@ -43705,15 +43680,15 @@ nOd nOd nOd nOd -xgc -xgc -kVd -xgc -kVd -xgc -kVd -uzu -uzu +tHd +tHd +jMf +tHd +jMf +tHd +jMf +ofw +ofw dYp dYp dYp @@ -43867,15 +43842,15 @@ dZb eOG aeN nOd -rAH -rAH -rAH -rAH -xgc -rAH -kVd +kop +kop +kop +kop +tHd +kop +jMf bRU -kVd +jMf dYp dYp dYp @@ -44029,15 +44004,15 @@ uhL uhL eHk nOd -kVd +jMf bhB -xgc -kVd -xgc -rAH -uzu -kVd -uzu +tHd +jMf +tHd +kop +ofw +jMf +ofw dYp dYp dYp @@ -44191,14 +44166,14 @@ uhL uhL eHk nOd -dHr -kVd -kVd -hxY -kVd -rAH -kVd -ddA +mdV +jMf +jMf +sJo +jMf +kop +jMf +rgy dYp dYp pqe @@ -44355,12 +44330,12 @@ nOd nOd nOd nOd -kVd -xgc -xgc -rAH -kVd -kVd +jMf +tHd +tHd +kop +jMf +jMf dYp dYp pqe @@ -44517,12 +44492,12 @@ uhL gIq jny nOd -rAH -xgc -xgc -kVd -uzu -dHr +kop +tHd +tHd +jMf +ofw +mdV dYp dYp pqe @@ -44679,12 +44654,12 @@ bVb goh okz nOd -kVd -xgc -xgc -kVd -huF -xgc +jMf +tHd +tHd +jMf +gBp +tHd dYp dYp pqe @@ -44841,12 +44816,12 @@ uFr tds uhL nOd -rAH +kop wta owr -uzu -plS -xgc +ofw +qLS +tHd dYp dYp pqe @@ -45003,11 +44978,11 @@ glG tds uhL nOd -rAH -aGF -boW -boW -boW +kop +aQJ +kyD +kyD +kyD dYp dYp dYp @@ -45165,11 +45140,11 @@ tWn hyu uhL nOd -rAH -kuS -boW -boW -boW +kop +oiH +kyD +kyD +kyD owr dYp dYp @@ -45327,12 +45302,12 @@ hyu uKN uhL nOd -rAH -xgc +kop +tHd owr -boW +kyD owr -boW +kyD dYp dYp pqe @@ -47649,7 +47624,7 @@ puZ hcJ cUl cUl -xbT +cUl hcJ puZ puZ @@ -50228,17 +50203,17 @@ kyD tHd veu oZq -hrk -kAw -kAw +ijm +cIV +cIV sax sax sax sax -sPM -sPM -sPM -sPM +wiy +wiy +wiy +wiy ako puZ puZ @@ -50389,15 +50364,15 @@ tHd kyD tHd qEQ -sax -kAw -nZA -kAw -sax -bcV -oFl -sax -sax +jrg +bJj +gpz +bJj +jrg +qCW +ijE +jrg +jrg aaZ aaZ aaZ @@ -50523,47 +50498,47 @@ iXm daD dKL aPk -hcH -tnu +rRZ +oQo aSQ -tnu -hcH -aWF -jMf -ofw -jMf -tHd -kop -jMf -gGT -kop -rli -kop -kop -tHd -kyD -kyD -kyD -tHd -kyD -tHd -kyD -kyD -kyD -qEQ -sax -hrk -hrk -kAw -kAw -rBk -vAU -sax -sax -kAw -nZA -nZA -kAw +oQo +rRZ +rWW +kVd +uzu +kVd +xgc +rAH +kVd +iIR +rAH +ork +rAH +rAH +xgc +boW +boW +boW +xgc +boW +xgc +boW +boW +boW +dro +jrg +osE +osE +bJj +bJj +qdh +fmo +jrg +jrg +bJj +gpz +gpz +bJj puZ puZ puZ @@ -50680,53 +50655,53 @@ bIV bFg bIV bIV -cZk +bFg daD cZk cZk bIV -aKr -gKf -lxn -gKf -aFA -kyD -tHd -jMf -tHd -kop -jMf -sJo -ofw -etl -fLi -gGT -kop -tHd -xvp -kyD -kyD -kyD -tHd -kyD -kyD -kyD -tHd -oDi +boW +boW +boW +boW +boW +boW +xgc +kVd +xgc +rAH +kVd +hxY +uzu +hUA +mGk +iIR +rAH +xgc +wPs +boW +boW +boW +xgc +boW +boW +boW +xgc +nxt prO -kAw -hrk -nZA -nZA -nZA -kAw -kAw -acl -kAw -nZA -nZA -kAw -nZA +bJj +osE +gpz +gpz +gpz +bJj +bJj +iIg +bJj +gpz +gpz +bJj +gpz puZ puZ puZ @@ -50845,50 +50820,50 @@ bIV bIV cZk bIV -bIV bFg -aKA -qXS -lxn -qXS -aFC -kyD -kyD -tHd -tHd -tHd -kop -aQJ -kop -eyx -kop -tHd -kop -kop -tHd -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD +cZk +rAH +boW +boW +boW +boW +boW +boW +xgc +xgc +xgc +rAH +aGF +rAH +klF +rAH +xgc +rAH +rAH +xgc +boW +boW +boW +boW +boW +boW +boW +boW +qjY ptm -hrk -kAw -nZA -nZA -nZA -kAw -kAw -aco -kAw -nZA -kAw -kAw -nZA +osE +bJj +gpz +gpz +gpz +bJj +bJj +niA +bJj +gpz +bJj +bJj +gpz puZ puZ puZ @@ -51008,49 +50983,49 @@ bIV bIV bFg bFg -bFg -aKA -qXS -lxn -qXS -aFC -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -tHd -tHd -kyD -tHd -tHd -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -tHd -ofw -sax -hrk -kAw -nZA -nZA -nZA -nZA -kAw -aco -kAw -kAw -kAw -nZA -kAw +cZk +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +xgc +xgc +boW +xgc +xgc +boW +boW +boW +boW +boW +boW +boW +boW +xgc +fkB +jrg +osE +bJj +gpz +gpz +gpz +gpz +bJj +niA +bJj +bJj +bJj +gpz +bJj puZ puZ puZ @@ -51170,50 +51145,50 @@ bIV bIV bIV bIV -bFg -aKA -qXS -lxn -qXS -aFC -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -tHd -kop -gzb -sax -sax -sax -sax -kAw -kAw -nZA -kAw -aco -kAw -hrk -kAw -nZA -nZA -nZA +cZk +xgc +xgc +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +xgc +rAH +ucN +jrg +jrg +jrg +jrg +bJj +bJj +gpz +bJj +niA +bJj +osE +bJj +gpz +gpz +gpz puZ puZ puZ @@ -51333,50 +51308,50 @@ bFg bFg cZk bIV -aKD -iGn -lxn -iGn -aFI -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -kyD -tHd -iMC -kyD -kyD -tHd -tHd -kyD -tHd -kyD -kyD -tHd -kop -bhN -fCs -sax -sax -sax -sax -kAw -kAw -kAw -acp -bcV -tFd -hrk -kAw -nZA -nZA -nZA +rAH +xgc +rAH +rAH +xgc +boW +boW +boW +boW +boW +boW +boW +boW +boW +boW +xgc +kyt +boW +boW +xgc +xgc +boW +xgc +boW +boW +xgc +rAH +fbS +qfR +jrg +jrg +jrg +jrg +bJj +bJj +bJj +srJ +qCW +nyS +osE +bJj +gpz +gpz +gpz puZ puZ puZ @@ -51495,50 +51470,50 @@ bFg aNe bIV aPm -uji -uKZ -jLX -uKZ -uji -aWG -xWy -tHd -rtZ -tHd -tHd -rtZ -kop -kop -xvp -tHd -jMf -xvp -kop -kop -kop -tHd -kyD -kyD -kyD -tHd -kop -bhN -fCs -sax -sax -bcV -oFl -kAw -kAw -kAw -tad -tlr -tuz -tFy -hrk -kAw -nZA -nZA +xgc +rAH +xgc +rAH +rAH +rAH +uzu +xgc +gJF +boW +boW +awP +rAH +xgc +wPs +xgc +kVd +wPs +rAH +rAH +rAH +xgc +boW +boW +boW +xgc +rAH +fbS +qfR +jrg +jrg +qCW +ijE +bJj +bJj +bJj +nvu +mCG +pRM +gQK +osE +bJj +gpz +gpz puZ puZ puZ @@ -51657,51 +51632,51 @@ aME bIV cZk xvA -iMA -rxf -oYH -uMJ -uji -uKZ -uKZ -uKZ -iMA -iMA -iMA -uKZ -uKZ -uKZ -uKZ -uji -ofw -ofw -jMf -tHd -kop -kop -kyD -kyD -kyD -tHd -kop -lip -sax -sax -sax -rBk -vAU -kAw -kAw -kAw -hrk -rBk -vAU -hrk -hrk -kAw -nZA -nZA -nZA +boW +xgc +wfH +rAH +xgc +rAH +wfH +rAH +boW +boW +boW +xgc +xgc +rAH +rAH +rAH +uzu +uzu +kVd +xgc +rAH +rAH +boW +boW +boW +xgc +rAH +sEC +jrg +jrg +jrg +qdh +fmo +bJj +bJj +bJj +osE +qdh +fmo +osE +osE +bJj +gpz +gpz +gpz puZ puZ puZ @@ -51817,53 +51792,53 @@ bFg bIV bIV cZk -uKZ -uKZ -uKZ -fRg -fRg -fRg -fRg -fRg -fRg -oZR -fRg -iXc -fRg -bxL -bxL -gGc -rzR -uji -hzJ -hzJ -hzJ -kyw -kyw -lUL -mLR -mLR -mLR -ocI -kyw -kyw -sax -sax -sax -hrk -kAw -kAw -kAw -kAw -kAw -kAw -hrk -hrk -hrk -hrk -kAw -nZA -nZA +rAH +rAH +rAH +rAH +rAH +boW +rAH +rAH +rAH +xgc +boW +boW +boW +rAH +rAH +rAH +rAH +rAH +rAH +rAH +rAH +rAH +rAH +rAH +boW +boW +xgc +rAH +rAH +oHf +jrg +jrg +jrg +osE +bJj +bJj +bJj +bJj +bJj +bJj +osE +osE +osE +osE +bJj +gpz +gpz puZ puZ puZ @@ -51979,54 +51954,54 @@ bIV aLZ bIV xvA -uKZ -rIj -ohq -pvv -pvv -pvv -tXL -pvv -pvv -pvv -pvv -pvv -pvv -pvv -hZI -pvv -fWq -uji -iOA -aDM -lNg -kLM -uqb -uqb -iQq -iQq -kLM -kLM -kLM -kLM +ukp +ukp +rAH +ukp +rAH +rAH +boW +ukp +kVd +kVd +boW +boW +boW +siZ +dkv +xgc +kVd +kVd +rAH +rAH +kVd +uzu +boW +xgc +uzu +boW +xgc +xgc +xgc +tsK pCe -wSv -kAw -kAw -kAw -kAw -kAw -nZA -nZA -nZA -kAw -hrk -nZA -nZA -nZA -kAw -nZA -nZA +rrj +bJj +bJj +bJj +bJj +bJj +gpz +gpz +gpz +bJj +osE +gpz +gpz +gpz +bJj +gpz +gpz puZ puZ puZ @@ -52141,55 +52116,55 @@ daD bFg xvA xvA -uKZ -rIj -wCn -pvv -pvv -pvv -pvv -pvv -mOY -drM -pvv -aSA -uaa -pvv -pvv -pvv -fRg -hvZ -kLM -iOu -kLM -iOu -kLM -kLM -iQq -kLM -iQq -iQq -kLM -iQq +rAH +rAH +ukp +rAH +rAH +rAH +ckH +lIa +lIa +qjY +qjY +qjY +qjY +tsK +qjY +tsK +lIa +oHf +oHf +oHf +lIa +qjY +tsK +tsK +ckH +tsK +qjY +qjY +tsK +qjY fnw -cwZ -kAw -kAw -kAw -kAw -nZA -hrk -hrk -nZA -nZA -hrk -nZA -nZA -nZA -kAw -kAw -kAw -nDv +wvS +bJj +bJj +bJj +bJj +gpz +osE +osE +gpz +gpz +osE +gpz +gpz +gpz +bJj +bJj +bJj +xuz puZ puZ puZ @@ -52302,57 +52277,57 @@ peb xvA aMj daD -daD -uKZ -oIR -fRg -pvv -pvv -aTh -aVx -aWI -aYd -baX -bcJ -aSA -gIQ -oXM -pvv -pvv -fRg -hvZ -kLM -kLM -iQq -iQq -iQq -iQq -iQq -kLM -kLM -iQq -iQq -iQq -nOw -cwZ -kAw -kAw -nZA -kAw -kAw -hrk -hrk -hrk -kAw -kAw -kAw -hrk -kAw -kAw -kAw -kAw -kAw -puZ +boW +qiy +pWp +pWp +pWp +pLf +pLf +asz +asz +asz +ndb +pCI +gmV +vTc +asz +asz +asz +fNE +fNE +fNE +fNE +asz +kVd +kVd +uzu +xgc +uzu +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +bJj +bJj +osE +gpz +gpz +gpz +gpz +bJj +bJj +bJj +gpz +bJj +bJj puZ puZ puZ @@ -52464,57 +52439,57 @@ peb xvA aLZ xvA -daD -uKZ -uwS -fRg -pvv -pvv -aUw -xyY -aWQ -aVx -aVx -aVx -bqN -aUA -dbH -pti -pvv -fRg -hvZ -kLM -iQq -iQq -iQq -iQq -iQq -kLM -lNg -kLM -iQq -iQq -huz -huz -huz -huz -huz -huz -huz -huz -huz -huz -huz -huz -dWO -hbB -kAw -kAw -kAw -hrk -kAw -nZA -kAw +ukp +oiL +ukp +guH +sQX +pLf +pLf +asz +crF +aXH +tHD +crF +crF +tHD +uEx +crF +fNE +qud +tZA +ctC +ctC +asz +ayz +ayz +kVd +ayz +ayz +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +bJj +bJj +gpz +gpz +gpz +gpz +gpz +gpz +gpz +gpz +bJj +bJj puZ puZ puZ @@ -52622,61 +52597,61 @@ aUd aUd aUd aUd -aUd -xvA -daD +aUd xvA daD -uKZ -xHu -fRg -pvv -aTh -aUx -eHL -aWS -aYf -baY -bdk -aWS -jnc -aWQ -dbH -uyI -fRg -hvZ -iQq -iQq -iQq -iQq -iQq -iQq -kLM -aDM -uqb -iQq -huz -huz -huz -huz -huz -huz -huz -huz -huz -huz -huz -huz -huz -nNX -hbB -kAw -kAw -kAw -hrk -kAw -kAw -vEN +bFg +ukp +qiy +sQX +cXU +cid +pLf +pLf +asz +crF +aXH +bJi +crF +crF +tHD +uEx +crF +fNE +hyx +xFp +xFp +sHL +asz +kAd +kVd +kVd +xgc +kVd +ukp +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +bJj +gpz +bJj +gpz +gpz +gpz +bJj +bJj +bJj +bJj +sax puZ puZ puZ @@ -52786,61 +52761,61 @@ aUd aUd aUd aUd -aMk +aMj peb -daD -uKZ -wUy -fRg -pvv -aTi -aUy -aVL -aWT -aVL -bOh -aVL -aWS -aVL -aVL -dCS -eoH -fRg -hvZ -iQq -iQq -kLM -iQq -iQq -kLM -bcM -aDM -lNg -kLM -huz -huz -dLi -amH -qsN -aMN -faH -hHf -nTu -qsN -iYC -huz -huz -dWO -hbB -kAw -hrk -kAw -kAw -kAw -kAw -kAw -oBV -nZA +ukp +qiy +wvd +nOK +xLy +pLf +pLf +asz +asz +asz +tpL +orO +orO +tJY +asz +asz +asz +gSJ +bJi +bJi +bJi +asz +ltA +dnj +kVd +xgc +kVd +ukp +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +bJj +fXX +bJj +bJj +gpz +bJj +bJj +bJj +gpz +bJj +sax +sax +sax puZ puZ puZ @@ -52949,60 +52924,60 @@ gJo gJo abg aMl -xvA -xvA -uKZ -fRg -fRg -pvv -aTj -cov -aVM -aWS -aYg -bbg -bea -aWS -cbk -aWU -deV -wvx -fRg -hvZ -kLM -iQq -kLM -iQq -iQq -iQq -kLM -snN -kTP -iQq -huz -huz -kLi -amI -aCy -rdS -axJ -axJ -nTu -hAS -sjh -huz -huz -tuA -kAw -hrk -hrk -kAw -kAw -kAw -nZA -kAw -kAw -nZA +rYj +pLf +pLf +pLf +pLf +pLf +pLf +asz +asz +asz +ahu +uEx +bJi +bJi +aXH +rZt +asz +asz +asz +asz +qkL +asz +asz +asz +asz +xgc +xgc +kVd +ukp +bJj +jrg +jrg +jrg +jrg +jrg +jrg +jrg +jrg +amu +amu +amu +bJj +fXX +gpz +bJj +bJj +jrg +jrg +bJj +gpz +osE +sax +sax +sax puZ puZ puZ @@ -53111,60 +53086,60 @@ qbF gJo abg gJo -xvA -xvA -uKZ -fRg -gxK -pvv -pvv -aUw -fof -aWU -aVN -aVN -aVN -bqN -aVN -deV -wTz -pvv -fRg -hvZ -iQq -kLM -iQq -iQq -iQq -iQq -iQq -kLM -iQq -iQq -tpg -exX -qIr -rdS -rdS -axJ -axJ -axJ -bsS -pKf -iYC -huz -huz -oBV -pRU -hrk -hrk -kAw -nZA -nZA -nZA -kAw -kAw -nZA +rYj +asz +asz +asz +asz +asz +asz +asz +ufb +wnK +jaU +uEx +bJi +bJi +aXH +rZt +rZt +rZt +fNE +mWA +rZt +iEF +etV +tNN +fNE +xgc +xgc +boW +xgc +xgc +ukp +ukp +jrg +jrg +jrg +jrg +jrg +jrg +amu +fXX +fXX +osE +osE +bJj +bJj +jrg +jrg +jrg +bJj +bJj +bJj +sax +sax +sax puZ puZ puZ @@ -53222,111 +53197,111 @@ sYu sYu sYu lwo -lwo -lwo -eOM -lwo -eOM -eOM -sYu -sYu -eOM -eOM -lwo -arX -arX -eOM -lwo -lwo -eOM -eOM -arX -eOM -aCH -toA -ver -ver -ver -ver -ver -ver -ver -ver -fEO -oDM -ktd -bFg -bIV -bFg -bFg -bFg -cZk -cZk -xvA -cgR -gJo -qbF -qbF -gJo -qbF -gJo -uKZ -iMA -iMA -uji -uji -uji -uji -fRg -pvv -pvv -aTj -aVN -aWV -aYx -bbh -beK -pvv -pvv -pvv -aSA -pvv -fRg -hvZ -kLM -iQq -iQq -iQq -iQq -kLM -iQq -iQq -iQq -iQq -tpg -akF -alS -ans -axJ -axJ -fbf -fbf -ook -hAS -aDu -huz -huz -huz -huz -huz -kAw -kAw -nZA -nZA -nZA -kAw -kAw -nZA +lwo +lwo +eOM +lwo +eOM +eOM +sYu +sYu +eOM +eOM +lwo +arX +arX +eOM +lwo +lwo +eOM +eOM +arX +eOM +aCH +toA +ver +ver +ver +ver +ver +ver +ver +ver +fEO +oDM +ktd +bFg +bIV +bFg +bFg +bFg +cZk +cZk +xvA +cgR +gJo +qbF +qbF +gJo +qbF +daD +xHv +xHv +xHv +wXs +asz +abn +abF +abF +abF +acg +asz +aUY +vjs +aXw +kaL +wnK +wnK +aXH +rZt +rZt +rZt +fNE +ril +rZt +iEF +far +nVL +fNE +kVd +xgc +boW +xgc +xgc +ukp +uzu +uzu +jrg +jrg +jrg +jrg +jrg +amu +fXX +fXX +osE +osE +gpz +gpz +jrg +jrg +bJj +bJj +osE +osE +sax +sax +sax puZ puZ puZ @@ -53427,69 +53402,69 @@ cZk cZk tBB gJo -gJo -gJo -qbF +bFg +qdH +qdH qbF -gJo -iMA -aJM -aJU -bKV -aLk -bMK -uji -snX -pvv -aSA -pvv -vFR -eVG -pvv -pvv -pvv -aSA -pvv -pvv -pvv -pvv -fRg -hvZ -kLM -iOu -kLM -iOu -kLM -iQq -kLM -iQq -iQq -iQq -tpg -oWk -qIr -ans -ans -aMW -fMq -aut -axJ -rdS -aut -huz -huz -huz -huz -huz -hrk -kAw -hrk -hrk -nZA -kAw -kAw -nZA -nZA +bIV +xHv +xHv +xHv +wXs +asz +abp +abG +abJ +abG +acj +asz +aUX +aWB +gTU +wnK +wnK +wnK +aXH +rZt +rZt +rZt +asz +asz +rZt +rZt +hCY +hCY +fNE +kVd +kVd +boW +xgc +rAH +kVd +boW +boW +uzu +jrg +jrg +jrg +jrg +amu +fXX +fXX +amu +iTQ +bJj +gpz +bJj +jrg +bJj +bJj +gpz +osE +sax +sax +sax +sax puZ puZ puZ @@ -53589,69 +53564,69 @@ xvA xvA tBB gJo -gJo -qbF +bFg +qdH qbF qbF gJo -iMA -aKQ -bKV -bKV -omu -aFr -uji -uji -pvv -kJw -pvv -pvv -pvv -pvv -pvv -sYh -pvv -pvv -pvv -pvv -eGs -fRg -uji -jac -jQt -khx -khx -ltJ -kLM -iQq -iQq -iQq -iQq -tpg -oWk -qIr -anG -axJ -axJ -ggh -rdS -owe -axJ -rdS -axJ -axJ -axJ -huz -huz +xHv +xHv +xHv +wXs +asz +abp +abJ +abJ +abJ +aSK +aTR +rMI +oZs +azm +bJi +rZt +wnK +aXH +rZt +rZt +rZt +hAX +crF +rZt +rZt +rZt +rZt +fNE +kVd +kVd +xgc +boW +xgc +qMT +jOv +hEB +uzu +uzu +jrg +jrg +jrg +amu +fXX +fXX +amu +osE +osE +gpz +bJj +jrg +bJj +bJj +gpz +osE +sax +sax +sax sax -kAw -kAw -nZA -nZA -kAw -kAw -kAw -hrk puZ puZ puZ @@ -53749,71 +53724,71 @@ bIV cZk cZk cZk -uji -uji -uji -uji -uji -uji -uji -uji -aLk -bKV -bKV -aNg -bKV -aOb -uji -snX -fRg -pgh -fRg -fRg -dLk -fRg -pgh -fRg -fRg -fRg -rIj -uKZ -giH -uji -iMA -iMA -iMA -uKZ -ehV -uqb -kLM -iQq -iQq -kLM -ajd -huz -fjS -anJ -aGf -aNE -ggr -hLE -qvY -qkQ -axJ -axJ -axJ -axJ -huz -huz +sFs +xHv +sFs +xHv +xHv +xHv +xHv +xHv +xHv +uLi +wXs +asz +aNR +abJ +abG +abJ +abJ +rZt +kxx +oZs +bJi +bJi +ahZ +eRG +aXH +rZt +rZt +rZt +dwQ +crF +rZt +rZt +rZt +fhd +fNE +kVd +kVd +rAH +xgc +boW +boW +boW +boW +uzu +uzu +ukp +jrg +jrg +amu +eom +fXX +amu +osE +osE +bJj +bJj +bJj +bJj +bJj +bJj +amu +sax +sax +sax sax -iZj -kAw -kAw -hrk -kAw -nZA -kAw -hrk puZ puZ puZ @@ -53911,70 +53886,70 @@ cZk cZk cZk cZk -uji -uji -uji -uji -uji -uji -uji -uji -uji -aKL -uji -aNh -aLs -uji -uji -iMA -iMA -uKZ -oYH -gxK -fRg -oYH -uKZ -iMA -iMA -uji -uKZ -uKZ -bKV -kjU -bKV -krm -iXx -iMA -ehV -uqb -kLM -iQq -nAs -uqb -ajE -huz -qSW -arZ -aIh -aPf -gtx -aTO -oww -qmv -axJ -axJ -axJ -axJ -huz -huz +tjL +xHv +xHv +gik +gik +gik +dbv +kaC +xHv +xHv +wXs +asz +aNP +abJ +abG +abJ +abJ +rZt +kxx +oZs +bJi +bJi +bJi +wnK +bQx +asz +asz +qkL +asz +asz +rZt +rZt +iEF +cYC +fNE +kVd +kVd +rAH +xgc +boW +boW +boW +lLf +uzu +uzu +ukp +jrg +jrg +amu +fXX +fXX +amu +jrg +bJj +gpz +bJj +bJj +bJj +osE +bJj +amu +sax sax sax -kAw -kAw -hrk -kAw -nZA -kAw puZ puZ puZ @@ -54073,72 +54048,72 @@ bIV bFg cZk bIV -uji -gUc -xgH -xgH -xgH -gQJ -uji -uji -fRg -fRg -aKS -fRg -fRg -fRg -lro -bKV -bKV -oYH -bKV -meg -bKV -bbi -beP -bKV -meg -bKV -bKV -eGG -bKV -bKV -ftr -obb -vHX -iMA -ehV -kLM -iQq -iQq -kLM -uqb -uqb -huz -huz -auh -bWB -qvY -gZZ -iof -aDu -qoY -axJ -axJ -wFm -sYx -huz -huz -sax -sax -nZA -kAw -nZA -nZA -nZA -kAw -puZ -puZ +xHv +sFs +xHv +xHv +gik +xHv +tmP +kaC +xHv +goe +wXs +asz +abp +abJ +abJ +abJ +abJ +rZt +rMI +acY +rZt +bJi +rZt +wnK +aXH +rkc +wnK +wnK +asz +asz +dTj +rZt +rZt +tYA +fNE +kVd +kuS +kVd +rAH +rAH +kch +boW +mKD +uzu +ukp +jrg +jrg +amu +amu +fXX +fXX +amu +jrg +osE +bJj +gpz +gpz +gpz +osE +bJj +iTQ +iTQ +amu +amu +amu +amu puZ puZ "} @@ -54235,72 +54210,72 @@ bIV fUZ bIV bIV -uji -ahX -qkC -tzo -qkC -mhS -dtr -fRg -bKV -bKV -bKV -bKV -bKV -bKV -bKV -bKV -bKV -fRg -bKV -bKV -bKV -bKV -fRg -bKV -bKV -bKV -bKV -uKZ -uKZ -iMA -iMA -iMA -uKZ -uKZ -ehV -kLM -iQq -iQq -iQq -kLM -kLM -uqb -ncS -bWB -auh -aTO -hkS -itR -oNz -qOE -rdS -axJ -sYx -wFm -huz -huz -sax -sax -kAw -kAw -nZA -hrk -nZA -kAw -puZ -puZ +xHv +xHv +xHv +xHv +xHv +goe +kaC +kaC +kaC +xHv +wXs +asz +abp +abG +abJ +abG +ach +asz +aWC +aWs +qkR +eRG +sbd +wnK +aXH +rkc +wnK +rZt +fir +rqK +asz +rZt +rZt +asz +asz +kVd +kVd +kVd +rAH +rAH +xgc +boW +vkr +nij +ukp +jrg +jrg +amu +cur +fXX +fXX +amu +amu +iTQ +bJj +fXX +gpz +gpz +bJj +fXX +cuJ +fXX +bJj +fXX +fXX +amu puZ puZ "} @@ -54397,72 +54372,72 @@ bIV bFg bFg bFg -uji -aGc -tzo -tzo -aJj -aJk -fRg -fRg -bKV -bKV -aMK -aNl -aNl -aPn -bKV -bKV -bKV -fRg -bKV -bKV -bKV -bKV -uHA -bKV -bKV -rfd -bKV -iMA -hFJ -fRg -dZN -fRg -iMA -kGO -lyE -kLM -iQq -kLM -iQq -iQq -kLM -uqb -ncS -mRc -rdS -aXk -axJ -jFq -huz -qPh -rdS -axJ -axJ -sXt -huz -huz -sax -sax -kAw -kAw -nZA -nZA -nZA -kAw -puZ -puZ +xHv +xHv +uLi +xHv +qEH +kaC +kaC +kaC +xHv +xHv +wXs +asz +abx +abM +abM +abM +ack +asz +aUU +aXh +mYX +bVr +aXh +aXh +bJf +rkc +wnK +rZt +hMY +asz +asz +crF +crF +asz +asz +uzu +kVd +kVd +kVd +kVd +xgc +boW +boW +kVd +ukp +jrg +jrg +amu +lAb +fXX +fXX +fXX +fXX +fXX +fXX +bJj +bJj +gpz +osE +bJj +mwJ +bJj +fXX +fXX +fXX +amu puZ puZ "} @@ -54520,111 +54495,111 @@ lwo lwo lwo lwo -eTV -lwo -eTV -lwo -lwo -eOM -eOM -lwo -eOM -qep -arX -arX -arX -amQ -arX -eOM -arX -arX -ktd -axK -ver -ver -ver -htb -ver -ver -ver -ver -bYd -ktd -ktd -gJo -bIV -bIV -bFg -bFg -bFg -bFg -bFg -bIV -aGb -tzo -qkC -tzo -aGd -fRg -fRg -bKV -bKV -pzj -pzi -kGz -bKV -bKV -bKV -bKV -oYH -bKV -bKV -bKV -bKV -oYH -bKV -bKV -bKV -bKV -iMA -sFR -pvv -pvv -oCG -kjM -tpg -iQq -iQq -iQq -szU -kLM -iQq -iQq -uqb -ncS -pTp -pTp -rdS -axJ -alO -huz -qWL -aut -axJ -kLi -kLi -huz -huz -sax -sax -kAw -kAw -nZA -nZA -kAw -kAw -puZ -puZ +eTV +lwo +eTV +lwo +lwo +eOM +eOM +lwo +eOM +qep +arX +arX +arX +amQ +arX +eOM +arX +arX +ktd +axK +ver +ver +ver +htb +ver +ver +ver +ver +bYd +ktd +ktd +gJo +bIV +bIV +bFg +bFg +bFg +bFg +bFg +bIV +xHv +sFs +xHv +xHv +goe +kaC +xHv +gik +xHv +wXs +asz +asz +asz +asz +asz +asz +asz +rZt +rZt +rZt +gGf +bDx +asz +kXt +asz +wnK +rZt +asz +asz +kPX +rZt +rZt +asz +asz +pLf +hkZ +rAH +ccT +xgc +xgc +rAH +xgc +xgc +jrg +jrg +jrg +amu +igJ +fXX +fXX +fXX +fXX +fXX +osE +gpz +bJj +fXX +bJj +iTQ +amu +amu +amu +fXX +fXX +amu puZ puZ "} @@ -54722,71 +54697,71 @@ bFg bFg bFg bFg -aGd -tzo -qkC -tzo -aGd -fRg -fRg -bKV -bKV -bKV -bKV -bKV -bKV -bKV -ohE -bKV -uKZ -ahe -fRg -fRg -oYH -uKZ -bwk -cex -cex -cex -uKZ -xHu -pvv -pvv -oCG -wRm -tpg -iQq -iQq -iQq -kLM -aDM -kLM -iQq -huz -huz -avz -avz -axJ -axJ -alO -pJM -rgI -rdS -axJ -kLi -alP -huz -huz -sax -sax -kAw -kAw -nZA -kAw -kAw -kAw -puZ -puZ +xHv +xHv +xHv +sFs +xHv +xHv +xHv +gik +gik +wXs +asz +aNN +afN +afP +fNE +rZt +rZt +rZt +rZt +gGf +rZt +rZt +qVo +wnK +wnK +wnK +rZt +asz +asz +hLB +rZt +rZt +asz +asz +shi +kVd +qEK +pGt +xgc +xgc +rAH +xgc +xgc +npY +rKq +jrg +amu +iTQ +amu +amu +amu +amu +amu +osE +gpz +osE +osE +bJj +gpz +amu +amu +amu +fXX +fXX +amu puZ puZ "} @@ -54884,71 +54859,71 @@ bFg bFg bFg bIV -aGd -aHd -aIG -tzo -aGd -fRg -fRg -bKV -bKV -aMK -aNl -aNl -aPn -bKV -bKV -tsU -uKZ -ocB -bKV -bKV -bKV -hDW -bzh -fRg -fRg -fRg -qXk -fRg -pvv -khz -fRg -iMA -kIo -lCe -kLM -iQq -iQq -kLM -iQq -iQq -huz -aQq -axJ -axJ -axJ -axJ -jJZ -oXU -axJ -dQq -axJ -axJ -rdS -huz -huz -sax -sax -kAw -kAw -kAw -kAw -kAw -bcV -oFl -puZ +xHv +xHv +xHv +uLi +xHv +xHv +xHv +gik +xHv +wXs +bXo +kxx +bIh +afQ +fNE +rZt +rZt +rZt +rZt +rZt +rZt +rZt +rkc +wnK +rZt +rZt +rZt +asz +asz +hMY +rZt +rZt +asz +asz +pLf +gZi +kVd +kVd +kVd +kVd +rAH +kVd +xgc +xXQ +boW +jrg +xgc +ukp +ukp +ukp +pLf +jrg +amu +osE +gpz +osE +osE +bJj +gpz +amu +amu +amu +fXX +fXX +amu puZ puZ "} @@ -55046,71 +55021,71 @@ bFg bFg bIV kaC -aGe -qkC -tzo -qkC -tGv -dtr -fRg -bKV -bKV -bKV -bKV -bKV -bKV -bKV -bKV -bKV -iMA -vHX -bKV -bKV -bKV -bsC -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -fRg -uKZ -uKZ -vqV -kLM -kLM -iQq -iQq -iQq -kLM -huz -pJM -ayZ -rdS -bqO -axJ -bqO -axJ -axJ -axJ -axJ -axJ -axJ -huz -huz -sax -sax -nZA -nZA -nZA -kAw -kAw -rBk -vAU -puZ +xHv +xHv +xHv +sFs +xHv +xHv +uLi +xHv +goe +wXs +lSU +aNL +nmi +afP +asz +asz +aTQ +asz +asz +wnK +dTU +wnK +asz +asz +qkL +fNE +fNE +asz +asz +asz +crF +crF +asz +asz +pLf +kVd +rAH +ccT +uzu +kVd +kVd +kVd +xgc +bkK +xgc +rAH +ukp +kVd +uzu +ukp +ukp +jrg +amu +osE +gpz +gpz +fXX +bJj +gpz +gpz +amu +amu +fXX +fXX +amu puZ puZ "} @@ -55204,75 +55179,75 @@ oQl oQl oQl gJo -bFg -bFg -cZk -kaC -rXn -dsx -dsx -dsx -waS -uji -uji -fRg -fRg -fRg -fRg -fRg -fRg -fRg -bKV -bKV -iMA -vHX -aWX -bKV -bKV -bsC -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -fRg -xQa -iMA -avx -uqb -kLM -iQq -iQq -kLM -tpg -exX -alW -arW -anJ -dQq -hmo -rdS -axJ -dQq -axJ -axJ -axJ -axJ -huz -huz -sax -sax -nZA -nZA -kAw -kAw -kAw -puZ -puZ -puZ +bFg +bFg +cZk +kaC +xHv +xHv +xHv +xHv +xHv +goe +xHv +xHv +xHv +wXs +lSU +lSU +afF +sBW +xDq +aSI +afF +aUT +asz +rMI +rMI +rMI +asz +emq +wnK +dTU +wnK +dTU +hfm +asz +rZt +rZq +asz +asz +pIV +jKm +dbO +pGt +kVd +kVd +huF +rAH +rAH +bkK +boW +ukp +ukp +kVd +ukp +ukp +ukp +bJj +iTQ +osE +gpz +gpz +bJj +amu +gpz +gpz +amu +amu +fXX +fXX +amu puZ puZ "} @@ -55375,66 +55350,66 @@ kaC kaC kaC kaC -uji -uji -fRg -aMs -vIk -lJh -loH -ppI -aMs -bKV -bKV -uKZ -nUa -bKV -bKV -bKV -iDW -bAX -fRg -fRg -fRg -fRg -pgh -fRg -ohq -mKB -cLq -iMA -avx -voo -kLM -iQq -iQq -kLM -tpg -exX -qIr -azS -qny -aDu -aut -kfW -axJ -axJ -axJ -axJ -axJ -rdS -huz -huz -sax -sax -nZA -nZA -kAw -kAw -kAw -puZ -puZ -puZ +xHv +xHv +xHv +xHv +wXs +lSU +lSU +tSI +rZt +gLv +rZt +gLv +afF +wBf +wnK +dTU +wnK +asz +kbZ +chU +gTv +sHf +tRq +chU +ogu +rZt +rZt +asz +asz +pLf +pLf +uzu +kVd +uzu +uzu +uzu +boW +eXQ +eWl +boW +ukp +ukp +xgc +ukp +ukp +ukp +bJj +bJj +osE +bJj +bJj +bJj +amu +gpz +gpz +amu +amu +fXX +fXX +pLS puZ puZ "} @@ -55532,71 +55507,71 @@ mIL fQX fQX fQX -kaC -kaC -kaC -kaC -kaC -uji -uji -uji -uji -uKZ -uKZ -uji -uji -uji -qLA -uji -uKZ -aVT -fRg -fRg -oYH -uKZ -bFS -ail -ail -ail -uKZ -uji -uji -iMA -iMA -iMA -uKZ -ehV -aDM -kTP -iQq -iQq -kLM -uqb -huz -cio -ieD -aKR -aDu -huz -axJ -rdS -rti -ieD -axJ -axJ -hIu -huz -huz -sax -sax -nZA -nZA -kAw -kAw -kAw -puZ -puZ -puZ +oQl +oQl +oQl +oQl +oQl +mIL +mIL +gaz +mIL +bme +lSU +lSU +aOv +afF +rZt +rZt +gLv +afF +wBf +wnK +dTU +pkK +asz +emq +chU +kbZ +chU +gTv +chU +fNE +uvU +rZt +asz +asz +pLf +pLf +pLf +ukp +ukp +kVd +uzu +kVd +nEQ +ukp +xgc +ukp +xgc +kVd +ukp +ukp +ukp +bJj +bJj +bJj +qMc +bJj +rbq +osE +gpz +gpz +amu +amu +fXX +fXX +lAb puZ puZ "} @@ -55702,63 +55677,63 @@ oQl oQl oQl oQl -uKZ -hsw -aNp -bfR -oYH -oYH -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -gqe -uji -jkM -bHC -xwo -bHC -lCp -idG -kLM -iQq -iQq -kLM -kLM -huz -huz -huz -huz -huz -huz -mpt -axJ -rxd -sFv -axJ -rdS -hRC -huz -huz -sax -qCr -kAw -nZA -kAw -kAw -puZ -puZ -puZ -puZ +ood +bme +lSU +lSU +lSU +aSI +aRs +uRt +flN +sBW +rZt +nOB +rMI +rMI +asz +tRq +wdy +dTU +bZZ +dTU +twc +fNE +rZt +uvU +asz +asz +pLf +pLf +pLf +pLf +pLf +pLf +pLf +pLf +npY +nij +rAH +ukp +ukp +pLf +pLf +ukp +xgc +bJj +bJj +bJj +bJj +bJj +fXX +osE +gpz +amu +amu +amu +fXX +igJ +fXX puZ puZ "} @@ -55812,115 +55787,115 @@ hkC arX arX arX -bjv -bjv -ecj -ecj -ecj -ecj -ecj -ecj -aaN -agM -arX -aDI -eOM -eOM -pCH -lwo -lwo -eOM -lwo -eOM -arX -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -oQl -mIL -fQX -fQX -fQX -fQX -cKL -oQl -oQl -oQl -oQl -oQl -uKZ -xSk -aNq -oYH -fRg -oYH -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -fRg -hGj -iQq -iOu -kLM -iOu -kLM -kLM -iQq -kLM -iQq -iQq -iQq -iQq -pKK -iQq -iOu -kLM -huz -rdS -axJ -amH -tbR -axJ -rdS -ixC -huz -huz -sax -hrk -kAw -kAw -kAw -kAw -puZ -puZ -puZ -puZ +bjv +bjv +ecj +ecj +ecj +ecj +ecj +ecj +aaN +agM +arX +aDI +eOM +eOM +pCH +lwo +lwo +eOM +lwo +eOM +arX +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +oQl +mIL +fQX +fQX +fQX +fQX +cKL +oQl +oQl +oQl +oQl +oQl +mIL +bme +lSU +lSU +lSU +lSU +lSU +wBf +kEs +fgB +kEs +flN +asz +asz +asz +asz +asz +asz +tDg +iWX +wZh +asz +rMI +kdy +asz +asz +asz +asz +asz +asz +asz +asz +asz +pLf +uzu +ukp +xgc +ukp +ukp +ukp +pLf +ukp +bJj +fXX +fXX +bJj +gpz +bJj +bJj +fXX +vOb +cuJ +fXX +bJj +fXX +fXX +pLS puZ puZ "} @@ -56026,63 +56001,63 @@ oQl oQl oQl oQl -uKZ -cHB -xSk -afd -fRg -oYH -aSA -gIQ -aTh -aVx -aWI -aYd -baX -bcJ -pvv -pvv -pvv -pvv -pvv -fRg -hGj -iQq -iQq -iQq -iQq -iQq -iQq -kLM -aDM -kLM -iQq -iQq -iQq -iQq -iQq -iQq -iQq -huz -aut -rdS -aCy -tdc -axJ -axJ -tZW -huz -huz -sax -hrk -kAw -nZA -kAw -kAw -puZ -puZ -puZ -puZ +mIL +bme +lSU +twi +flN +flN +flN +kEs +kEs +flN +eit +vTc +asz +coj +coj +asz +dtE +goj +goj +goj +goj +goj +goj +aiD +goj +asz +agz +asz +asz +asz +asz +asz +asz +pLf +ukp +uzu +fBA +xgc +ukp +ukp +ukp +xgc +bJj +gpz +gpz +bJj +bJj +gpz +rbq +fXX +rbq +mwJ +fXX +fXX +fXX +fXX +pLS puZ puZ "} @@ -56188,63 +56163,63 @@ oQl oQl oQl oQl -uji -uKZ -uKZ -uji -dtr -oYH -pvv -fhv -aUA -aVB -aWQ -aVx -aVx -aVx -bqN -aVx -dbH -dKR -pvv -fRg -hGj -kLM -iQq -iQq -iQq -iQq -iQq -kLM -kLM -uqb -kLM -iQq -iQq -iQq -iQq -iQq -tpg -exX -qIr -aut -rdS -rdS -axJ -axJ -rdS -huz -huz -sax -hrk -kAw -nZA -kAw -kAw -puZ -puZ -puZ -puZ +mIL +mIL +uIE +flN +flN +flN +flN +flN +eit +kEs +kEs +flN +rMI +dTU +dTU +rMI +goj +chU +goj +chU +chU +chU +goj +chU +aiD +asz +twt +agY +aha +arK +arU +asz +asz +pLf +pLf +ukp +uzu +ukp +ukp +xgc +ukp +bJj +fXX +gpz +gpz +vlD +bJj +bJj +bJj +osE +bJj +amu +amu +amu +amu +amu +amu puZ puZ "} @@ -56351,58 +56326,58 @@ oQl oQl oQl mIL -mIL -mIL -uKZ -fRg -oYH -pvv -aTh -aUx -aVU -aWS -aYf -baY -bdk -aWS -bYO -aWQ -dbH -eVG -fRg -hGj -uqb -kLM -kLM -iQq -iQq -ipc -iQq -kLM -iQq -iQq -iQq -iQq -iQq -iQq -iQq -tpg -exX -qIr -rdS -axJ -axJ -axJ -axJ -axJ -huz -huz +fQX +gaz +uIE +flN +flN +gCL +flN +kEs +flN +flN +vTc +rMI +dTU +dTU +rMI +goj +wnK +goj +wnK +wnK +wnK +goj +wnK +goj +fNE +aud +rZt +rZt +rZt +nBh +ajg +asz +qfZ +jrg +jrg +jrg +ukp +ukp +ukp +bJj +bJj +bJj +gpz +bJj +bJj +bJj +bJj +fXX +osE +fXX +amu sax -hrk -nZA -nZA -kAw -kAw puZ puZ puZ @@ -56514,59 +56489,59 @@ oQl mIL mIL ood -ood -uKZ -aQg -oYH -pvv -aTi -aUy -aVL -vVq -aVL -aVL -aVL -aWS -clp -aVU -aUA -gIQ -fRg -hGj -uqb -uqb -uqb -kLM -iQq -ipc -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -eSN -akF -alS -aMW -wHx -dQq -axJ -axJ -huz -huz -huz -hrk -nZA -nZA -nZA -kAw -kAw -bcV -oFl +mIL +lqu +flN +eit +flN +kEs +kEs +fgB +kEs +kOi +lSU +coj +coj +lSU +dtE +rZt +rZt +rZt +rZt +mgT +rZt +uvU +goj +fNE +aud +miD +ptr +ptr +rZt +aCB +aeU +fXX +bJj +bJj +bJj +bJj +bJj +bJj +bJj +bJj +gpz +bJj +bJj +bJj +jrg +amu +gpz +bJj +osE +amu +sax +sax +sax puZ puZ puZ @@ -56668,67 +56643,67 @@ mIL mIL mPu fQX -fQX -fQX +jAL +jAL fQX mIL mIL mIL mIL ood -ood -uKZ -aQg -oYH -pvv -aTj -aUz -aVL -aWS -aYg -bbg -bea -aWS -cbk -aWU -deV -fhv -fRg -hGj -kLM -kLM -iQq -iQq -kLM -vdk -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -tpg -exX -qIr -axJ -axJ -axJ -dQq -axJ -huz -huz -huz -hrk -kAw -kAw -kAw -kAw -kAw -rBk -vAU +pqj +vwn +uIE +flN +kEs +flN +flN +kEs +flN +kOi +lSU +lSU +lSU +lSU +bxW +wnK +goj +aNf +rZt +nBs +goj +txU +goj +fNE +aud +ptr +miD +miD +rZt +ava +asz +qfZ +dVw +gpz +gpz +bJj +bJj +jrg +bJj +bJj +gpz +bJj +bJj +jrg +jrg +amu +rbq +rbq +rbq +amu +sax +sax +sax puZ puZ puZ @@ -56831,64 +56806,64 @@ mIL mIL fQX fQX -fQX -fQX -mIL +jAL +jAL mIL +vJu mIL ood +fQX +jAL mIL -mIL -uKZ -fRg -oYH -pvv -pvv -aUw -aVB -aWU -aVN -aVN -aVN -bqN -aVN -deV -pvv -pvv -gxK -hGj -iQq -iQq -iQq -kLM -iQq -iQq -iQq -iQq -iQq -iQq -iQq -kLM -kLM -iQq -iQq -iQq -huz -axJ -axJ -rBC -rdS -axJ -axJ -tkm -ncS -hrk -hrk -kAw -kAw -kAw -kAw -kAw +lSU +uIE +flN +kEs +agw +agw +kEs +wXh +lSU +cvn +lSU +wOO +goj +chU +goj +lfk +rZt +uII +aiD +chU +goj +fNE +aud +rZt +rZt +mRU +ptr +aue +asz +jrg +bJj +gpz +gpz +bJj +jrg +jrg +jrg +gpz +gpz +gpz +bJj +osE +jrg +iTQ +rbq +rbq +rbq +amu +sax puZ puZ puZ @@ -56996,61 +56971,61 @@ fQX fQX mIL mIL -mIL +vJu mIL mIL oQl -oQl -uji -fRg -oYH -pvv -pvv -aTj -aVN -aWV -aYx -bbh -beK -pvv -pvv -pvv -pvv -pvv -fRg -hGj -kLM -iQq -kLM -uqb -kLM -iQq -iQq -iQq -iQq -iQq -kLM -iQq -iQq -kLM -kLM -kLM -huz -krU -axJ -axJ -trX -uLT -wTT -fXB -ncS -hrk -hrk -nZA -kAw -kAw -kAw -kAw +mIL +mIL +lSU +ehO +jis +lSU +acU +acU +lSU +lSU +lSU +fgH +lSU +bYk +goj +chU +dsY +uKo +rZt +wjK +goj +vTj +goj +asz +agm +rZt +rZt +ard +asz +asz +asz +jrg +bJj +bJj +bJj +jrg +jrg +jrg +bJj +gpz +bJj +gpz +bJj +osE +jrg +amu +fXX +fXX +bJj +amu +sax puZ puZ puZ @@ -57153,66 +57128,66 @@ fQX fQX fQX fQX +jAL fQX -fQX -fQX -mIL +jAL mIL +jAL ood ood oQl oQl +ood oQl -uji -dtr -oYH -pvv -aTn -pvv -pvv -pvv -pvv -pvv -bfi -pvv -pvv -pvv -pvv -pvv -fRg -hGj -kLM -iOu -uqb -kJQ -uqb -iQq -iQq -iQq -iQq -kLM -iQq -kLM -uqb -kLM -que -aDM -huz -kys -pef -rdS -axJ -axJ -xvQ -fXB -ncS -kAw -nZA -kAw -kAw -nZA -kAw -hrk +oQl +lSU +dwQ +lSU +lSU +lSU +lSU +lSU +lSU +dwQ +lSU +qRo +goj +wnK +goj +kMJ +rZt +neS +goj +wnK +oag +asz +agl +rZt +rZt +apk +asz +jrg +jrg +jrg +osE +bJj +bJj +jrg +jrg +bJj +bJj +gpz +gpz +bJj +bJj +bJj +gpz +bJj +fXX +bJj +fXX +amu +sax puZ puZ puZ @@ -57324,57 +57299,57 @@ ood mIL oQl oQl +mIL oQl -uji -oYH -ahe -pvv -ugD -pvv -pvv -aWY -pvv -pvv -pvv -pvv -pvv -pvv -pvv -pvv -fRg -uji -aDM -uqb -uqb -uqb -kLM -kLM -iQq -iQq -iQq -iQq -kLM -kLM -sqb -lNg -aDM -aDM -huz -huz -huz -huz -tRN -rdS -xvQ -huz -huz -kAw -kAw -kAw -kAw -nZA -kAw -hrk +oQl +lSU +dwQ +eBG +dwQ +dwQ +elw +rRP +lSU +cvn +lSU +exm +goj +rWS +fVI +rZt +rZt +rZt +goj +chU +goj +aeU +rZt +rZt +rZt +aCB +asz +jrg +jrg +jrg +osE +bJj +bJj +bJj +jrg +bJj +bJj +bJj +bJj +bJj +bJj +bJj +gpz +bJj +bJj +fXX +fXX +iTQ +sax puZ puZ puZ @@ -57475,69 +57450,69 @@ iMb iMb iMb fQX +jAL fQX fQX fQX +jAL +mIL fQX fQX -mIL -mIL -mIL gaz oQl oQl oQl -uji -uKZ -uKZ -uji -uji -uji -uKZ -fRg -fRg -fRg -bfy -fRg -uKZ -uji -dMo -ano -dMo -uji -hzJ -kLM -lNE -uqb -iOu -kLM -iQq -iQq -iQq -iQq -kLM -kLM -uqb -uqb -uqb -hzJ -huz -huz -huz -huz -ncS -ncS -ncS -huz -huz -hrk -kAw -kAw -kAw -kAw -kAw -hrk -hrk +oQl +oQl +lSU +dwQ +dwQ +dwQ +oaO +dwQ +rEW +lSU +lSU +lSU +lSU +bxW +chU +goj +rZt +rZt +rZt +goj +chU +oag +asz +aud +rZt +rZt +tiw +asz +jrg +jrg +jrg +bJj +osE +bJj +bJj +jrg +bJj +osE +bJj +gpz +gpz +gpz +bJj +bJj +gpz +gpz +fXX +jrg +iTQ +sax +sax puZ puZ puZ @@ -57639,67 +57614,67 @@ iMb kri fQX fQX -fQX -fQX -fQX -fQX mIL mIL +jAL +mIL +jAL +mIL mIL oQl oQl oQl oQl -cKL -fQX -oQl -oQl oQl -uKZ -iMA -aYy -bbj -aYy -iMA -uKZ -uji -uji -uji -uji -uji -hzJ -qhm -qhm -kXs -mcH -mcH -mcH -mcH -nEH -mcH -mcH -mcH -pNo -qhm -qhm -hzJ -hzJ -hzJ -hzJ -hzJ -kAw -kAw -kAw -hrk -hrk -kAw -nZA -nZA -kAw -kAw -kAw -kAw -hrk +lSU +lSU +lSU +lSU +dwQ +oaO +dwQ +dwQ +dwQ +bXo +rZt +goj +vuj +goj +eaz +rZt +nwd +goj +wnK +goj +fNE +aud +rZt +rZt +ahT +asz +jrg +jrg +jrg +jrg +bJj +bJj +bJj +bJj +bJj +bJj +bJj +gpz +gpz +bJj +osE +bJj +gpz +gpz +bJj +jrg +jrg +sax +sax puZ puZ puZ @@ -57800,67 +57775,67 @@ fIT fQX iMb fQX -mIL -mIL -fQX -fQX -fQX +wMh +cQY +kSO +qBM +wMh mIL mIL ood oQl oQl +vJu oQl oQl -fQX -cKL -jAL oQl oQl oQl -jAL -aYF -bbt -jAL -bGk -fQX -snZ -hzJ -hzJ -hzJ -hzJ -kLM -kLM -knI -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -kLM -uqb -uqb -uqb -qEB -hzJ -hzJ -hzJ -hzJ -kAw -hrk -kAw -kAw -kAw -kAw -kAw -nZA -kAw -kAw -kAw -kAw +lSU +elw +dwQ +dwQ +dwQ +dwQ +lSU +lQm +goj +chU +goj +dqH +rZt +sCl +onM +chU +goj +fNE +afX +rZt +rZt +ahS +asz +jrg +jrg +jrg +jrg +bJj +bJj +bJj +osE +bJj +bJj +gpz +bJj +bJj +jrg +osE +bJj +bJj +gpz +bJj +jrg +jrg +sax puZ puZ puZ @@ -57961,68 +57936,68 @@ tPz fIT fQX iMb -mIL -mIL -mIL -fQX -fQX -fQX -fQX +wMh +wMh +cQY +rJI +gso +pcY +gaz mIL gaz oQl oQl +vJu oQl oQl -cKL -jAL -jAL +acb oQl oQl -jAL -jAL -jAL -jAL -bfB -bGx -fQX -snZ -hzJ -hzJ -hzJ -hzJ -uAd -kbK -jpE -iQq -kLM -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -kLM -kLM -qoU -hXB -hzJ -hzJ -hzJ -xMz -xMz -xMz -xMz -kAw -kAw -kAw -kAw -kAw -kAw -hrk -hrk +lSU +dwQ +dwQ +lSU +lSU +lSU +lSU +lSU +goj +chU +dsY +hTb +pRH +lpA +goj +chU +goj +fNE +afV +rZt +rZt +aCB +asz +jrg +jrg +jrg +jrg +bJj +bJj +bJj +gpz +gpz +gpz +bJj +bJj +bJj +jrg +gRJ +bJj +osE +gpz +bJj +bJj +jrg +sax puZ puZ puZ @@ -58123,67 +58098,67 @@ aXZ fIT fQX iMb +wMh +wMh +cQY +aNy +xtc +nKD mIL mIL mIL -fQX -fQX -fQX -fQX -mIL -mIL mIL mIL -mhl -fQX -fQX -fQX -fQX -jAL -jAL -fQX -fQX -jAL -jAL -jAL -pqj -jAL -pqj -fKb -kLM -iQq -kLM -kLM -kLM -kLM -uqb -iOu -kLM -iQq -iQq -iQq -iQq -iQq -iOu -iQq -iQq -uqb -hbD -boz -iDy -hzJ -hzJ -xMz -xMz -xMz -xMz -xMz -kAw -nZA -nZA -kAw -kAw -kAw +vJu +oRK +mIx +aca +oQl +oQl +lSU +dwQ +dwQ +lSU +gpb +adC +adC +lSU +goj +wnK +goj +gKE +pue +iYc +onM +wnK +goj +asz +afz +azH +agZ +aUS +asz +jrg +jrg +jrg +jrg +jrg +bJj +gpz +osE +osE +gpz +bJj +bJj +mKF +jrg +jrg +gRJ +sUD +hXH +apD +hXH +czI puZ puZ puZ @@ -58286,66 +58261,66 @@ fIT iMb fQX fQX -mIL -fQX -fQX -fQX -fQX -fQX +wMh +pXU +wMh +wMh +aFO +gaz mIL mIL mIL mIL -wxY -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -jAL -pqj -jAL -kvQ -uqb -aDM -iQq -kLM -kLM -iQq -uqb -uqb -iQq -iQq -iQq -iQq -iQq -kLM -kLM -iQq -iQq -uqb -lNg -lNg -xvb -uqb -xMz -xMz -xMz -xMz -xMz -xMz -kAw -nZA -kAw -kAw -nZA -kAw +vJu +kbT +skl +skl +ors +lSU +lSU +dwQ +dwQ +lSU +dwQ +dwQ +dwQ +lSU +dtE +rZt +rZt +iXr +pue +wui +rZt +rZt +goj +asz +asz +asz +asz +asz +asz +jrg +jrg +jrg +bJj +bJj +bJj +gpz +osE +osE +bJj +osE +osE +jrg +jrg +jrg +jrg +jrg +flN +fLk +flN +pxA puZ puZ puZ @@ -58447,67 +58422,67 @@ fIT fQX iMb iMb -fQX +jAL fQX fQX fQX fQX cKL -fQX -fQX +ood +cKL mIL mIL rcD -mIL -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -jAL -pqj -jAL -fQX -kLM -uqb -kLM -kLM -kLM -kLM -kLM -iQq -iQq -kLM -iQq -iQq -iQq -iQq -kLM -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -xMz -xMz -xMz -xMz -xMz -xMz -kAw -kAw -kAw -kAw -kAw -kAw +vJu +sgB +skl +skl +ors +dwQ +elw +dwQ +dwQ +adI +adj +dwQ +adH +lSU +goj +wnK +goj +wnK +wnK +wnK +goj +txU +goj +rZt +rZt +flN +asz +jrg +jrg +jrg +osE +osE +osE +osE +bJj +bJj +bJj +bJj +sLj +sLj +tnG +jrg +jrg +jrg +jrg +wBf +flN +dwQ +rZt +pxA puZ puZ puZ @@ -58616,60 +58591,60 @@ fQX cKL fQX fQX -fQX +ood mIL ood mIL -wxY -fQX -fQX -fQX -fQX -fQX -fQX -fQX -fQX -jAL -jAL -pqj -jAL -fQX -jAL -cdh -aDM -uqb -kLM -kLM -uqb -uqb -kLM -kLM -kLM -iQq -bzK -iQq -iQq -kLM -kLM -iQq -iQq -iQq -iQq -iQq -iQq -iQq -xMz -xMz -xMz -xMz -xMz -xMz -kAw -kAw -kAw -kAw -kAw -kAw +vJu +abV +skl +skl +ors +elw +dwQ +dwQ +dwQ +lSU +ada +dwQ +dwQ +adI +goj +chU +goj +chU +chU +chU +goj +chU +aiD +rZt +flN +rZt +dwQ +bJj +osE +bJj +osE +osE +osE +gpz +bJj +gpz +gpz +bJj +ciL +gpz +bJj +xuz +jrg +jrg +jrg +pxA +flN +rZt +dwQ +pxA puZ puZ puZ @@ -58782,56 +58757,56 @@ mIL mIL ood mIL -mhl -fQX -cKL -fQX -fQX -cKL -fQX -fQX -fQX -jAL -pqj -fQX -jAL -fQX -jAL -kvQ -kLM -xvb -kLM -kLM -kLM -kLM -kLM -gCx -kJQ -kLM -qkI -iQq -kLM -iOu -kLM -iQq -qkI -lNg -kLM -lNg -uqb -uqb -xMz -xMz -xMz -xMz -xMz -xMz -cwZ -cwZ -kAw -kAw -kAw -kAw +vJu +oQl +abX +ors +ors +lSU +lSU +dwQ +dwQ +lSU +ada +ady +adE +lSU +goj +goj +goj +goj +goj +goj +goj +goj +goj +wnK +wnK +dwQ +flN +fXX +bJj +bJj +osE +bJj +bJj +gpz +gpz +bJj +bJj +xuz +ciL +bJj +bJj +bJj +jrg +jrg +jrg +pxA +dwQ +dwQ +rZt +pxA puZ puZ puZ @@ -58930,7 +58905,7 @@ fQX fQX iMb iMb -fQX +jAL iMb iMb pQE @@ -58940,60 +58915,60 @@ pQE mIL gaz mIL -mIL -ood -gaz -mIL -oQl -oQl -fQX -cKL -fQX -oQl -cKL -fQX -jAL -pqj -fQX -cKL -xMz -xMz -xMz -xMz -aDM -uqb -kLM -gCx -kLM -kLM -kLM -kLM -kLM -kLM -iQq -iQq -kLM -iQq -iQq -kLM -uqb -iQq -iQq -iQq -kLM -xvb -uqb -uCs -xMz -xMz -xMz -xMz -cwZ -cwZ -kAw -kAw -kAw -hrk +mIL +jAL +gaz +mIL +vJu +oQl +oQl +abY +abY +oQl +lSU +dwQ +dwQ +lSU +lSU +lSU +lSU +lSU +shO +gAV +gAV +chU +rZt +rZt +kmO +rZt +rZt +rZt +rZt +rZt +rZt +bJj +bJj +osE +gpz +bJj +bJj +bJj +bJj +bJj +gpz +gpz +rad +fXX +osE +gRJ +jrg +jrg +jrg +pxA +mwF +chU +mwF +pxA puZ puZ puZ @@ -59106,56 +59081,56 @@ ood gaz ood mIL -mIL oQl oQl oQl oQl oQl oQl -fQX -jAL -jAL -cKL -xMz -xMz -xMz -xMz -oqf -uqb -kTP -kLM -kLM -iQq -iQq -iQq -kLM -iQq -iQq -iQq -iQq -iQq -kLM -kLM -iQq -iQq -iQq -qkI -iQq -uqb -kLM -aDM -xMz -xMz -xMz -iQq -fKb -cwZ -kAw -kAw -kAw -hrk -puZ +lSU +dwQ +dwQ +dwQ +bXo +rZt +dTU +dTU +rZt +gAV +gAV +chU +asz +asz +asz +asz +asz +wnK +wnK +dwQ +wnK +dwQ +bJj +bJj +gpz +gpz +gpz +bJj +osE +osE +gpz +gpz +xTK +fXX +fXX +jrg +jrg +jrg +jrg +pxA +xcE +ggL +xcE +pxA puZ puZ puZ @@ -59267,57 +59242,57 @@ ood ood mIL mIL -mIL -mIL -iMb +jAL oQl oQl oQl oQl -vAp -mhl -jAL -mhl -vAp -xMz -cnt -cnt -uqb -xvb -kLM -gCx -kLM -iQq -cQW -cQW -cQW -iQq -iQq -iQq -gGH -kLM -kLM -cQW -cQW -cQW -cQW -kLM -iQq -iQq -kLM -kLM -lNg -xMz -xMz -iQq -kLM -fKb -cwZ -kAw -kAw -hrk -kAw -puZ +oQl +oQl +lSU +rHO +rHO +fgK +lSU +chU +gAV +gAV +gAV +gAV +gAV +chU +fNE +aeP +miD +aiV +asz +rZt +rZt +rZt +rZt +flN +pxA +fXX +bJj +jrg +bJj +bJj +bJj +bJj +bJj +osE +pxA +wnK +wnK +pxA +pxA +pxA +pxA +pxA +mwF +chU +mwF +pxA puZ puZ puZ @@ -59430,56 +59405,56 @@ mIL mIL iMb iMb +oQl +iMb iMb iMb oQl oQl -oQl -oQl -fQX -fQX -jAL -fQX -jAL -xMz -aDM -uqb -uqb -uqb -kLM -gGH -iQq -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -kLM -cQW -cQW -cQW -cQW -kLM -gGH -cQW -kLM -uqb -lNg -erj -kLM -tcp -iQq -fKb -cwZ -kAw -kAw -hrk -sax -puZ +lSU +lSU +lSU +lSU +lSU +chU +gAV +rZt +dTU +dTU +dTU +rZt +fNE +aeC +rZt +aeR +asz +wnK +dwQ +wnK +wnK +wnK +dwQ +bJj +bJj +jrg +jrg +bJj +osE +jrg +jrg +jrg +pxA +wnK +wnK +pxA +pxA +pxA +pxA +pxA +vKu +vKu +vKu +pxA puZ puZ puZ @@ -59589,59 +59564,59 @@ pQE mIL iMb iMb -vpD -vpD -vpD -ccu -ols +iMb +iMb +iMb oQl +iMb +iMb +iMb +iMb oQl oQl oQl -fQX -jAL -pqj -jAL -fQX -xMz -aDM -uqb -uqb -kLM -iQq -iQq -iQq -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -kLM -cQW -iQq -kLM -kLM -wgM -kLM -ath -iQq -fKb -cwZ -kAw -sax -sax -sax -puZ +oQl +oQl +asz +chU +gAV +chU +asz +asz +aed +asz +asz +aez +mRU +aeQ +asz +asz +rZt +flN +rZt +dwQ +flN +flN +amu +bJj +jrg +jrg +jrg +jrg +jrg +jrg +pxA +wnK +wnK +pxA +pxA +pxA +pxA +pxA +mwF +chU +mwF +pxA puZ puZ puZ @@ -59749,61 +59724,61 @@ pQE pQE mIL fQX +jAL +iMb +iMb +iMb +iMb +iMb +iMb +jAL +iMb +iMb iMb iMb -vpD -vpD -qFx -oQl -oQl -oQl oQl oQl oQl -fQX -jAL -pqj -jAL -fQX -xMz -uqb -uqb -uqb -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -iQq -kLM -kLM -lNg -uqb -kLM -kLM -fKb -kAw -kAw -sax -sax -sax -puZ +asz +rZH +gAV +chU +adW +aeb +rZt +miD +miD +adi +aCB +asz +asz +asz +asz +wnK +wnK +wnK +wnK +dwQ +flN +jrg +jrg +jrg +jrg +jrg +pxA +pxA +pxA +wnK +wnK +vKu +wnK +hfw +wnK +rZt +mwF +chU +mwF +pxA puZ puZ puZ @@ -59913,60 +59888,60 @@ fQX jAL fQX iMb -ben -vpD -vpD -oQl -oQl -oQl -oQl -oQl -oQl -oQl -fQX jAL -fQX -fQX -xMz -uqb -uqb -kLM -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -iQq -iQq -iQq -kLM -kLM -ath -aDM -kLM -sax -sax -sax -sax -sax -sax -sax -puZ -puZ +iMb +iMb +iMb +iMb +jAL +iMb +iMb +iMb +jAL +jAL +iMb +oQl +asz +chU +gAV +chU +adV +rZt +rZt +rZt +rZt +rZt +mOu +asz +asz +asz +asz +asz +rZt +flN +rZt +rZt +dwQ +pxA +pxA +pxA +jrg +jrg +pxA +mWE +pJA +wnK +mwF +mwF +mwF +mwF +vKu +bJi +bJi +chU +mwF +pxA +flN puZ puZ puZ @@ -60069,67 +60044,67 @@ fQX iMb iMb iMb -iMb +jAL fQX jAL fQX jAL jAL -vpD -ben -vpD -oQl -oQl -oQl -oQl -oQl +iMb +jAL +iMb +iMb +iMb +iMb +iMb +iMb +jDv +jDv +jDv +jDv oQl -vAp -mhl -fQX -mhl -vAp -xMz -uqb -kLM -iQq -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -boD -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -iQq -iQq -iQq -iQq -iQq -kLM -lMO -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +asz +chU +gAV +chU +adT +rZt +rZt +rZt +rZt +mRU +aex +asz +nVn +iCJ +pxA +pxA +pxA +wnK +wnK +wnK +wnK +jXM +wnK +pxA +jrg +jrg +pxA +nHH +pDp +wnK +flN +flN +flN +flN +flN +mwF +rZt +rZt +mwF +pxA +kTd +kTd puZ puZ puZ @@ -60240,59 +60215,59 @@ pqj jAL iMb iMb -oQl -oQl -oQl -oQl -oQl -oQl -aUP -fQX -jAL iMb -xMz -xMz -kLM -uqb -kLM -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -iQq -iQq -kLM -kLM -uqb -kLM -uqb -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +iMb +iMb +iMb +iMb +jDv +asz +asz +asz +asz +asz +chU +gAV +chU +adS +aea +ptr +aew +aew +aex +asz +asz +lXy +nxA +vKu +vKu +bUe +rZt +chU +rZt +chU +dwQ +wnK +pxA +pxA +pxA +pxA +nzf +wnK +wnK +aQm +aXc +aXI +bbG +flN +mwF +chU +bJi +bJi +wBf +flN +kTd +kTd puZ puZ puZ @@ -60402,59 +60377,59 @@ pqj jAL jAL iMb -oQl -oQl -oQl -oQl -oQl -aTr +iMb iMb iMb jAL iMb -xMz -xMz -aDM -uqb -kLM -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -kLM -kLM -kLM -aDM -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +jDv +asz +dAt +sNX +dAt +rZt +chU +gAV +chU +asz +asz +asz +asz +asz +asz +asz +asz +pxA +vdS +wnK +vKu +pxA +pxA +ahu +wnK +wnK +wnK +wnK +jXM +uYt +pxA +pxA +nrr +wnK +wnK +aPe +act +acA +bah +flN +mwF +chU +bJi +rZt +flN +flN +rZt +flN puZ puZ puZ @@ -60564,59 +60539,59 @@ pqj jAL jAL cKL -jAL -oQl oQl -cKL -cKL -jAL iMb -jAL -jAL -pDH -xMz -xMz -aDM -uqb -uqb -kLM -iQq -iQq -iQq -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -kLM -cQW -iQq -kLM -kLM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +iMb +iMb +iMb +oQl +asz +gha +rZt +sNX +rZt +chU +gAV +chU +rZt +asz +wqc +tOq +hXQ +asz +goj +goj +pxA +vKu +wnK +wnK +cSn +pxA +pxA +sIX +chU +rZt +chU +rZt +wnK +pxA +pxA +nmT +pve +wnK +aPd +aRz +aXi +bag +flN +mwF +chU +mwF +flN +wBf +pxA +pxA +kTd puZ puZ puZ @@ -60726,60 +60701,60 @@ pqj pqj jAL jAL -fQX -aOk -aQh -rxF -wuw -iMb +oQl +oQl +oQl iMb jAL -onF -qRV -mIL -xMz -xMz -aDM -uqb -kLM -kLM -gGH -iQq -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -cQW -iQq -cQW -cQW -cQW -cQW -kLM -gGH -cQW -iQq -kLM -uqb -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +asz +dAt +sNX +dAt +rZt +chU +gAV +chU +rZt +bXo +biM +biM +biM +goj +xJA +goj +bXo +vKu +soj +wnK +wnK +cSn +pxA +pxA +pxA +wnK +wnK +wnK +wnK +wnK +pxA +kRV +pEv +wnK +flN +flN +flN +flN +flN +mwF +chU +fww +sNX +dAt +rZt +pxA +kTd +flN puZ puZ puZ @@ -60888,60 +60863,60 @@ pqj pqj pqj iMb -jAL -aOl -oCk -jAL -jJf -jAL -jAL -iMb -iMb -kVs -bbF -xMz -xMz -uqb -uqb -kLM -kLM -gCx -iQq -iQq -cQW -cQW -cQW -iQq -iQq -iQq -gGH -iQq -iQq -cQW -cQW -cQW -cQW -kLM -iQq -iQq -iQq -kLM -uqb -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +oQl +oQl +oQl +asz +rZt +bgC +rZt +rZt +chU +gAV +chU +rZt +asz +biM +biM +biM +goj +lpA +uWA +pxA +tNP +lFp +jcv +fqJ +cSn +pxA +pxA +pxA +rZH +rZt +chU +rZt +rZt +pxA +pxA +pxA +wnK +mwF +mwF +mwF +mwF +vKu +mwF +chU +uOR +uuN +acP +flN +pxA +flN +kTd puZ puZ puZ @@ -61050,60 +61025,60 @@ jAL pqj pqj pqj -pqj -jAL -iMb -aRo -jAL -pqj -iMb -jAL -iMb -jAL -jAL -jAL -kvQ -uqb -dgG -kLM -kLM -kLM -kLM -kLM -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -iQq -gCx -kLM -kLM -uqb -kLM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +oQl +oQl +oQl +asz +eaa +rZt +rZt +rZt +chU +gAV +chU +iaK +kTI +biM +xtI +qOd +goj +wnK +goj +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +wnK +wnK +wnK +wnK +wnK +pxA +rZt +vKu +vKu +wnK +vKu +wnK +vKu +wnK +bJi +chU +fww +sNX +dAt +flN +rZt +flN +kTd puZ puZ puZ @@ -61212,61 +61187,61 @@ jAL jAL pqj pqj -pqj -pqj -jAL -jAL -iMb -aTt -iMb -iMb -iMb -fQX -jAL -jAL -kvQ -oUu -uqb -kLM -kLM -uqb -iQq -gCx -kLM -uqb -kLM -iQq -iQq -kLM -kLM -kLM -kLM -kLM -iQq -iQq -kLM -kLM -kLM -uqb -uqb -uqb -kLM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +oQl +oQl +oQl +asz +rZt +byr +rZt +rZt +chU +gAV +chU +iaK +feA +biM +biM +biM +uuv +yhX +goj +pxA +rZt +dTU +osV +dTU +dTU +dTU +rZt +kap +rZt +crF +crF +crF +wnK +vKu +wnK +chU +rZt +chU +rZt +chU +rZt +chU +rZt +chU +mwF +bgC +flN +flN +rZt +flN +kTd +flN puZ puZ "} @@ -61374,61 +61349,61 @@ jAL jAL jAL pqj -pqj -pqj -pqj -pqj -aSF -aTw -iMb -iMb -jAL -pqj -jAL -pqj -iQq -iQq -iQq -iQq -uqb -uqb -uqb -uqb -kLM -kLM -iQq -gCx -uqb -uqb -qkI -iQq -kLM -kLM -kLM -kLM -gCx -kLM -uqb -uqb -aDM -upf -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +oQl +oQl +oQl +asz +wFB +eSt +wFB +dTU +rZt +gAV +rZt +txX +kRj +qOZ +cEj +qOZ +goj +fwv +goj +bXo +chU +kQJ +vKu +wnK +vKu +wnK +vKu +kap +rZt +crF +crF +crF +wnK +vKu +wnK +chU +rZt +chU +rZt +chU +rZt +chU +rZt +chU +mwF +byr +rZt +rZt +xun +flN +kTd +kue puZ puZ "} @@ -61536,61 +61511,61 @@ aKk lyh rxF wcF -pqj -aOp -pqj -pqj -fQX -iMb -iMb -jAL +oQl +oQl +oQl iMb iMb -jAL -jAL -kvQ -iOu -kLM -kLM -kLM -kLM -kLM -uqb -uqb -uqb -uqb -kLM -iQq -uqb -uqb -kLM -kLM -kLM -uqb -uqb -uqb -uqb -kLM -uqb -kLM -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +rib +asz +gha +uuN +sNX +rZt +chU +gAV +chU +rZt +asz +dnH +jft +ghS +asz +goj +goj +pxA +rZH +vKu +ghU +pxA +vQm +vFX +pxA +pxA +wnK +wnK +wnK +wnK +wnK +pxA +rZt +vKu +vKu +wnK +vKu +wnK +vKu +wnK +bJi +chU +fww +gaJ +dAt +rZt +rZt +flN +flN +kTd puZ puZ "} @@ -61694,65 +61669,65 @@ gkv gkv puZ puZ -aKn +jAL rMb iMb jJf -pqj -pqj -cKL -cKL -fQX -iMb -fQX iMb iMb iMb jAL -jAL -kvQ -uqb -aDM -uqb -uqb -uqb -uqb -uqb -uqb -qza -kLM -hXX -kLM -cko -rLu -nMR -kLM -uqb -uqb -aDM -xvb -uqb -uqb -uqb -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +iMb +rib +asz +wFB +eSt +wFB +dTU +rZt +gAV +rZt +dTU +asz +asz +asz +asz +asz +goj +goj +fNE +chU +wnK +pxA +pxA +pxA +pxA +pxA +pxA +mcw +rZt +chU +rZt +chU +pxA +pxA +pxA +wnK +mwF +mwF +mwF +mwF +vKu +mwF +chU +uOR +rZt +acP +flN +pxA +flN +flN +kue puZ puZ "} @@ -61860,61 +61835,61 @@ aKn jAL jAL jAL -pqj -cKL -iMb -fQX -cKL -aTH +jAL iMb iMb -hJd iMb iMb -puZ -puZ -puZ -puZ -eaB -eaB -gJk -hIn -aDM -uqb -uqb -uqb -uqb -mfa -jqx -slO -nNl -nMR -uqb -aDM -kLM -kLM -xvb -uqb -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +rib +asz +asz +asz +asz +asz +wnK +wnK +wnK +wnK +wnK +rZt +rZt +asz +wTm +biM +biM +fNE +chU +vKu +vQm +pxA +rZt +iQe +wnK +gFb +nMk +chU +rZt +chU +rZt +fNE +mWE +pDu +wnK +flN +flN +flN +flN +flN +mwF +chU +fww +sNX +dAt +flN +pxA +flN +flN +kue puZ puZ "} @@ -62022,61 +61997,61 @@ jAL jAL jAL jAL -pqj jAL iMb -aRp -lyh -rxF -wuw -aVW -fQX iMb -cKL -puZ -puZ -puZ -puZ -slO -slO -slO -aKP -aMn -puZ -kfl -eGe -rnO -qza -mNs -slO -slO -ofl -uqb -xvb -kGW -aDM -uqb -uqb -uqb -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +jAL +jAL +oQl +oQl +oQl +asz +asz +asz +goj +goj +djO +goj +wnK +rZt +rZt +fNE +nPH +biM +biM +fNE +chU +wnK +vFX +pxA +iQe +qaF +chU +kyu +drx +rZt +chU +rZt +chU +fNE +mHU +pDp +wnK +aQm +aXc +aXI +bbG +flN +mwF +chU +mwF +rZt +flN +rZt +flN +flN +flN +kue puZ puZ "} @@ -62184,61 +62159,61 @@ puZ aLD aMv jAL +oQl +oQl +oQl +oQl jAL -iMb -cKL -iMb -rMb -iMb -fqb -jAL -iMb -cKL -iMb -puZ -puZ -puZ -puZ -puZ -slO -slO -slO -slO -puZ -lLv -cQW -rbA -uqb -mNs -xMz -slO -ofl -uqb -uqb -aDM -uqb -uqb -uqb -uqb -riV -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +asz +iqt +rZt +goj +axa +hVs +djO +dBB +rZt +rZt +fNE +sdF +biM +biM +fNE +rZt +vKu +pxA +pxA +rZt +hEE +chU +gFb +sfM +oHF +wnK +wnK +wnK +pxA +lYG +wnK +wnK +aPe +aSJ +aXn +bah +flN +mwF +chU +mwF +flN +rZt +rZt +flN +flN +kTd +kue puZ puZ "} @@ -62346,61 +62321,61 @@ puZ puZ puZ jAL +oQl +oQl +oQl +oQl jAL -cKL -fQX -iMb -aSG -aTL -fQX -iMb -fQX -cKL -puZ -puZ -puZ -puZ -puZ -puZ -slO -slO -slO -puZ -puZ -mev -cQW -rbA -aDM -mOv -niL -niL -oqH -uqb -uqb -uqb -uqb -uqb -uqb -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -jCE -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +asz +bNu +rZt +djO +qCs +pPt +goj +wnK +qyE +wnK +asz +fNE +fNE +fNE +pxA +xvS +xvS +pxA +pxA +iQe +qaF +chU +pxA +pxA +pxA +vKu +vKu +vKu +pxA +lGU +wnK +wnK +aPd +aRz +aXi +bag +flN +mwF +chU +mwF +rZt +flN +flN +pxA +flN +kTd +kue puZ puZ "} @@ -62510,59 +62485,59 @@ puZ puZ puZ puZ -cKL -fQX -iMb -iMb -iMb -cKL -iMb -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -uqb -uqb -uqb -kLM -uqb -uqb -uqb -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -hFl -jLx -iWS -jCE -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +oQl +oQl +oQl +asz +iIe +rZt +goj +fHM +rZt +goj +wnK +rZt +vKu +vKu +vKu +vKu +vKu +vKu +vKu +toN +vKu +vKu +dgF +hEE +wnK +pxA +pxA +pxA +wnK +wnK +wnK +pxA +hQO +pve +wnK +flN +wAP +flN +dJS +flN +mwF +chU +mwF +rZt +rZt +wBf +pxA +kTd +kue +flN puZ puZ "} @@ -62673,57 +62648,57 @@ puZ puZ puZ puZ -cKL -fQX -cKL -cKL -iMb -fQX -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -snN -uqb -uqb -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -oaP -jCE -jCE -jCE -jCE -acO -puZ -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +oQl +oQl +asz +asz +rZt +goj +rZt +rZt +goj +wnK +xEB +vKu +wnK +rZt +rZt +eFQ +rZt +rZt +wnK +vKu +vKu +vKu +vKu +vKu +jqT +pxA +ctk +cVy +chU +mwF +pxA +kRV +kVe +wnK +mwF +mwF +yiS +mwF +vKu +mwF +chU +mwF +rZt +flN +flN +flN +kTd +kTd puZ puZ puZ @@ -62837,55 +62812,55 @@ puZ puZ puZ puZ -fQX -iMb -fQX -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -aDM -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -hFl -jCE -jCE -acM -jCE -jCE -puZ -puZ -puZ -puZ -puZ +oQl +oQl +oQl +asz +tqs +rZt +goj +rZt +fHM +goj +wnK +rZt +vKu +wnK +rZt +rZt +wnK +rZt +rZt +wnK +vKu +vKu +vKu +vKu +vKu +bqy +pxA +ugP +mwF +chU +mwF +pxA +pxA +pxA +pxA +wnK +vKu +xIL +vKu +wnK +bJi +chU +bJi +rZt +twi +flN +flN +kue +flN puZ puZ puZ @@ -63002,51 +62977,51 @@ puZ puZ puZ puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -hFl -jCE -jCE -jCE -puZ -puZ -puZ -puZ -puZ +asz +wgp +rZt +goj +qNK +hrb +goj +wnK +rZt +vKu +lkX +ift +sQU +vKu +sQU +ift +lkX +rhS +oqQ +oqQ +lNm +vKu +pxA +pxA +ctk +mwF +chU +bJi +euA +euA +euA +bJi +euA +euA +euA +euA +bJi +bJi +chU +mwF +rZt +twi +kue +kTd +flN puZ puZ puZ @@ -63164,50 +63139,50 @@ puZ puZ puZ puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -hFl -hFl -puZ -puZ -puZ -puZ -puZ +asz +fjd +rZt +djO +kts +wAM +djO +asz +pxA +pxA +ift +smI +hUG +vKu +udJ +euA +ift +pKP +nNN +kZy +pKP +vKu +uLu +pxA +pxA +bJi +rZt +dTU +dTU +dTU +dTU +rZt +dTU +dTU +dTU +dTU +rZt +dTU +rZt +mwF +rZt +pxA +kTd +kTd puZ puZ puZ @@ -63326,48 +63301,48 @@ puZ puZ puZ puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +asz +asz +asz +goj +djO +goj +goj +asz +pxA +pxA +lkX +ffw +uim +vKu +uim +ffw +lkX +vKu +vKu +vKu +vKu +vKu +uLu +pxA +pxA +bJi +bJi +euA +vPR +euA +euA +bJi +euA +euA +vPR +euA +bJi +euA +euA +bJi +rZt +pxA puZ puZ puZ @@ -63490,46 +63465,46 @@ puZ puZ puZ puZ +asz +asz +asz +asz +asz +asz puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +pxA +ueu +mMa +euA +vKu +euA +euA +vKu +rhS +oqQ +oqQ +rhS +ueu +pxA +pxA +pxA +pxA +pxA +sym +ctk +ugP +pxA +pxA +xwi +thc +ckI +dTn +pxA +pxA +rZt +rZt +rZt +pxA puZ puZ puZ @@ -63659,39 +63634,39 @@ puZ puZ puZ puZ +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA puZ puZ puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ -puZ +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA +pxA puZ puZ puZ diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index d178ca9faddf..653416320eac 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -8549,6 +8549,12 @@ }, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/colony_north) +"lBu" = ( +/obj/structure/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/kutjevo/multi_tiles, +/area/kutjevo/interior/power) "lBP" = ( /obj/structure/window/framed/kutjevo/reinforced, /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -14599,7 +14605,6 @@ /area/kutjevo/interior/power) "tEV" = ( /obj/structure/surface/rack, -/obj/item/book/manual/engineering_particle_accelerator, /obj/effect/landmark/objective_landmark/medium, /turf/open/floor/kutjevo/multi_tiles{ dir = 10 @@ -25968,7 +25973,7 @@ uGd fkP vin pBV -hQj +lBu uBz cvm hQj @@ -26135,7 +26140,7 @@ eyU dyU pyp pyp -hQj +sNp pyp xjY xjY diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index a56328df85f0..ca983240307f 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -6074,10 +6074,7 @@ pixel_x = -7; pixel_y = 8 }, -/obj/item/tool/lighter/zippo{ - icon_off = "blackzippo"; - icon_on = "blackzippoon"; - icon_state = "blackzippo"; +/obj/item/tool/lighter/zippo/black{ pixel_x = -5; pixel_y = 7 }, @@ -34890,10 +34887,6 @@ icon_state = "blue" }, /area/varadero/interior/administration) -"wjd" = ( -/obj/item/book/manual/robotics_cyborgs, -/turf/open/floor/carpet, -/area/varadero/interior/library) "wjf" = ( /obj/structure/machinery/washing_machine, /obj/structure/machinery/washing_machine{ @@ -53826,7 +53819,7 @@ pjn mCY jzZ mCY -wjd +jzZ mRq xWY hvO diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm index 84355a59b16d..1f81d5d13e61 100644 --- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm +++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm @@ -15781,7 +15781,6 @@ /area/strata/ag/interior/outpost/canteen/bar) "aXj" = ( /obj/structure/surface/rack, -/obj/item/book/manual/engineering_singularity_safety, /obj/structure/machinery/light/small{ dir = 8 }, @@ -15799,7 +15798,6 @@ /obj/structure/surface/rack, /obj/item/book/manual/orbital_cannon_manual, /obj/item/book/manual/research_and_development, -/obj/item/book/manual/supermatter_engine, /turf/open/floor/strata{ icon_state = "orange_cover" }, @@ -16973,7 +16971,6 @@ "bbE" = ( /obj/structure/surface/rack, /obj/item/book/manual/engineering_guide, -/obj/item/book/manual/engineering_particle_accelerator, /turf/open/floor/strata{ icon_state = "orange_cover" }, @@ -29295,7 +29292,7 @@ /obj/structure/machinery/light/small{ dir = 1 }, -/obj/item/book/manual/engineering_particle_accelerator, +/obj/item/book/manual/detective, /turf/open/floor/strata, /area/strata/ag/interior/dorms) "ctF" = ( diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 1a08b69b8d42..44d5bd6750de 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -13821,21 +13821,6 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) -"bfO" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/photocopier{ - anchored = 0 - }, -/obj/structure/sign/poster{ - desc = "A large piece of cheap printed paper. This one proudly demands that you REMEMBER IO!"; - icon_state = "poster14"; - name = "propaganda poster"; - pixel_y = 32 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliaison) "bfP" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -17730,18 +17715,6 @@ icon_state = "cargo" }, /area/almayer/squads/req) -"bEt" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/sign/safety/commline_connection{ - pixel_y = 32 - }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" - }, -/area/almayer/squads/req) "bEv" = ( /turf/open/floor/almayer{ dir = 1; @@ -23184,17 +23157,6 @@ icon_state = "red" }, /area/almayer/hallways/port_hallway) -"cjz" = ( -/obj/structure/bed/chair/bolted{ - dir = 1 - }, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/perma) "cjA" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -26681,6 +26643,17 @@ icon_state = "cargo" }, /area/almayer/squads/req) +"dmF" = ( +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "green" + }, +/area/almayer/squads/req) "dmQ" = ( /turf/open/floor/almayer{ icon_state = "plate" @@ -28576,6 +28549,14 @@ icon_state = "plate" }, /area/almayer/squads/req) +"dXH" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/device/camera_film{ + pixel_x = 4; + pixel_y = -2 + }, +/turf/open/floor/almayer, +/area/almayer/squads/charlie_delta_shared) "dXI" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ name = "\improper Exterior Airlock"; @@ -28866,20 +28847,6 @@ icon_state = "plate" }, /area/almayer/shipboard/navigation) -"edn" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/structure/sign/poster{ - desc = "Koorlander Golds, lovingly machine rolled for YOUR pleasure."; - icon_state = "poster10"; - name = "Koorlander Gold Poster"; - pixel_x = 29; - pixel_y = 6; - serial_number = 10 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliaison) "edo" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -30051,6 +30018,15 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"eAG" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/firstaid/regular, +/obj/item/clipboard, +/obj/item/tool/pen, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/squads/req) "eAI" = ( /turf/open/floor/almayer{ dir = 8; @@ -30535,30 +30511,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) -"eIT" = ( -/obj/structure/surface/table/almayer, -/obj/item/book/manual/engineering_particle_accelerator, -/obj/item/folder/yellow, -/obj/structure/machinery/keycard_auth{ - pixel_x = -8; - pixel_y = 25 - }, -/obj/structure/sign/safety/high_rad{ - pixel_x = 32; - pixel_y = -8 - }, -/obj/structure/sign/safety/hazard{ - pixel_x = 32; - pixel_y = 7 - }, -/obj/structure/sign/safety/terminal{ - pixel_x = 14; - pixel_y = 26 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/engineering/lower/workshop) "eJd" = ( /obj/structure/platform_decoration{ dir = 4 @@ -30741,17 +30693,6 @@ /obj/structure/largecrate/random, /turf/open/floor/almayer, /area/almayer/engineering/upper_engineering/port) -"eNw" = ( -/obj/structure/machinery/atm{ - name = "Weyland-Yutani Automatic Teller Machine"; - pixel_y = 30 - }, -/obj/structure/surface/table/almayer, -/obj/item/spacecash/c1000/counterfeit, -/obj/item/storage/box/drinkingglasses, -/obj/item/storage/fancy/cigar, -/turf/open/floor/almayer, -/area/almayer/command/corporateliaison) "eNx" = ( /obj/structure/machinery/vending/snack, /turf/open/floor/almayer{ @@ -30876,6 +30817,15 @@ icon_state = "cargo" }, /area/almayer/engineering/lower/workshop/hangar) +"eQJ" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/structure/sign/poster/ad{ + pixel_x = 30 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliaison) "eRe" = ( /obj/structure/bed/chair/comfy/orange{ dir = 8 @@ -34154,6 +34104,15 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/engineering/airmix) +"ggS" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/bed/chair/bolted, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/perma) "ghD" = ( /obj/structure/sign/safety/autoopenclose{ pixel_x = 7; @@ -34535,6 +34494,18 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/north1) +"gqQ" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21" + }, +/obj/structure/sign/safety/escapepod{ + pixel_x = -17 + }, +/obj/structure/sign/poster/hero/voteno{ + pixel_y = 32 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliaison) "grF" = ( /obj/structure/pipes/vents/scrubber, /turf/open/floor/almayer, @@ -34663,19 +34634,6 @@ icon_state = "silvercorner" }, /area/almayer/command/cichallway) -"gtA" = ( -/obj/structure/surface/table/reinforced/prison, -/obj/structure/transmitter{ - dir = 8; - name = "Medical Telephone"; - phone_category = "Almayer"; - phone_id = "Medical Lower"; - pixel_x = 16 - }, -/turf/open/floor/almayer{ - icon_state = "sterile_green" - }, -/area/almayer/medical/lockerroom) "gtU" = ( /obj/structure/machinery/power/apc/almayer{ dir = 8 @@ -34817,14 +34775,6 @@ icon_state = "plate" }, /area/almayer/living/gym) -"gwD" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/firstaid/regular, -/obj/item/clipboard, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/req) "gwF" = ( /obj/structure/prop/invuln/lattice_prop{ icon_state = "lattice12"; @@ -36227,14 +36177,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) -"gZr" = ( -/obj/structure/surface/table/reinforced/prison, -/obj/item/device/camera_film{ - pixel_x = 4; - pixel_y = -2 - }, -/turf/open/floor/almayer, -/area/almayer/squads/charlie_delta_shared) "gZw" = ( /obj/structure/bed/sofa/vert/grey/bot, /turf/open/floor/almayer, @@ -36677,6 +36619,17 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) +"hgO" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/prop/almayer/computer/PC{ + dir = 4 + }, +/obj/item/tool/stamp/approved{ + pixel_y = -11; + pixel_x = -3 + }, +/turf/open/floor/almayer, +/area/almayer/squads/req) "hgV" = ( /obj/structure/machinery/power/fusion_engine{ name = "\improper S-52 fusion reactor 15" @@ -37094,6 +37047,19 @@ icon_state = "blue" }, /area/almayer/command/cichallway) +"hmV" = ( +/obj/structure/bookcase{ + icon_state = "book-5"; + name = "medical manuals bookcase"; + opacity = 0 + }, +/obj/item/book/manual/surgery, +/obj/item/book/manual/medical_diagnostics_manual, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "hng" = ( /obj/structure/surface/table/almayer, /obj/item/clothing/accessory/storage/black_vest/acid_harness, @@ -37212,21 +37178,6 @@ icon_state = "cargo" }, /area/almayer/hull/lower_hull/l_f_s) -"hqJ" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21" - }, -/obj/structure/sign/poster{ - desc = "A large piece of cheap printed paper. This one proudly demands that you REMEMBER IO!"; - icon_state = "poster14"; - name = "propaganda poster"; - pixel_y = 32 - }, -/obj/structure/sign/safety/escapepod{ - pixel_x = -17 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliaison) "hqU" = ( /obj/structure/bed/chair{ dir = 8; @@ -41172,13 +41123,6 @@ /obj/docking_port/stationary/escape_pod/cl, /turf/open/floor/plating, /area/almayer/hull/upper_hull/u_m_p) -"iVj" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/prop/almayer/computer/PC{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/squads/req) "iVo" = ( /obj/structure/bed/sofa/south/grey/right, /turf/open/floor/almayer{ @@ -41735,6 +41679,15 @@ icon_state = "red" }, /area/almayer/living/cryo_cells) +"jeR" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/bed/chair/bolted, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/shipboard/brig/perma) "jeU" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/almayer{ @@ -41937,21 +41890,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) -"jhB" = ( -/obj/structure/bookcase{ - icon_state = "book-5"; - name = "medical manuals bookcase"; - opacity = 0 - }, -/obj/item/book/manual/surgery, -/obj/item/book/manual/research_and_development, -/obj/item/book/manual/medical_diagnostics_manual, -/obj/item/book/manual/medical_cloning, -/obj/structure/machinery/light{ - dir = 4 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "jhD" = ( /obj/structure/machinery/firealarm{ pixel_y = -28 @@ -42984,6 +42922,16 @@ icon_state = "orange" }, /area/almayer/engineering/lower/workshop/hangar) +"jFy" = ( +/obj/structure/surface/table/almayer, +/obj/effect/spawner/random/toolbox, +/obj/item/clipboard, +/obj/item/tool/pen, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "green" + }, +/area/almayer/squads/req) "jFE" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -48286,15 +48234,6 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer, /area/almayer/hallways/starboard_hallway) -"lBF" = ( -/obj/structure/surface/table/almayer, -/obj/effect/spawner/random/toolbox, -/obj/item/clipboard, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "green" - }, -/area/almayer/squads/req) "lBR" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -48335,6 +48274,12 @@ icon_state = "red" }, /area/almayer/hallways/upper/port) +"lDa" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_29" + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliaison) "lDg" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ id = "laddernorthwest"; @@ -48638,20 +48583,6 @@ icon_state = "test_floor4" }, /area/almayer/living/grunt_rnr) -"lIa" = ( -/obj/item/robot_parts/arm/l_arm, -/obj/item/robot_parts/leg/l_leg, -/obj/item/robot_parts/arm/r_arm, -/obj/item/robot_parts/leg/r_leg, -/obj/structure/surface/rack, -/obj/effect/decal/cleanable/cobweb{ - dir = 8 - }, -/obj/item/book/manual/robotics_cyborgs{ - pixel_y = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/living/synthcloset) "lIh" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -51594,6 +51525,23 @@ }, /turf/open/floor/almayer, /area/almayer/command/cic) +"mPK" = ( +/obj/structure/pipes/vents/scrubber{ + dir = 4 + }, +/obj/structure/sign/safety/storage{ + pixel_y = 7; + pixel_x = -17 + }, +/obj/structure/sign/safety/commline_connection{ + pixel_x = -17; + pixel_y = -7 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "green" + }, +/area/almayer/squads/req) "mPR" = ( /obj/structure/machinery/light{ dir = 8 @@ -53137,6 +53085,17 @@ icon_state = "plate" }, /area/almayer/engineering/lower) +"nrb" = ( +/obj/item/robot_parts/arm/l_arm, +/obj/item/robot_parts/leg/l_leg, +/obj/item/robot_parts/arm/r_arm, +/obj/item/robot_parts/leg/r_leg, +/obj/structure/surface/rack, +/obj/effect/decal/cleanable/cobweb{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/synthcloset) "nri" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/working_joe{ @@ -54593,6 +54552,23 @@ icon_state = "red" }, /area/almayer/squads/alpha) +"nTo" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/transmitter{ + dir = 8; + name = "Medical Telephone"; + phone_category = "Almayer"; + phone_id = "Medical Lower"; + pixel_x = 16 + }, +/obj/item/device/helmet_visor/medical/advanced, +/obj/item/device/helmet_visor/medical/advanced, +/obj/item/device/helmet_visor/medical/advanced, +/obj/item/device/helmet_visor/medical/advanced, +/turf/open/floor/almayer{ + icon_state = "sterile_green" + }, +/area/almayer/medical/lockerroom) "nTs" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -59687,6 +59663,16 @@ icon_state = "silver" }, /area/almayer/living/briefing) +"pVF" = ( +/obj/structure/surface/table/almayer, +/obj/item/spacecash/c1000/counterfeit, +/obj/item/storage/box/drinkingglasses, +/obj/item/storage/fancy/cigar, +/obj/structure/machinery/atm{ + pixel_y = 32 + }, +/turf/open/floor/almayer, +/area/almayer/command/corporateliaison) "pVZ" = ( /turf/closed/wall/almayer/outer, /area/almayer/hull/upper_hull/u_a_s) @@ -59722,17 +59708,6 @@ icon_state = "green" }, /area/almayer/shipboard/brig/cells) -"pWA" = ( -/obj/structure/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/structure/sign/safety/storage{ - pixel_x = -17 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "green" - }, -/area/almayer/squads/req) "pWN" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -62938,6 +62913,16 @@ icon_state = "plate" }, /area/almayer/living/gym) +"reH" = ( +/obj/structure/noticeboard{ + pixel_x = -10; + pixel_y = 31 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/almayer/squads/req) "reL" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/snacks/sliceable/bread{ @@ -65341,15 +65326,6 @@ "sbJ" = ( /turf/closed/wall/almayer/white/hull, /area/almayer/powered/agent) -"sbM" = ( -/obj/structure/pipes/vents/scrubber{ - dir = 4 - }, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "green" - }, -/area/almayer/squads/req) "sbP" = ( /obj/effect/landmark/start/police, /obj/effect/decal/warning_stripes{ @@ -67513,12 +67489,6 @@ icon_state = "plate" }, /area/almayer/command/cic) -"sSP" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21" - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliaison) "sSY" = ( /obj/structure/pipes/vents/scrubber{ dir = 8 @@ -69732,6 +69702,18 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_hallway) +"tGT" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/machinery/photocopier{ + anchored = 0 + }, +/obj/structure/sign/poster/art{ + pixel_y = 32 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliaison) "tHh" = ( /obj/structure/sign/safety/ladder{ pixel_x = 8; @@ -70160,23 +70142,6 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) -"tQM" = ( -/obj/structure/sign/poster{ - desc = "One of those hot, tanned babes back the beaches of good ol' Earth."; - icon_state = "poster12"; - name = "Beach Babe Pinup"; - pixel_x = -30; - pixel_y = 6; - serial_number = 12 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/command/corporateliaison) "tQV" = ( /turf/closed/wall/almayer/outer, /area/almayer/lifeboat_pumps/south1) @@ -70524,17 +70489,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) -"tYW" = ( -/obj/structure/bed/chair/bolted{ - dir = 1 - }, -/obj/structure/machinery/light{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/shipboard/brig/perma) "tYX" = ( /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -79200,6 +79154,29 @@ icon_state = "emeraldfull" }, /area/almayer/living/briefing) +"xef" = ( +/obj/structure/surface/table/almayer, +/obj/item/folder/yellow, +/obj/structure/machinery/keycard_auth{ + pixel_x = -8; + pixel_y = 25 + }, +/obj/structure/sign/safety/high_rad{ + pixel_x = 32; + pixel_y = -8 + }, +/obj/structure/sign/safety/hazard{ + pixel_x = 32; + pixel_y = 7 + }, +/obj/structure/sign/safety/terminal{ + pixel_x = 14; + pixel_y = 26 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/engineering/lower/workshop) "xeG" = ( /obj/structure/machinery/door/airlock/almayer/maint, /turf/open/floor/almayer{ @@ -81163,6 +81140,18 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/vehiclehangar) +"xOs" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/structure/sign/poster/pinup{ + pixel_x = -30 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/command/corporateliaison) "xOL" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -90634,7 +90623,7 @@ cpf cHP naB pQr -tYW +jeR wvI vPf fvA @@ -91040,7 +91029,7 @@ wcn tYB naB pQr -cjz +ggS wvI piK fvA @@ -100981,7 +100970,7 @@ rIW oGx wvU yiX -lIa +nrb hyQ aic aov @@ -104025,7 +104014,7 @@ hvH hvH iNY hvH -jhB +hmV mXj agj aic @@ -108409,7 +108398,7 @@ qyD omo blZ bqN -gtA +nTo bqN bwR gfW @@ -113797,7 +113786,7 @@ kSJ avj cGr pBG -hqJ +gqQ cHG nQA wph @@ -115019,7 +115008,7 @@ lPm iZV fdx cuq -edn +eQJ fVF pBG qWR @@ -115425,7 +115414,7 @@ trU oNY fdx pBG -eNw +pVF ppF fiE pBG @@ -116232,7 +116221,7 @@ ajr aii avm pBG -bfO +tGT nQA nQA jDO @@ -116841,7 +116830,7 @@ aow hee ioX fKh -sSP +lDa eAN eAN vEG @@ -117049,7 +117038,7 @@ eAN eAN vEG vrJ -tQM +xOs kOH hIs pBG @@ -121821,7 +121810,7 @@ bNE wDJ ivs nyQ -gZr +dXH vWB bSK nyQ @@ -122812,7 +122801,7 @@ bEs bIs bdm rbY -gwD +eAG bOK bPD bYa @@ -123622,9 +123611,9 @@ bdl lOr lOr iwI -lOr bdl -bEt +bdl +reH bNP bmD bNP @@ -123823,10 +123812,10 @@ bzV beB mCo iwZ -lBF +jFy bKA -sbM -pWA +mPK +dmF pXV bNP bmD @@ -126462,7 +126451,7 @@ baq jJs bdl ntd -iVj +hgO eqb mLR hdE @@ -133977,7 +133966,7 @@ vZU elx jnI oJk -eIT +xef dPQ ams eni diff --git a/maps/prison_station_fop.json b/maps/prison_station_fop.json index f2c22dbe4bb8..69469ea2fd03 100644 --- a/maps/prison_station_fop.json +++ b/maps/prison_station_fop.json @@ -3,14 +3,14 @@ "map_path": "map_files/FOP_v2_Cellblocks", "map_file": "Prison_Station_FOP.dmm", "survivor_types": [ - "/datum/equipment_preset/survivor/scientist/florina", - "/datum/equipment_preset/survivor/doctor/florina", + "/datum/equipment_preset/survivor/scientist/fiorina", + "/datum/equipment_preset/survivor/doctor/fiorina", "/datum/equipment_preset/survivor/interstellar_human_rights_observer", - "/datum/equipment_preset/survivor/security/florina", + "/datum/equipment_preset/survivor/security/fiorina", "/datum/equipment_preset/survivor/prisoner", "/datum/equipment_preset/survivor/prisoner", "/datum/equipment_preset/survivor/gangleader", - "/datum/equipment_preset/survivor/engineer/florina", + "/datum/equipment_preset/survivor/engineer/fiorina", "/datum/equipment_preset/survivor/clf", "/datum/equipment_preset/survivor/civilian" ], diff --git a/maps/templates/Chinook.dmm b/maps/templates/Chinook.dmm index 17be7bd9b968..077729447e29 100644 --- a/maps/templates/Chinook.dmm +++ b/maps/templates/Chinook.dmm @@ -660,10 +660,6 @@ /area/adminlevel/chinook/offices) "cr" = ( /obj/structure/surface/table/reinforced/black, -/obj/item/book/manual/robotics_cyborgs{ - pixel_x = -8; - pixel_y = 7 - }, /obj/item/storage/fancy/cigar, /turf/open/floor/almayer, /area/adminlevel/chinook/offices) diff --git a/strings/marinetips.txt b/strings/marinetips.txt index 416c9ef0a4dd..89c55ab6d698 100644 --- a/strings/marinetips.txt +++ b/strings/marinetips.txt @@ -85,7 +85,7 @@ Any marine can perform CPR. On dead marines, this will increase the time they ha If you've been pounced on and your squad is unloading into the target, you can hit the 'rest' button to stay down so you don't get filled with lead after getting up. You can check the landing zone as a marine in the status panel. The Colonial Marshals may come to crack down on too heavy of a Black Market usage. -Functioning night vision goggles can be recharged with batteries. Broken night vision goggles can be repaired by an Engineer with a screwdriver. Not the loadout ones though, those cannot be fixed. +A night vision HUD optic can be recharged by removing it with a screwdriver, then placing it into a recharger. You can put a pistol belt on your suit slot. (Just grab a rifle instead.) Alt-clicking the Squad Leader tracker lets you track your fireteam leader instead. Armor has a randomized reduction in effectiveness, and does not protect the digits. Take the wiki damage values as a best-case scenario. diff --git a/strings/xenotips.txt b/strings/xenotips.txt index 8674146de655..e2bf3fe75098 100644 --- a/strings/xenotips.txt +++ b/strings/xenotips.txt @@ -24,7 +24,7 @@ If you have difficulty clicking marines, try using Directional Slashing, though You can diagonally pounce through the corners of fire as a Lurker or Runner without getting ignited. When playing as Xeno, consider aiming at the limbs instead of the chest. Marine armor doesn't protect the arms and legs as well as it does the body. As Xeno, you can break Night-Vision goggles that some marines wear on their helmets. Just aim for the head and slash until the goggles shatter. -Pounces are ineffective on marines who are laying down. +You can dodge pounces that aren't aimed directly at you by laying down. You may rest immediately during a pounce to pounce straight through mobs. It's not very practical or useful though. Pouncing someone who is buckled to a chair will still stun them, but you won't jump into their tile and they will not be knocked to the ground. Star shell dust from said grenades is just as meltable as normal flares. @@ -36,3 +36,4 @@ As a Ravager your abilities become greatly enhanced when you empower with three Resisting on a water tile will immediately put out fires. Make sure you're alone though - It's usually better to let a friendly Xenomorph pat you out than it is to expose yourself to open water. You can filter out the Xenomorphs displayed in hive status by health, allowing you to look only for wounded sisters. Each xeno has their own ‘tackle counter’ on a marine. The range to successfully tackle can be anywhere from two to six tackles based on caste. If a marine gets stunned or knocked over by other means it will reset everyone's tackle counters and they may get up! +As a Xenomorph, the list of available tunnels is sorted by their distance to the player! diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index ac9346d8d5f0..020e8513dc2c 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -24,6 +24,7 @@ export const MESSAGE_TYPE_INTERNAL = 'internal'; export const MESSAGE_TYPE_SYSTEM = 'system'; export const MESSAGE_TYPE_LOCALCHAT = 'localchat'; export const MESSAGE_TYPE_RADIO = 'radio'; +export const MESSAGE_TYPE_HIVEMIND = 'hivemind'; export const MESSAGE_TYPE_INFO = 'info'; export const MESSAGE_TYPE_WARNING = 'warning'; export const MESSAGE_TYPE_HELPFUL = 'helpful'; @@ -62,7 +63,13 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_RADIO, name: 'Radio', description: 'All departments of radio messages', - selector: '.radio, .xeno, .xenoqueen, .xenoleader, .alert, .newscaster', + selector: '.radio, .alert, .newscaster', + }, + { + type: MESSAGE_TYPE_HIVEMIND, + name: 'Hivemind', + description: 'Xenomorph hivemind messages', + selector: '.xeno, .xenoqueen, .xenoleader', }, { type: MESSAGE_TYPE_INFO, diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.js index fe175ee6d94e..7a528cd4fd75 100644 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ b/tgui/packages/tgui-panel/chat/renderer.js @@ -235,6 +235,8 @@ class ChatRenderer { highlightWords.push(line); } } + const regexStr = regexExpressions.join('|'); + const flags = 'g' + (matchCase ? '' : 'i'); // We wrap this in a try-catch to ensure that broken regex doesn't break // the entire chat. try { diff --git a/tgui/packages/tgui/interfaces/CasSim.tsx b/tgui/packages/tgui/interfaces/CasSim.tsx index ba5990bd81ce..cac23cde1833 100644 --- a/tgui/packages/tgui/interfaces/CasSim.tsx +++ b/tgui/packages/tgui/interfaces/CasSim.tsx @@ -3,7 +3,6 @@ import { Box, Button, Section, ProgressBar, NoticeBox, Stack } from '../componen interface CasSimData { configuration: any; - looking: 0 | 1; dummy_mode: string; worldtime: number; nextdetonationtime: number; @@ -21,7 +20,7 @@ export const CasSim = (_props, context) => { const timeLeft = data.nextdetonationtime - data.worldtime; const timeLeftPct = timeLeft / data.detonation_cooldown; - const canDetonate = timeLeft < 0 && data.configuration && data.looking; + const canDetonate = timeLeft < 0 && data.configuration && simulationView; return ( diff --git a/tgui/packages/tgui/interfaces/DemoSim.jsx b/tgui/packages/tgui/interfaces/DemoSim.tsx similarity index 92% rename from tgui/packages/tgui/interfaces/DemoSim.jsx rename to tgui/packages/tgui/interfaces/DemoSim.tsx index b1a6b3349afe..87dfa81236be 100644 --- a/tgui/packages/tgui/interfaces/DemoSim.jsx +++ b/tgui/packages/tgui/interfaces/DemoSim.tsx @@ -2,8 +2,16 @@ import { useBackend, useLocalState } from '../backend'; import { Button, Section, ProgressBar, NoticeBox, Box, Stack } from '../components'; import { Window } from '../layouts'; +interface DemoSimData { + configuration: any; + dummy_mode: string; + worldtime: number; + nextdetonationtime: number; + detonation_cooldown: number; +} + export const DemoSim = (_props, context) => { - const { act, data } = useBackend(context); + const { act, data } = useBackend(context); const [simulationView, setSimulationView] = useLocalState( context, 'simulation_view', @@ -13,7 +21,7 @@ export const DemoSim = (_props, context) => { const timeLeft = data.nextdetonationtime - data.worldtime; const timeLeftPct = timeLeft / data.detonation_cooldown; - const canDetonate = timeLeft < 0 && data.configuration && data.looking; + const canDetonate = timeLeft < 0 && data.configuration && simulationView; return ( diff --git a/tgui/packages/tgui/interfaces/DropshipWeaponsConsole.tsx b/tgui/packages/tgui/interfaces/DropshipWeaponsConsole.tsx index 629191b3ba70..feb27a9d57c3 100644 --- a/tgui/packages/tgui/interfaces/DropshipWeaponsConsole.tsx +++ b/tgui/packages/tgui/interfaces/DropshipWeaponsConsole.tsx @@ -11,6 +11,7 @@ import { SupportMfdPanel } from './MfdPanels/SupportPanel'; import { FiremissionMfdPanel } from './MfdPanels/FiremissionPanel'; import { TargetAquisitionMfdPanel } from './MfdPanels/TargetAquisition'; import { mfdState } from './MfdPanels/stateManagers'; +import { otherMfdState } from './MfdPanels/stateManagers'; import { Dpad } from './common/Dpad'; export interface DropshipProps { @@ -271,6 +272,7 @@ const WeaponsMfdPanel = (props, context) => { const BaseMfdPanel = (props: MfdProps, context) => { const { setPanelState } = mfdState(context, props.panelStateId); + const { otherPanelState } = otherMfdState(context, props.otherPanelStateId); return ( { ]} bottomButtons={[ {}, - { children: 'MAPS', onClick: () => setPanelState('map') }, - { children: 'CAMS', onClick: () => setPanelState('camera') }, + { + children: otherPanelState !== 'map' ? 'MAPS' : undefined, + onClick: () => setPanelState('map'), + }, + { + children: otherPanelState !== 'camera' ? 'CAMS' : undefined, + onClick: () => setPanelState('camera'), + }, ]}>
@@ -337,7 +345,10 @@ export const DropshipWeaponsConsole = () => { - + @@ -356,7 +367,10 @@ export const DropshipWeaponsConsole = () => { - + diff --git a/tgui/packages/tgui/interfaces/HiveStatus.jsx b/tgui/packages/tgui/interfaces/HiveStatus.jsx index 048eb1f6df7b..caecf087579f 100644 --- a/tgui/packages/tgui/interfaces/HiveStatus.jsx +++ b/tgui/packages/tgui/interfaces/HiveStatus.jsx @@ -113,6 +113,7 @@ const GeneralInformation = (props, context) => { total_xenos, burrowed_larva, evilution_level, + pylon_status, } = data; return ( @@ -142,6 +143,11 @@ const GeneralInformation = (props, context) => { Evilution: {evilution_level} + {pylon_status && ( + + {pylon_status} + + )} ); }; diff --git a/tgui/packages/tgui/interfaces/IcMedalsPanel.js b/tgui/packages/tgui/interfaces/IcMedalsPanel.js new file mode 100644 index 000000000000..a873ab5368df --- /dev/null +++ b/tgui/packages/tgui/interfaces/IcMedalsPanel.js @@ -0,0 +1,170 @@ +import { useBackend, useLocalState } from '../backend'; +import { Window } from '../layouts'; +import { classes } from 'common/react'; +import { NoticeBox, Section, Box, Button, Stack, Flex } from '../components'; + +export const IcMedalsPanel = (props, context) => { + const { act, data } = useBackend(context); + + const CONDUCT_MEDAL = 'distinguished conduct medal'; + const BRONZE_HEART_MEDAL = 'bronze heart medal'; + const VALOR_MEDAL = 'medal of valor'; + const HEROISM_MEDAL = 'medal of exceptional heroism'; + + const [recommendationMedalTypes, setRecommendationMedalTypes] = useLocalState( + context, + 'recommendation_types', + [] + ); + + return ( + + + + + + {data.recommendations.map((recommendation, index) => ( +
+ + + + + + + + + + + + + + + + + + + + + + + + Recommender: {recommendation.recommender_name} ( + {recommendation.recommender_rank}) + + Reason: {recommendation.reason} + + +
+ ))} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/MfdPanels/CameraPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/CameraPanel.tsx index f3a1197e9802..8bf5807b9fcd 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/CameraPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/CameraPanel.tsx @@ -11,9 +11,9 @@ export const CameraMfdPanel = (props: MfdProps, context) => { return ( act('nvg-enable') }, - { children: 'nvgoff', onClick: () => act('nvg-disable') }, + leftButtons={[ + { children: 'NV-ON', onClick: () => act('nvg-enable') }, + { children: 'NV-OFF', onClick: () => act('nvg-disable') }, ]} bottomButtons={[{ children: 'EXIT', onClick: () => setPanelState('') }]}> diff --git a/tgui/packages/tgui/interfaces/MfdPanels/EquipmentPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/EquipmentPanel.tsx index 05a500563b52..8f2cff9f1842 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/EquipmentPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/EquipmentPanel.tsx @@ -314,16 +314,6 @@ export const EquipmentMfdPanel = (props: MfdProps, context) => { return ( setPanelState('firemission'), - }, - {}, - {}, - ]} leftButtons={[ weap2 ? generateButton(weap2) : {}, weap1 ? generateButton(weap1) : {}, diff --git a/tgui/packages/tgui/interfaces/MfdPanels/FiremissionPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/FiremissionPanel.tsx index fd71dab8f045..0eaa43f53478 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/FiremissionPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/FiremissionPanel.tsx @@ -67,11 +67,7 @@ const FiremissionMfdHomePage = (props: MfdProps, context) => { const firemission = data.firemission_data.length > x ? data.firemission_data[x] : undefined; return { - children: firemission ? ( -
- FM {x + 1}
{firemission?.name} -
- ) : undefined, + children: firemission ?
FM {x + 1}
: undefined, onClick: () => setSelectedFm(firemission?.name), }; }; @@ -95,7 +91,6 @@ const FiremissionMfdHomePage = (props: MfdProps, context) => { leftButtons={left_firemissions} rightButtons={right_firemissions} topButtons={[ - {}, {}, {}, fmName @@ -110,10 +105,11 @@ const FiremissionMfdHomePage = (props: MfdProps, context) => { }, } : {}, + {}, { - children: , + children: fmOffset > 0 ? : undefined, onClick: () => { - if (fmOffset >= 1) { + if (fmOffset > 0) { setFmOffset(fmOffset - 1); } }, @@ -128,9 +124,12 @@ const FiremissionMfdHomePage = (props: MfdProps, context) => { {}, {}, { - children: , + children: + fmOffset + 10 < data.firemission_data?.length ? ( + + ) : undefined, onClick: () => { - if (fmOffset + 8 < data.firemission_data.length) { + if (fmOffset + 10 < data.firemission_data?.length) { setFmOffset(fmOffset + 1); } }, @@ -212,7 +211,10 @@ const ViewFiremissionMfdPanel = ( bottomButtons={[ { children: 'EXIT', - onClick: () => setPanelState(''), + onClick: () => { + setSelectedFm(undefined); + setPanelState(''); + }, }, ]} rightButtons={editFm === true ? rightButtons : []}> diff --git a/tgui/packages/tgui/interfaces/MfdPanels/FultonPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/FultonPanel.tsx index 05d33e51a8d1..5bb2f462d1a2 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/FultonPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/FultonPanel.tsx @@ -55,7 +55,7 @@ export const FultonMfdPanel = (props: MfdProps, context) => { { children: , onClick: () => { - if (fulltonOffset >= 1) { + if (fulltonOffset > 0) { setFultonOffset(fulltonOffset - 1); } }, @@ -70,6 +70,9 @@ export const FultonMfdPanel = (props: MfdProps, context) => { }, }, ]} + topButtons={[ + { children: 'EQUIP', onClick: () => setPanelState('equipment') }, + ]} bottomButtons={[ { children: 'EXIT', diff --git a/tgui/packages/tgui/interfaces/MfdPanels/MGPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/MGPanel.tsx index dc6df25e17c1..fac34ef3e49a 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/MGPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/MGPanel.tsx @@ -7,6 +7,7 @@ import { EquipmentContext, MGSpec } from './types'; const MgPanel = (props: DropshipEquipment) => { const mgData = props.data as MGSpec; + return ( @@ -44,6 +45,8 @@ export const MgMfdPanel = (props: MfdProps, context) => { const { setPanelState } = mfdState(context, props.panelStateId); const { equipmentState } = useEquipmentState(context, props.panelStateId); const mg = data.equipment_data.find((x) => x.mount_point === equipmentState); + const deployLabel = (mg?.data?.deployed ?? 0) === 1 ? 'RETRACT' : 'DEPLOY'; + return ( { ]} leftButtons={[ { - children: 'DEPLOY', + children: deployLabel, onClick: () => act('deploy-equipment', { equipment_id: mg?.mount_point }), }, diff --git a/tgui/packages/tgui/interfaces/MfdPanels/MedevacPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/MedevacPanel.tsx index 634b4ef2a52e..a804b4d92e59 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/MedevacPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/MedevacPanel.tsx @@ -48,6 +48,7 @@ const MedevacOccupant = (props: { data: MedevacTargets }) => ( ); export const MedevacMfdPanel = (props: MfdProps, context) => { + const { data, act } = useBackend(context); const [medevacOffset, setMedevacOffset] = useLocalState( context, `${props.panelStateId}_medevacoffset`, @@ -56,8 +57,6 @@ export const MedevacMfdPanel = (props: MfdProps, context) => { const { setPanelState } = mfdState(context, props.panelStateId); const { equipmentState } = useEquipmentState(context, props.panelStateId); - const { data, act } = useBackend(context); - const result = data.equipment_data.find( (x) => x.mount_point === equipmentState ); @@ -85,6 +84,7 @@ export const MedevacMfdPanel = (props: MfdProps, context) => { const all_targets = range(medevacOffset, medevacOffset + 8) .map((x) => data.medevac_targets[x]) .filter((x) => x !== undefined); + return ( { { children: , onClick: () => { - if (medevacOffset >= 1) { + if (medevacOffset > 0) { setMedevacOffset(medevacOffset - 1); } }, @@ -109,10 +109,7 @@ export const MedevacMfdPanel = (props: MfdProps, context) => { }, ]} topButtons={[ - { - children: 'EQUIP', - onClick: () => setPanelState('equipment'), - }, + { children: 'EQUIP', onClick: () => setPanelState('equipment') }, ]} bottomButtons={[ { @@ -168,7 +165,7 @@ export const MedevacMfdPanel = (props: MfdProps, context) => { {all_targets.map((x) => ( <> - + diff --git a/tgui/packages/tgui/interfaces/MfdPanels/MultifunctionDisplay.tsx b/tgui/packages/tgui/interfaces/MfdPanels/MultifunctionDisplay.tsx index 9df7eaffcde4..35f81b45ed3e 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/MultifunctionDisplay.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/MultifunctionDisplay.tsx @@ -13,6 +13,7 @@ export interface MfdProps { rightButtons?: Array; bottomButtons?: Array; children?: InfernoNode; + otherPanelStateId?: string; } export const MfdButton = (props: ButtonProps, context) => { diff --git a/tgui/packages/tgui/interfaces/MfdPanels/SentryPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/SentryPanel.tsx index d8ea220ec986..c5f9bd04c1b0 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/SentryPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/SentryPanel.tsx @@ -57,6 +57,7 @@ export const SentryMfdPanel = (props: MfdProps, context) => { ); const deployLabel = (sentry?.data?.deployed ?? 0) === 1 ? 'RETRACT' : 'DEPLOY'; + return ( { act('deploy-equipment', { equipment_id: sentry?.mount_point }), }, { - children: 'CAMERA', + children: sentry?.data?.camera_available ? 'CAMERA' : undefined, onClick: () => act('set-camera-sentry', { equipment_id: sentry?.mount_point }), }, diff --git a/tgui/packages/tgui/interfaces/MfdPanels/SpotlightPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/SpotlightPanel.tsx index ce241420497e..f3a5884f89ca 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/SpotlightPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/SpotlightPanel.tsx @@ -33,6 +33,9 @@ export const SpotlightMfdPanel = (props: MfdProps, context) => { const spotlight = data.equipment_data.find( (x) => x.mount_point === equipmentState ); + const deployLabel = + (spotlight?.data?.deployed ?? 0) === 1 ? 'DISABLE' : 'ENABLE'; + return ( { ]} leftButtons={[ { - children: 'DEPLOY', + children: deployLabel, onClick: () => act('deploy-equipment', { equipment_id: spotlight?.mount_point }), }, diff --git a/tgui/packages/tgui/interfaces/MfdPanels/SupportPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/SupportPanel.tsx index 1eca123173b0..5767b4960840 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/SupportPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/SupportPanel.tsx @@ -36,6 +36,9 @@ export const SupportMfdPanel = (props: MfdProps, context) => { return ( setPanelState('equipment') }, + ]} bottomButtons={[ { children: 'EXIT', diff --git a/tgui/packages/tgui/interfaces/MfdPanels/TargetAquisition.tsx b/tgui/packages/tgui/interfaces/MfdPanels/TargetAquisition.tsx index 49f22db18104..ebaacfb90337 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/TargetAquisition.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/TargetAquisition.tsx @@ -59,7 +59,7 @@ const useTargetFiremissionSelect = (context) => { }; }; -const useTargetOffset = (context, panelId: string) => { +export const useTargetOffset = (context, panelId: string) => { const [data, set] = useLocalState(context, `${panelId}_targetOffset`, 0); return { targetOffset: data, @@ -79,7 +79,7 @@ const useTargetSubmenu = (context, panelId: string) => { }; }; -const TargetLines = (props: { panelId: string }, context) => { +export const TargetLines = (props: { panelId: string }, context) => { const { data } = useBackend< EquipmentContext & FiremissionContext & TargetContext >(context); @@ -140,6 +140,34 @@ const leftButtonGenerator = (context, panelId: string) => { useTargetFiremissionSelect(context); const { weaponSelected, setWeaponSelected } = useWeaponSelectedState(context); const weapons = data.equipment_data.filter((x) => x.is_weapon); + const [fmOffset] = useLocalState( + context, + `${panelId}_fm_strike_select_offset`, + 0 + ); + const firemission_mapper = (x: number) => { + if (x === 0) { + return { + children: 'CANCEL', + onClick: () => { + setFiremissionSelected(undefined); + setStrikeMode(undefined); + setLeftButtonMode(undefined); + }, + }; + } + x -= 1; + const firemission = + data.firemission_data.length > x ? data.firemission_data[x] : undefined; + return { + children: firemission ?
FM {x + 1}
: undefined, + onClick: () => { + setFiremissionSelected(data.firemission_data[x]); + setLeftButtonMode(undefined); + }, + }; + }; + if (leftButtonMode === undefined) { return [ { @@ -154,26 +182,30 @@ const leftButtonGenerator = (context, panelId: string) => { } if (leftButtonMode === 'STRIKE') { if (strikeMode === 'weapon' && weaponSelected === undefined) { - return weapons.map((x) => { - return { - children: x.shorthand, + const cancelButton = [ + { + children: 'CANCEL', onClick: () => { - setWeaponSelected(x.mount_point); + setFiremissionSelected(undefined); + setStrikeMode(undefined); setLeftButtonMode(undefined); }, - }; - }); + }, + ]; + return cancelButton.concat( + weapons.map((x) => { + return { + children: x.shorthand, + onClick: () => { + setWeaponSelected(x.eqp_tag); + setLeftButtonMode(undefined); + }, + }; + }) + ); } if (strikeMode === 'firemission' && firemissionSelected === undefined) { - return data.firemission_data.map((x) => { - return { - children: x.name, - onClick: () => { - setFiremissionSelected(x); - setLeftButtonMode(undefined); - }, - }; - }); + return range(fmOffset, fmOffset + 5).map(firemission_mapper); } return [ { children: 'CANCEL', onClick: () => setLeftButtonMode(undefined) }, @@ -230,7 +262,7 @@ const leftButtonGenerator = (context, panelId: string) => { return []; }; -const lazeMapper = (context, offset) => { +export const lazeMapper = (context, offset) => { const { act, data } = useBackend(context); const { setSelectedTarget } = useLazeTarget(context); @@ -271,6 +303,21 @@ const lazeMapper = (context, offset) => { }; }; +export const getLastTargetName = (data) => { + const target = data.targets_data[data.targets_data.length - 1] ?? undefined; + const isDebug = target?.target_name.includes('debug'); + if (isDebug) { + return 'debug ' + target.target_name.split(' ')[3]; + } + const label = target?.target_name.split(' ')[0] ?? ''; + const squad = label[0] ?? undefined; + const number = label.split('-')[1] ?? undefined; + + return squad !== undefined && number !== undefined + ? `${squad}-${number}` + : target?.target_name; +}; + export const TargetAquisitionMfdPanel = (props: MfdProps, context) => { const { panelStateId } = props; @@ -288,45 +335,37 @@ export const TargetAquisitionMfdPanel = (props: MfdProps, context) => { context, panelStateId ); + const [fmOffset, setFmOffset] = useLocalState( + context, + `${props.panelStateId}_fm_strike_select_offset`, + 0 + ); + const { leftButtonMode } = useTargetSubmenu(context, props.panelStateId); const { fmXOffsetValue } = useFiremissionXOffsetValue(context); const { fmYOffsetValue } = useFiremissionYOffsetValue(context); - const lazes = range(0, 5).map((x) => - x > data.targets_data.length ? undefined : data.targets_data[x] - ); - const strikeConfigLabel = strikeMode === 'weapon' - ? data.equipment_data.find((x) => x.mount_point === weaponSelected)?.name + ? data.equipment_data.find((x) => x.eqp_tag === weaponSelected)?.name : firemissionSelected !== undefined ? data.firemission_data.find( (x) => x.mission_tag === firemissionSelected.mission_tag )?.name : 'NONE'; - const lazeIndex = lazes.findIndex((x) => x?.target_tag === selectedTarget); - const strikeReady = strikeMode !== undefined && lazeIndex !== -1; + const strikeReady = + selectedTarget !== undefined && + strikeDirection !== undefined && + ((strikeMode === 'weapon' && + weaponSelected !== undefined && + data.equipment_data.find((x) => x.eqp_tag === weaponSelected)) || + (strikeMode === 'firemission' && firemissionSelected !== undefined)); const targets = range(targetOffset, targetOffset + 5).map((x) => lazeMapper(context, x) ); - const getLastName = () => { - const target = data.targets_data[data.targets_data.length - 1] ?? undefined; - const isDebug = target?.target_name.includes('debug'); - if (isDebug) { - return 'debug ' + target.target_name.split(' ')[3]; - } - const label = target?.target_name.split(' ')[0] ?? ''; - const squad = label[0] ?? undefined; - const number = label.split('-')[1] ?? undefined; - - return squad !== undefined && number !== undefined - ? `${squad}-${number}` - : target?.target_name; - }; - if ( selectedTarget && data.targets_data.find((x) => `${x.target_tag}` === `${selectedTarget}`) === @@ -361,7 +400,20 @@ export const TargetAquisitionMfdPanel = (props: MfdProps, context) => { } }, }, - {}, + { + children: + leftButtonMode === 'STRIKE' && + strikeMode === 'firemission' && + firemissionSelected === undefined && + fmOffset > 0 ? ( + + ) : undefined, + onClick: () => { + if (fmOffset > 0) { + setFmOffset(fmOffset - 1); + } + }, + }, {}, {}, { @@ -378,16 +430,29 @@ export const TargetAquisitionMfdPanel = (props: MfdProps, context) => { children: 'EXIT', onClick: () => setPanelState(''), }, - {}, + { + children: + leftButtonMode === 'STRIKE' && + strikeMode === 'firemission' && + firemissionSelected === undefined && + fmOffset + 4 < data.firemission_data?.length ? ( + + ) : undefined, + onClick: () => { + if (fmOffset + 4 < data.firemission_data?.length) { + setFmOffset(fmOffset + 1); + } + }, + }, {}, {}, { children: - targetOffset < lazes.length ? ( + targetOffset + 5 < data.targets_data?.length ? ( ) : undefined, onClick: () => { - if (targetOffset < lazes.length) { + if (targetOffset + 5 < data.targets_data?.length) { setTargetOffset(targetOffset + 1); } }, @@ -443,8 +508,9 @@ export const TargetAquisitionMfdPanel = (props: MfdProps, context) => {

Target selected:{' '} - {lazes.find((x) => x?.target_tag === selectedTarget) - ?.target_name ?? 'NONE'} + {data.targets_data.find( + (x) => x?.target_tag === selectedTarget + )?.target_name ?? 'NONE'}

@@ -502,7 +568,7 @@ export const TargetAquisitionMfdPanel = (props: MfdProps, context) => { LATEST - {getLastName()} + {getLastTargetName(data)} )} diff --git a/tgui/packages/tgui/interfaces/MfdPanels/WeaponPanel.tsx b/tgui/packages/tgui/interfaces/MfdPanels/WeaponPanel.tsx index 090001aa3ac9..cec542fdc3d1 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/WeaponPanel.tsx +++ b/tgui/packages/tgui/interfaces/MfdPanels/WeaponPanel.tsx @@ -1,10 +1,11 @@ import { range } from 'common/collections'; import { useBackend } from '../../backend'; -import { Box, Stack } from '../../components'; +import { Box, Icon, Stack } from '../../components'; import { DropshipEquipment } from '../DropshipWeaponsConsole'; import { MfdProps, MfdPanel } from './MultifunctionDisplay'; import { mfdState, useWeaponState } from './stateManagers'; import { LazeTarget } from './types'; +import { getLastTargetName, lazeMapper, TargetLines, useTargetOffset } from './TargetAquisition'; const EmptyWeaponPanel = (props, context) => { return
Nothing Listed
; @@ -14,30 +15,12 @@ interface EquipmentContext { targets_data: Array; } -const getLazeButtonProps = (context) => { - const { act, data } = useBackend(context); - const lazes = range(0, 5).map((x) => - x > data.targets_data.length ? undefined : data.targets_data[x] - ); - const get_laze = (index: number) => { - const laze = lazes.find((_, i) => i === index); - if (laze === undefined) { - return { - children: '', - onClick: () => act('set-camera', { equipment_id: null }), - }; - } - return { - children: laze?.target_name.split(' ')[0] ?? 'NONE', - onClick: laze - ? () => act('set-camera', { 'equipment_id': laze.target_tag }) - : undefined, - }; - }; - return [get_laze(0), get_laze(1), get_laze(2), get_laze(3), get_laze(4)]; -}; +const WeaponPanel = ( + props: { panelId: string; equipment: DropshipEquipment }, + context +) => { + const { data } = useBackend(context); -const WeaponPanel = (props: { equipment: DropshipEquipment }, context) => { return ( @@ -45,7 +28,7 @@ const WeaponPanel = (props: { equipment: DropshipEquipment }, context) => { ACTIONS - {false && ( + {true && ( { - - - - SELECT - - - TARGETS - - - - - - - - + + + {data.targets_data.length === 0 && ( + + + NO TARGETS + + + )} + {data.targets_data.length > 0 && ( + + + SELECT + + + TARGETS + + + {Math.min(5, data.targets_data.length)} of{' '} + {data.targets_data.length} + + {data.targets_data.length > 0 && ( + <> + + LATEST + + + {getLastTargetName(data)} + + + )} + + )} + + @@ -146,7 +135,14 @@ export const WeaponMfdPanel = (props: MfdProps, context) => { const { setPanelState } = mfdState(context, props.panelStateId); const { weaponState } = useWeaponState(context, props.panelStateId); const { data, act } = useBackend(context); + const { targetOffset, setTargetOffset } = useTargetOffset( + context, + props.panelStateId + ); const weap = data.equipment_data.find((x) => x.mount_point === weaponState); + const targets = range(targetOffset, targetOffset + 5).map((x) => + lazeMapper(context, x) + ); return ( { onClick: () => setPanelState(''), }, {}, + {}, + {}, + { + children: + targetOffset + 5 < data.targets_data?.length ? ( + + ) : undefined, + onClick: () => { + if (targetOffset + 5 < data.targets_data?.length) { + setTargetOffset(targetOffset + 1); + } + }, + }, ]} topButtons={[ + { children: 'EQUIP', onClick: () => setPanelState('equipment') }, + {}, + {}, + {}, { - children: 'EQUIP', - onClick: () => setPanelState('equipment'), + children: targetOffset > 0 ? : undefined, + onClick: () => { + if (targetOffset > 0) { + setTargetOffset(targetOffset - 1); + } + }, }, ]} - rightButtons={getLazeButtonProps(context)}> + rightButtons={targets}> - {weap ? : } + {weap ? ( + + ) : ( + + )} ); diff --git a/tgui/packages/tgui/interfaces/MfdPanels/stateManagers.ts b/tgui/packages/tgui/interfaces/MfdPanels/stateManagers.ts index e639938eabf8..4b1729dce0f7 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/stateManagers.ts +++ b/tgui/packages/tgui/interfaces/MfdPanels/stateManagers.ts @@ -60,6 +60,17 @@ export const mfdState = (context, panelId: string) => { }; }; +export const otherMfdState = (context, otherPanelId: string | undefined) => { + const [data] = useSharedState( + context, + `${otherPanelId}_panelstate`, + '' + ); + return { + otherPanelState: data, + }; +}; + export const useWeaponState = (context, panelId: string) => { const [data, set] = useSharedState( context, diff --git a/tgui/packages/tgui/interfaces/MfdPanels/types.ts b/tgui/packages/tgui/interfaces/MfdPanels/types.ts index 78e7c3314b30..c20449ece428 100644 --- a/tgui/packages/tgui/interfaces/MfdPanels/types.ts +++ b/tgui/packages/tgui/interfaces/MfdPanels/types.ts @@ -66,7 +66,7 @@ export type SentrySpec = { kills: number; iff_status: string[]; camera_available: number; - deployed: number; + deployed: 0 | 1; }; export type SpotlightSpec = { diff --git a/tgui/packages/tgui/interfaces/NoticeBoard.tsx b/tgui/packages/tgui/interfaces/NoticeBoard.tsx new file mode 100644 index 000000000000..6cc761c0fb6f --- /dev/null +++ b/tgui/packages/tgui/interfaces/NoticeBoard.tsx @@ -0,0 +1,56 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../backend'; +import { Box, Button, Section, Stack } from '../components'; +import { Window } from '../layouts'; + +type Data = { + allowed: BooleanLike; + items: { ref: string; name: string }[]; +}; + +export const NoticeBoard = (props, context) => { + const { act, data } = useBackend(context); + const { allowed, items = [] } = data; + + return ( + + + {!items.length ? ( +
+ + The notice board is empty! + +
+ ) : ( + items.map((item) => ( + + + {item.name} + + +