diff --git a/code/controllers/subsystems/initialization/holomap.dm b/code/controllers/subsystems/initialization/holomap.dm index 66fe10cb61c..bd306a306dc 100644 --- a/code/controllers/subsystems/initialization/holomap.dm +++ b/code/controllers/subsystems/initialization/holomap.dm @@ -43,7 +43,10 @@ SUBSYSTEM_DEF(holomap) /turf/unsimulated/wall, /turf/unsimulated/floor, )) - + var/static/list/outer_hull_tcache = typecacheof(list( + /turf/simulated/wall/shuttle/scc_space_ship, + /turf/unsimulated/wall/shuttle/scc_space_ship + )) var/static/list/rock_tcache = typecacheof(list( /turf/simulated/mineral, /turf/simulated/floor/exoplanet/asteroid, @@ -89,11 +92,21 @@ SUBSYSTEM_DEF(holomap) var/area/A = T.loc var/Ttype = T.type - if (A.area_flags & AREA_FLAG_HIDE_FROM_HOLOMAP) + if(A.area_flags & AREA_FLAG_HIDE_FROM_HOLOMAP) + if(outer_hull_tcache[Ttype] || (length(T.contents) && (locate(/obj/structure/shuttle_part/scc_space_ship, T) || locate(/obj/structure/window/shuttle/scc_space_ship, T)))) + canvas.DrawBox(HOLOMAP_OBSTACLE + "DD", T.x, T.y) + + if(length(T.contents) && locate(/obj/machinery/door/airlock/external, T)) + canvas.DrawBox(HOLOMAP_PATH + "DD", T.x, T.y) + + if(!istype(A, /area/horizon/maintenance) && !istype(A, /area/horizon/weapons) && !istype(A, /area/horizon/ai) && !istype(A, /area/horizon/command/bridge/aibunker) && !istype(A, /area/horizon/command/bridge/selfdestruct)) + if(path_tcache[Ttype] || (length(T.contents) && locate(/obj/structure/grille, T))) + canvas.DrawBox(HOLOMAP_PATH + "DD", T.x, T.y) + else + continue + if(rock_tcache[Ttype]) continue - if (rock_tcache[Ttype]) - continue - if (obstacle_tcache[Ttype] || (length(T.contents) && locate(/obj/structure/grille, T))) + if(obstacle_tcache[Ttype] || (length(T.contents) && locate(/obj/structure/grille, T))) canvas.DrawBox(HOLOMAP_OBSTACLE + "DD", T.x, T.y) else if(path_tcache[Ttype] || (length(T.contents) && locate(/obj/structure/lattice/catwalk, T))) canvas.DrawBox(HOLOMAP_PATH + "DD", T.x, T.y) diff --git a/code/datums/langchat/langchat.dm b/code/datums/langchat/langchat.dm index a2c4ce351e6..1123336d208 100644 --- a/code/datums/langchat/langchat.dm +++ b/code/datums/langchat/langchat.dm @@ -27,16 +27,28 @@ #define langchat_client_enabled(M) (M && M.client && M.client.prefs && (M.client.prefs.toggles_secondary & FLOATING_MESSAGES)) -/atom/var/image/langchat_image -/atom/var/list/mob/langchat_listeners +/* + * Duplicate vars and logic created for untranslated images for the sake of getting an untranslated langchat to display for listeners who do not understand + * the language being spoken. Someone could certainly think of cleaner ways to do this, but for want of a better solution right now, it has been implemented + * in this rote manner to make it easier to strip out in future if it needs replaced. + */ -///Hides the image, if one exists. Do not null the langchat image; it is rotated when the mob is buckled or proned to maintain text orientation. -/atom/proc/langchat_drop_image() +/atom/var/image/langchat_image +/atom/var/image/langchat_image_untranslated +/atom/var/list/mob/langchat_listeners +/atom/var/list/mob/langchat_listeners_untranslated + +/// Hides the images, if they exist. Do not null the langchat images; they are rotated when the mob is buckled or proned to maintain text orientation. +/atom/proc/langchat_drop_images() if(langchat_listeners) for(var/mob/M in langchat_listeners) if(M.client) M.client.images -= langchat_image + for(var/mob/M in langchat_listeners_untranslated) + if(M.client) + M.client.images -= langchat_image_untranslated langchat_listeners = null + langchat_listeners_untranslated = null /atom/proc/get_maxptext_x_offset(image/maptext_image) return (world.icon_size / 2) - (maptext_image.maptext_width / 2) @@ -47,7 +59,7 @@ /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. +/// Creates the image if it doesn't exist, resets settings that are modified by speech procs. /atom/proc/langchat_make_image(override_color = null) if(!langchat_image) langchat_image = image(null, src) @@ -74,21 +86,167 @@ if(new_image) langchat_image.maptext_x += (icon_size - 32) / 2 +/// Creates the (untranslated) image if it doesn't exist, resets settings that are modified by speech procs. +/atom/proc/langchat_make_image_untranslated(override_color = null) + if(!langchat_image_untranslated) + langchat_image_untranslated = image(null, src) + langchat_image_untranslated.layer = 20 + langchat_image_untranslated.plane = RUNECHAT_PLANE + langchat_image_untranslated.appearance_flags = NO_CLIENT_COLOR|KEEP_APART|RESET_COLOR|RESET_TRANSFORM + langchat_image_untranslated.maptext_y = langchat_height + langchat_image_untranslated.maptext_height = 64 + langchat_image_untranslated.maptext_y -= LANGCHAT_MESSAGE_POP_Y_SINK + langchat_image_untranslated.maptext_x = get_maxptext_x_offset(langchat_image_untranslated) + + langchat_image_untranslated.pixel_y = 0 + langchat_image_untranslated.alpha = 0 + langchat_image_untranslated.color = override_color ? override_color : langchat_color + if(appearance_flags & PIXEL_SCALE) + langchat_image_untranslated.appearance_flags |= PIXEL_SCALE + +/mob/langchat_make_image_untranslated(override_color = null) + var/new_image = FALSE + if(!langchat_image_untranslated) + new_image = TRUE + . = ..() + // Recenter for icons more than 32 wide + if(new_image) + langchat_image_untranslated.maptext_x += (icon_size - 32) / 2 + /mob/abstract/ghost/langchat_make_image(override_color = null) if(!override_color) override_color = "#c51fb7" . = ..() langchat_image.appearance_flags |= RESET_ALPHA -/atom/proc/langchat_speech(message, list/listeners, language, override_color, skip_language_check = FALSE, animation_style = LANGCHAT_DEFAULT_POP, list/additional_styles = list("langchat")) - langchat_drop_image() +/atom/proc/langchat_speech(message, list/listeners, datum/language/language, override_color, skip_language_check = FALSE, animation_style = LANGCHAT_DEFAULT_POP, list/additional_styles = list("langchat")) + langchat_drop_images() langchat_make_image(override_color) - var/image/r_icon - var/use_mob_style = TRUE + langchat_make_image_untranslated(override_color) + + langchat_listeners = listeners + langchat_listeners_untranslated = list() + var/mob/listener + // Listener list management. + for(listener in langchat_listeners) + // Remove those who have the langchat_client disabled or who are deaf. + if(!langchat_client_enabled(listener) || listener.ear_deaf) + langchat_listeners -= listener + continue + // Handle listeners who don't understand the language being spoken. + if(!skip_language_check && !listener.say_understands(src, language)) + langchat_listeners_untranslated += listener + langchat_listeners -= listener + + // Generate the translated langchat_image. + langchat_image.maptext = generate_text_image(message, additional_styles = additional_styles) + langchat_image.maptext_width = LANGCHAT_WIDTH + langchat_image.maptext_x = get_maxptext_x_offset(langchat_image) + for(var/mob/comprehending_listener in langchat_listeners) + comprehending_listener.client.images += langchat_image + + // Generate the untranslated langchat_image. Note that we have to loop through confused listeners first here, as some + // might know languages that confer partial comprehension, and that would result in a unique langchat image. + for(var/mob/confused_listener in langchat_listeners_untranslated) + langchat_image_untranslated.maptext = generate_text_image(message, language, additional_styles, confused_listener.languages) + langchat_image_untranslated.maptext_width = LANGCHAT_WIDTH + langchat_image_untranslated.maptext_x = get_maxptext_x_offset(langchat_image_untranslated) + confused_listener.client.images += langchat_image_untranslated + + var/timer = (length(message) / LANGCHAT_LONGEST_TEXT) * 4 SECONDS + 2 SECONDS + + if(isturf(loc)) + langchat_image.loc = src + if(langchat_image_untranslated) + langchat_image_untranslated.loc = src + else + langchat_image.loc = recursive_holder_check(src) + if(langchat_image_untranslated) + langchat_image_untranslated.loc = recursive_holder_check(src) + + animate_style(langchat_image, animation_style) + if(langchat_listeners_untranslated) + animate_style(langchat_image_untranslated, animation_style) + + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, langchat_drop_images), language), timer, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) + +/atom/proc/langchat_long_speech(message, list/listeners, datum/language/language, override_color, skip_language_check = FALSE) + langchat_drop_images() + langchat_make_image() + langchat_make_image_untranslated(override_color) + + var/text_left = null + var/truncated_message = message + + langchat_listeners = listeners + var/mob/listener + // Listener list management. + for(listener in langchat_listeners) + // Remove those who have the langchat_client disabled or who are deaf. + if(!langchat_client_enabled(listener) || listener.ear_deaf) + langchat_listeners -= listener + // Handle listeners who don't understand the language being spoken. + if(!skip_language_check && !listener.say_understands(src, language)) + langchat_listeners_untranslated += listener + langchat_listeners -= listener + + if(length(langchat_listeners_untranslated)) + langchat_make_image_untranslated(override_color) + + if(length(message) > LANGCHAT_LONGEST_TEXT) + truncated_message = copytext_char(message, 1, LANGCHAT_LONGEST_TEXT - 5) + "..." + text_left = "..." + copytext_char(message, LANGCHAT_LONGEST_TEXT - 5) + var/timer = 6 SECONDS + if(text_left) + timer = 4 SECONDS + truncated_message = "[truncated_message]" + + // Generate the translated langchat_image. + langchat_image.maptext = generate_text_image(truncated_message) + langchat_image.maptext_width = LANGCHAT_WIDTH + langchat_image.maptext_x = get_maxptext_x_offset(langchat_image) + for(var/mob/comprehending_listener in langchat_listeners) + comprehending_listener.client.images += langchat_image + + // Generate the untranslated langchat_image. Note that we have to loop through confused listeners first here, as some + // might know languages that confer partial comprehension, and that would result in a unique langchat image. + for(var/mob/confused_listener in langchat_listeners_untranslated) + langchat_image_untranslated.maptext = confused_listener.generate_text_image(truncated_message, src) + langchat_image_untranslated.maptext_width = LANGCHAT_WIDTH + langchat_image_untranslated.maptext_x = get_maxptext_x_offset(langchat_image_untranslated) + confused_listener.client.images += langchat_image_untranslated + + if(isturf(loc)) + langchat_image.loc = src + if(langchat_image_untranslated) + langchat_image_untranslated.loc = src + else + langchat_image.loc = recursive_holder_check(src) + if(langchat_image_untranslated) + langchat_image_untranslated.loc = recursive_holder_check(src) + + animate_style(langchat_image) + if(langchat_listeners_untranslated) + animate_style(langchat_image_untranslated) + + if(text_left) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, langchat_long_speech), text_left, listeners, language), timer, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT) + else + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, langchat_drop_images), language), timer, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT) + +/** + * Generates the maptext_image, translated or untranslated, for a given message. + */ +/atom/proc/generate_text_image(message, datum/language/language = null, list/additional_styles = list("langchat"), list/languages = null) var/text_to_display = message + var/use_mob_style = TRUE + var/image/r_icon + + if(language) + message = language.scramble(message, languages) + if(length(text_to_display) > LANGCHAT_LONGEST_TEXT) text_to_display = copytext_char(text_to_display, 1, LANGCHAT_LONGEST_TEXT + 1) + "..." - var/timer = (length(text_to_display) / LANGCHAT_LONGEST_TEXT) * 4 SECONDS + 2 SECONDS if(additional_styles.Find("emote")) additional_styles.Remove("emote") use_mob_style = FALSE @@ -98,74 +256,30 @@ r_icon = image('icons/mob/chat_icons.dmi', icon_state = "radio") if(r_icon) text_to_display = "\icon[r_icon]&zwsp;[text_to_display]" + text_to_display = "[text_to_display]" + return text_to_display - langchat_image.maptext = text_to_display - langchat_image.maptext_width = LANGCHAT_WIDTH - langchat_image.maptext_x = get_maxptext_x_offset(langchat_image) - - langchat_listeners = listeners - for(var/mob/M in langchat_listeners) - if(langchat_client_enabled(M) && !M.ear_deaf && (skip_language_check || M.say_understands(src, language))) - M.client.images += langchat_image - - if(isturf(loc)) - langchat_image.loc = src - else - langchat_image.loc = recursive_holder_check(src) - - switch(animation_style) - if(LANGCHAT_DEFAULT_POP) - langchat_image.alpha = 0 - animate(langchat_image, pixel_y = langchat_image.pixel_y + LANGCHAT_MESSAGE_POP_Y_SINK, alpha = LANGCHAT_MAX_ALPHA, time = LANGCHAT_MESSAGE_POP_TIME) - if(LANGCHAT_PANIC_POP) - langchat_image.alpha = LANGCHAT_MAX_ALPHA - animate(langchat_image, pixel_y = langchat_image.pixel_y + LANGCHAT_MESSAGE_PANIC_POP_Y_SINK, time = LANGCHAT_MESSAGE_PANIC_POP_TIME) - animate(pixel_x = langchat_image.pixel_x - LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) - for(var/i = 1 to LANGCHAT_MESSAGE_PANIC_SHAKE_TIMES) - animate(pixel_x = langchat_image.pixel_x + 2*LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = 2*LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) - animate(pixel_x = langchat_image.pixel_x - 2*LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) - animate(pixel_x = langchat_image.pixel_x + LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) - if(LANGCHAT_FAST_POP) - langchat_image.alpha = 0 - animate(langchat_image, pixel_y = langchat_image.pixel_y + LANGCHAT_MESSAGE_FAST_POP_Y_SINK, alpha = LANGCHAT_MAX_ALPHA, time = LANGCHAT_MESSAGE_FAST_POP_TIME) - - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, langchat_drop_image), language), timer, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) - -/atom/proc/langchat_long_speech(message, list/listeners, language) - langchat_drop_image() - langchat_make_image() - - var/text_left = null - var/text_to_display = message - - if(length(message) > LANGCHAT_LONGEST_TEXT) - text_to_display = copytext_char(message, 1, LANGCHAT_LONGEST_TEXT - 5) + "..." - text_left = "..." + copytext_char(message, LANGCHAT_LONGEST_TEXT - 5) - var/timer = 6 SECONDS - if(text_left) - timer = 4 SECONDS - text_to_display = "[text_to_display]" - - langchat_image.maptext = text_to_display - langchat_image.maptext_width = LANGCHAT_WIDTH * 2 - langchat_image.maptext_x = get_maxptext_x_offset(langchat_image) - - langchat_listeners = listeners - for(var/mob/M in langchat_listeners) - if(langchat_client_enabled(M) && !M.ear_deaf && M.say_understands(src, language)) - M.client.images += langchat_image - - if(isturf(loc)) - langchat_image.loc = src - else - langchat_image.loc = recursive_holder_check(src) - - animate(langchat_image, pixel_y = langchat_image.pixel_y + LANGCHAT_MESSAGE_POP_Y_SINK, alpha = LANGCHAT_MAX_ALPHA, time = LANGCHAT_MESSAGE_POP_TIME) - if(text_left) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, langchat_long_speech), text_left, listeners, language), timer, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT) - else - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, langchat_drop_image), language), timer, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT) +/** + * Animate the given maptext_image. + */ +/atom/proc/animate_style(var/image/langchat_image, animation_style = LANGCHAT_DEFAULT_POP) + if(langchat_image) + switch(animation_style) + if(LANGCHAT_DEFAULT_POP) + langchat_image.alpha = 0 + animate(langchat_image, pixel_y = langchat_image.pixel_y + LANGCHAT_MESSAGE_POP_Y_SINK, alpha = LANGCHAT_MAX_ALPHA, time = LANGCHAT_MESSAGE_POP_TIME) + if(LANGCHAT_PANIC_POP) + langchat_image.alpha = LANGCHAT_MAX_ALPHA + animate(langchat_image, pixel_y = langchat_image.pixel_y + LANGCHAT_MESSAGE_PANIC_POP_Y_SINK, time = LANGCHAT_MESSAGE_PANIC_POP_TIME) + animate(pixel_x = langchat_image.pixel_x - LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) + for(var/i = 1 to LANGCHAT_MESSAGE_PANIC_SHAKE_TIMES) + animate(pixel_x = langchat_image.pixel_x + 2*LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = 2*LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) + animate(pixel_x = langchat_image.pixel_x - 2*LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) + animate(pixel_x = langchat_image.pixel_x + LANGCHAT_MESSAGE_PANIC_SHAKE_SIZE, time = LANGCHAT_MESSAGE_PANIC_SHAKE_TIME_TAKEN, easing = CUBIC_EASING) + if(LANGCHAT_FAST_POP) + langchat_image.alpha = 0 + animate(langchat_image, pixel_y = langchat_image.pixel_y + LANGCHAT_MESSAGE_FAST_POP_Y_SINK, alpha = LANGCHAT_MAX_ALPHA, time = LANGCHAT_MESSAGE_FAST_POP_TIME) /** Displays image to a single listener after it was built above eg. for chaining different game logic than speech code This does just that, doesn't check deafness or language! Do what you will in that regard **/ diff --git a/code/datums/radio/frequency.dm b/code/datums/radio/frequency.dm index 6dbbc282a96..20456303893 100644 --- a/code/datums/radio/frequency.dm +++ b/code/datums/radio/frequency.dm @@ -17,7 +17,7 @@ for (var/next_filter in devices) send_to_filter(source, signal, next_filter, start_point, range) -//Sends a signal to all machines belonging to a given filter. Should be called by post_signal() +/// Sends a signal to all machines belonging to a given filter. Should be called by post_signal() /datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, filter, turf/start_point = null, range = null) if (range && !start_point) return diff --git a/code/datums/radio/signal.dm b/code/datums/radio/signal.dm index 8a0d06d7034..8a770992759 100644 --- a/code/datums/radio/signal.dm +++ b/code/datums/radio/signal.dm @@ -1,11 +1,17 @@ /datum/signal + /// The object (usually a radio, but also PDAs, etc.) which created the signal. var/obj/source + /// How the signal is being transmitted, can be considered like 'range.' See 'code/__DEFINES/radio.dm' for details. var/transmission_method = TRANSMISSION_WIRE + var/list/data = list() + + /// Whether or not any random receiver can pick this signal up, or if it requires an encryption key. If encrypted with no key, the message is rejected and ignored on initial receipt (can_receive). var/encryption + /// The frequency being broadcast on. var/frequency = 0 /datum/signal/proc/copy_from(datum/signal/model) diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index ee09987508e..26722db17d0 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -4,35 +4,35 @@ /datum/announcement var/title = "Attention" var/announcer = "" - var/log = 0 + var/log = FALSE var/sound - var/newscast = 0 - var/print = 0 + var/newscast = FALSE + var/print = FALSE var/channel_name = "Announcements" var/announcement_type = "Announcement" -/datum/announcement/New(var/do_log = 1, var/new_sound = null, var/do_newscast = 0, var/do_print = 0) +/datum/announcement/New(var/do_log = TRUE, var/new_sound = null, var/do_newscast = FALSE, var/do_print = FALSE) sound = new_sound log = do_log newscast = do_newscast print = do_print -/datum/announcement/priority/New(var/do_log = 1, var/new_sound = 'sound/misc/announcements/notice.ogg', var/do_newscast = 0, var/do_print = 0) +/datum/announcement/priority/New(var/do_log = TRUE, var/new_sound = 'sound/misc/announcements/notice.ogg', var/do_newscast = TRUE, var/do_print = FALSE) ..(do_log, new_sound, do_newscast, do_print) title = "Priority Announcement" announcement_type = "Priority Announcement" -/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = 'sound/misc/announcements/notice.ogg', var/do_newscast = 0, var/do_print = 0) +/datum/announcement/priority/command/New(var/do_log = TRUE, var/new_sound = 'sound/misc/announcements/notice.ogg', var/do_newscast = FALSE, var/do_print = FALSE) ..(do_log, new_sound, do_newscast, do_print) title = "[SSatlas.current_map.boss_name] Update" announcement_type = "[SSatlas.current_map.boss_name] Update" -/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = 'sound/misc/announcements/notice.ogg', var/do_newscast = 0, var/do_print = 0) +/datum/announcement/priority/security/New(var/do_log = TRUE, var/new_sound = 'sound/misc/announcements/notice.ogg', var/do_newscast = TRUE, var/do_print = FALSE) ..(do_log, new_sound, do_newscast, do_print) title = "Security Announcement" announcement_type = "Security Announcement" -/datum/announcement/proc/Announce(var/message, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, var/do_print = 0, var/zlevels = SSatlas.current_map.contact_levels) +/datum/announcement/proc/Announce(var/message, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, var/do_print = FALSE, var/zlevels = SSatlas.current_map.contact_levels) if(!message) return var/message_title = length(new_title) ? new_title : title diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index 9abe556a6fe..690c081af3d 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -1,4 +1,4 @@ -GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newscast = 1)) +GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newscast = TRUE)) /datum/job/captain title = "Captain" diff --git a/code/game/machinery/vending/engitech.dm b/code/game/machinery/vending/engitech.dm index 1359ee45ae3..8cfa9850da6 100644 --- a/code/game/machinery/vending/engitech.dm +++ b/code/game/machinery/vending/engitech.dm @@ -123,6 +123,7 @@ ) restock_blocked_items = list( /obj/item/stack/cable_coil, + /obj/item/clothing/gloves/yellow/budget, /obj/item/weldingtool, /obj/item/weldingtool/hugetank ) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index baafe037c44..c9538c5d402 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -14,7 +14,7 @@ var/can_use = TRUE var/obj/effect/dummy/chameleon/active_dummy = null var/saved_item = /obj/item/trash/cigbutt - var/saved_icon = 'icons/obj/clothing/masks.dmi' + var/saved_icon = 'icons/obj/smokables.dmi' var/saved_icon_state = "cigbutt" var/saved_overlays diff --git a/code/game/objects/structures/barricades/plasteel.dm b/code/game/objects/structures/barricades/plasteel.dm index 42d44ca2fc9..42b045da01f 100644 --- a/code/game/objects/structures/barricades/plasteel.dm +++ b/code/game/objects/structures/barricades/plasteel.dm @@ -185,6 +185,10 @@ . = ..() /obj/structure/barricade/plasteel/attack_hand(mob/user as mob) + // For preventing cyborgs from flipping barricades remotely. + if(get_dist(src, user) > 1) + return FALSE + if(closed) if(recentlyflipped) to_chat(user, SPAN_NOTICE("\The [src] has been flipped too recently!")) diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm index ca5cf24974f..a6902bd1b9f 100644 --- a/code/modules/cargo/bounty.dm +++ b/code/modules/cargo/bounty.dm @@ -16,7 +16,7 @@ /datum/bounty/New() if(reward_low > 0 && reward_high > reward_low) - reward = round(rand(reward_low, reward_high), 100) + reward = round(rand(reward_low, reward_high), 10) description = replacetext(description, "%DOCKNAME", SSatlas.current_map.dock_name) description = replacetext(description, "%DOCKSHORT", SSatlas.current_map.dock_short) description = replacetext(description, "%BOSSNAME", SSatlas.current_map.boss_name) diff --git a/code/modules/client/preference_setup/loadout/items/eyes.dm b/code/modules/client/preference_setup/loadout/items/eyes.dm index b77f81979b7..88c8bd8814a 100644 --- a/code/modules/client/preference_setup/loadout/items/eyes.dm +++ b/code/modules/client/preference_setup/loadout/items/eyes.dm @@ -48,7 +48,7 @@ display_name = "flash-proof sunglasses selection (Security/Command)" description = "A selection of flash-proof sunglasses." path = /obj/item/clothing/glasses/sunglasses - allowed_roles = list("Security Officer", "Head of Security", "Warden", "Captain", "Executive Officer", "Operations Manager", "Investigator", "Bridge Crew", "Security Personnel") + allowed_roles = list("Consular Officer", "Corporate Liaison", "Diplomatic Aide", "Diplomatic Bodyguard", "Security Officer", "Head of Security", "Warden", "Captain", "Executive Officer", "Operations Manager", "Investigator", "Bridge Crew", "Security Personnel") /datum/gear/eyes/sunglasses/New() ..() diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index 1ea63d7e742..e1fa9a02b41 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -74,7 +74,7 @@ // We don't want to obliterate small offships (lucky 7 APCs or fewer). if(LAZYLEN(valid_apcs) < 8) - LAZYREMOVE(victim_apc, valid_apcs) + LAZYREMOVE(valid_apcs, victim_apc) // Main breaker is turned off, or we rolled lucky. Consider this APC protected. if(!victim_apc.operating || storm_damage <= (80 - (severity * 25))) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 9f35bfb1728..af2f2541ade 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -210,11 +210,24 @@ idx++ var/form_title = "Form 0600 - Mining Yield Declaration" - var/dat = "
Stellar Corporate Conglomerate
" - dat += "Operations Department


" + var/dat + var/facility_name + if(SSatlas.current_map.use_overmap) + var/obj/effect/overmap/visitable/sector/S = GLOB.map_sectors["[GET_Z(src)]"] + if(!S) //Blueprints are useless now, but keep them around for fluff + facility_name = "If you're seeing this, report it on the GitHub issues tracker; include your current location in-game." + facility_name = "[S.name]" + else + facility_name = "[SSatlas.current_map.station_name]" + + if(facility_name == SSatlas.current_map.station_name) + dat = "
Stellar Corporate Conglomerate
" + dat += "Operations Department


" + else + dat = "[facility_name]

" dat += "Form 0600
Mining Yield Declaration

" - dat += "Facility: [SSatlas.current_map.station_name]
" + dat += "Facility: [facility_name]
" dat += "Date: [date_string]
" dat += "Index: [idx]

" diff --git a/code/modules/mob/abstract/ghost/ghost.dm b/code/modules/mob/abstract/ghost/ghost.dm index adc8eb8c136..d0162ea6937 100644 --- a/code/modules/mob/abstract/ghost/ghost.dm +++ b/code/modules/mob/abstract/ghost/ghost.dm @@ -20,6 +20,7 @@ see_invisible = SEE_INVISIBLE_OBSERVER add_verb(src, /mob/abstract/ghost/proc/dead_tele) ghost_multitool = new(src) + update_sight() /mob/abstract/ghost/Destroy() QDEL_NULL(ghost_multitool) diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm index 4472ddea5b3..d69357e0d58 100644 --- a/code/modules/mob/living/carbon/breathe.dm +++ b/code/modules/mob/living/carbon/breathe.dm @@ -1,25 +1,10 @@ //Common breathing procs - -//Start of a breath chain, calls breathe() +/// START OF THE STANDARD BREATHING CHAIN. Just handles the timing to call breathe(). /mob/living/carbon/handle_breathing() if(SSair.times_fired%4==2 || failed_last_breath || is_asystole()) //First, resolve location and get a breath breathe() -/mob/living/carbon/proc/inhale(var/datum/reagents/from, var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/bypass_checks = FALSE) - - if(species && (species.flags & NO_BREATHE)) //Check for species - return 0 - - if(!bypass_checks) - - if(wear_mask && wear_mask.item_flags & ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT) //Check if the gasmask blocks an effect - return 0 - - if (internals && internals.icon_state == "internal1") //Check for internals - return 0 - - return from.trans_to_holder(target,amount,multiplier,copy) //complete transfer - +/// If we're a species that needs to breathe, it checks current health effects and, if we CAN breathe, checks for air from internals -> envvironment -> then runs handle_breath() and handle_post_breath(). /mob/living/carbon/proc/breathe(var/volume_needed = BREATH_VOLUME) if(species && (species.flags & NO_BREATHE)) return @@ -44,7 +29,9 @@ if(!breath) breath = get_breath_from_environment(volume_needed) //No breath from internals so let's try to get air from our location + // Passing the gas mixture to the lungs, if they exist. handle_breath(breath) + // Handling exhalation. handle_post_breath(breath) /mob/living/carbon/proc/get_breath_from_internal(var/volume_needed=BREATH_VOLUME) //hopefully this will allow overrides to specify a different default volume without breaking any cases where volume is passed in. @@ -82,6 +69,31 @@ return breath return null +/mob/living/carbon/proc/handle_breath(datum/gas_mixture/breath) + return + +/mob/living/carbon/proc/handle_post_breath(datum/gas_mixture/breath) + if(!breath) + return + loc.assume_air(breath) //exhale into the environment +// END OF THE STANDARD BREATHING CHAIN + +/// Handles chemical inhalation effects (trans_to_mob(), also search CHEM_BREATHE). +/mob/living/carbon/proc/inhale(var/datum/reagents/from, var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/bypass_checks = FALSE) + + if(species && (species.flags & NO_BREATHE)) //Check for species + return 0 + + if(!bypass_checks) + + if(wear_mask && wear_mask.item_flags & ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT) //Check if the gasmask blocks an effect + return 0 + + if (internals && internals.icon_state == "internal1") //Check for internals + return 0 + + return from.trans_to_holder(target,amount,multiplier,copy) //complete transfer + //Handle possble chem smoke effect /mob/living/carbon/proc/handle_chemical_smoke(var/datum/gas_mixture/environment) if(species && environment.return_pressure() < species.breath_pressure/5) @@ -97,11 +109,3 @@ // I dunno, maybe the reagents enter the blood stream through the lungs? // ^ HA HA HA HA break - -/mob/living/carbon/proc/handle_breath(datum/gas_mixture/breath) - return - -/mob/living/carbon/proc/handle_post_breath(datum/gas_mixture/breath) - if(!breath) - return - loc.assume_air(breath) //exhale into the environment diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fcc9d706c82..28f7351f405 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1309,6 +1309,7 @@ ..() +/// Passes the gas_mixture to the lungs for them to deal with. If lungs exist. /mob/living/carbon/human/handle_breath(datum/gas_mixture/breath) if(status_flags & GODMODE) return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ceeed0f2614..0b983e4ea2f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -664,13 +664,20 @@ sprint_cost_factor -= 0.35 * chem_effects[CE_ADRENALINE] stamina_recovery += max ((stamina_recovery * 0.7 * chem_effects[CE_ADRENALINE]), 5) - var/obj/item/clothing/C = wear_suit - if(!(C && (C.body_parts_covered & HANDS) && !(C.heat_protection & HANDS)) && !gloves) - for(var/obj/item/I in src) - if(I.contaminated && !(species.flags & PHORON_IMMUNE)) - if(I == r_hand) + var/obj/item/clothing/suit = wear_suit + var/protected = FALSE + if(suit && (suit.body_parts_covered & HANDS) && (suit.heat_protection & HANDS)) + protected = TRUE + + if(gloves && (gloves.heat_protection & HANDS)) + protected = TRUE + + if(!protected) + for(var/obj/item/held_item in src) + if(held_item.contaminated && !(species.flags & PHORON_IMMUNE)) + if(held_item == r_hand) apply_damage(GLOB.vsc.plc.CONTAMINATION_LOSS, DAMAGE_BURN, BP_R_HAND) - else if(I == l_hand) + else if(held_item == l_hand) apply_damage(GLOB.vsc.plc.CONTAMINATION_LOSS, DAMAGE_BURN, BP_L_HAND) else adjustFireLoss(GLOB.vsc.plc.CONTAMINATION_LOSS) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 2057d8f7080..6d4c1e9ad1b 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -5,13 +5,20 @@ /datum/species // Descriptors and strings. - var/name // Species name. - var/name_plural // Pluralized name (since "[name]s" is not always valid) - var/hide_name = FALSE // If TRUE, the species' name won't be visible on examine. - var/short_name // Shortened form of the name, for code use. Must be exactly 3 letter long, and all lowercase - var/category_name // a name for this overarching species, ie 'Human', 'Skrell', 'IPC'. only used in character creation - var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen. - var/species_height = HEIGHT_NOT_USED // Average Height of the species + /// Species name. + var/name + /// Pluralized name (since "[name]s" is not always valid) + var/name_plural + /// If TRUE, the species' name won't be visible on examine. + var/hide_name = FALSE + /// Shortened form of the name, for code use. Must be exactly 3 letter long, and all lowercase + var/short_name + /// A name for this overarching species, ie 'Human', 'Skrell', 'IPC'. only used in character creation + var/category_name + /// A brief lore summary for use in the chargen screen. + var/blurb = "A completely nondescript species." + /// Average height of the species + var/species_height = HEIGHT_NOT_USED var/height_min = 120 var/height_max = 350 var/bodytype @@ -22,9 +29,12 @@ var/list/selectable_pronouns = list(MALE, FEMALE, PLURAL) // Icon/appearance vars. - var/canvas_icon = 'icons/mob/base_32.dmi' // Used to blend parts and icons onto this, to avoid clipping issues. - var/icobase = 'icons/mob/human_races/human/r_human.dmi' // Normal icon set. - var/deform = 'icons/mob/human_races/human/r_def_human.dmi' // Mutated icon set. + /// Used to blend parts and icons onto this, to avoid clipping issues. + var/canvas_icon = 'icons/mob/base_32.dmi' + /// Normal icon set. + var/icobase = 'icons/mob/human_races/human/r_human.dmi' + /// Mutated icon set. + var/deform = 'icons/mob/human_races/human/r_def_human.dmi' var/skeleton_icon = 'icons/mob/human_races/r_skeleton.dmi' var/preview_icon = 'icons/mob/human_races/human/human_preview.dmi' var/bandages_icon @@ -35,41 +45,54 @@ var/blood_mask = 'icons/mob/human_races/masks/blood_human.dmi' var/onfire_overlay = 'icons/mob/burning/burning_generic.dmi' - var/prone_icon // If set, draws this from icobase when mob is prone. + /// If set, draws this from icobase when mob is prone. + var/prone_icon var/icon_x_offset = 0 var/icon_y_offset = 0 var/typing_indicator_x_offset = 0 var/typing_indicator_y_offset = 0 - ///Horizontal offset in pixel used as a baseline for the runechat images (chat text above the mob when it talks) + /// Horizontal offset in pixel used as a baseline for the runechat images (chat text above the mob when it talks) var/floating_chat_x_offset = null - ///Vertical offset in pixel used as a baseline for the runechat images (chat text above the mob when it talks) + /// Vertical offset in pixel used as a baseline for the runechat images (chat text above the mob when it talks) var/floating_chat_y_offset = 8 - // special consideration should be made when adding new emote types to different species, as they'll be able to initiate it, but their target might not be able to - // reciprocate the emote in any way + // Special consideration should be made when adding new emote types to different species, as they'll be able to initiate it, but + // their target might not be able to reciprocate the emote in any way /// An associated list of list, where a list of body parts are the key for a specific emote (ex: list(BP_L_ARM, BP_R_ARM) = /singleton/overhead_emote/highfive) var/list/overhead_emote_types = list( list(BP_L_ARM, BP_R_ARM) = /singleton/overhead_emote/highfive, list(BP_L_HAND, BP_R_HAND) = /singleton/overhead_emote/fistbump ) - var/eyes = "eyes_s" // Icon for eyes. - var/eyes_icons = 'icons/mob/human_face/eyes.dmi' // DMI file for eyes, mostly for none 32x32 species. - var/has_floating_eyes // Eyes will overlay over darkness (glow) - var/eyes_icon_blend = ICON_ADD // The icon blending mode to use for eyes. + /// Icon for eyes. + var/eyes = "eyes_s" + /// DMI file for eyes, mostly for none 32x32 species. + var/eyes_icons = 'icons/mob/human_face/eyes.dmi' + /// Eyes will overlay over darkness (glow) + var/has_floating_eyes + /// The icon blending mode to use for eyes. + var/eyes_icon_blend = ICON_ADD var/blood_type = "blood" - var/blood_color = COLOR_HUMAN_BLOOD // Red. - var/flesh_color = "#FFC896" // Pink. - var/examine_color // The color of the species' name in the examine text. Defaults to flesh_color if unset. - var/base_color // Used by changelings. Should also be used for icon previes.. - var/tail // Name of tail state in species effects icon file. - var/tail_animation // If set, the icon to obtain tail animation states from. + /// Red. + var/blood_color = COLOR_HUMAN_BLOOD + /// Pink. + var/flesh_color = "#FFC896" + /// The color of the species' name in the examine text. Defaults to flesh_color if unset. + var/examine_color + /// Used by changelings. Should also be used for icon previes.. + var/base_color + /// Name of tail state in species effects icon file. + var/tail + /// If set, the icon to obtain tail animation states from. + var/tail_animation var/tail_hair var/list/selectable_tails - var/race_key = 0 // Used for mob icon cache string. - var/icon/icon_template // Used for mob icon generation for non-32x32 species. + /// Used for mob icon cache string. + var/race_key = 0 + /// Used for mob icon generation for non-32x32 species. + var/icon/icon_template var/mob_size = MOB_MEDIUM var/show_ssd = "in a deep slumber" var/short_sighted @@ -81,45 +104,75 @@ var/light_color = null // Language/culture vars. - var/default_language = "Ceti Basic" // Default language is used when 'say' is used without modifiers. - var/language = "Ceti Basic" // Default racial language, if any. - var/list/secondary_langs = list() // The names of secondary languages that are available to this species. - var/list/speech_sounds // A list of sounds to potentially play when speaking. - var/list/speech_chance // The likelihood of a speech sound playing. - var/num_alternate_languages = 0 // How many secondary languages are available to select at character creation - var/name_language = "Ceti Basic" // The language to use when determining names for this species, or null to use the first name/last name generator + /// Default language is used when 'say' is used without modifiers. + var/default_language = "Ceti Basic" + /// Default racial language, if any. + var/language = "Ceti Basic" + /// The names of secondary languages that are available to this species. + var/list/secondary_langs = list() + /// A list of sounds to potentially play when speaking. + var/list/speech_sounds + /// The likelihood of a speech sound playing. + var/list/speech_chance + /// How many secondary languages are available to select at character creation + var/num_alternate_languages = 0 + /// The language to use when determining names for this species, or null to use the first name/last name generator + var/name_language = "Ceti Basic" // Combat vars. - var/total_health = 200 // Point at which the mob will enter crit. - var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat, + /// Point at which the mob will enter crit. + var/total_health = 200 + /// Possible unarmed attacks that the mob will use in combat, + var/list/unarmed_types = list( /datum/unarmed_attack, /datum/unarmed_attack/bite ) - var/list/unarmed_attacks = null // For empty hand harm-intent attack + /// For empty hand harm-intent attack + var/list/unarmed_attacks = null var/standing_jump_range = 2 var/list/maneuvers = list(/singleton/maneuver/leap) - var/pain_mod = 1 // Pain multiplier - var/brute_mod = 1 // Physical damage multiplier. - var/burn_mod = 1 // Burn damage multiplier. - var/oxy_mod = 1 // Oxyloss modifier - var/toxins_mod = 1 // Toxloss modifier - var/radiation_mod = 1 // Radiation modifier - var/flash_mod = 1 // Stun from blindness modifier. - var/fall_mod = 1 // Fall damage modifier, further modified by brute damage modifier - var/grab_mod = 1 // How easy it is to grab the species. Higher is harder to grab. - var/resist_mod = 1 // How easy it is for the species to resist out of a grab. - var/metabolism_mod = 1 // Reagent metabolism modifier - var/bleed_mod = 1 // How fast this species bleeds. - var/blood_volume = DEFAULT_BLOOD_AMOUNT // Blood volume. - var/injection_mod = 1 // Multiplicative time modifier on syringe injections + /// Pain multiplier + var/pain_mod = 1 + /// Physical damage multiplier. + var/brute_mod = 1 + /// Burn damage multiplier. + var/burn_mod = 1 + /// Oxyloss modifier + var/oxy_mod = 1 + /// Toxloss modifier + var/toxins_mod = 1 + /// Radiation modifier + var/radiation_mod = 1 + /// Stun from blindness modifier. + var/flash_mod = 1 + /// Fall damage modifier, further modified by brute damage modifier + var/fall_mod = 1 + /// How easy it is to grab the species. Higher is harder to grab. + var/grab_mod = 1 + /// How easy it is for the species to resist out of a grab. + var/resist_mod = 1 + /// Reagent metabolism modifier + var/metabolism_mod = 1 + /// How fast this species bleeds. + var/bleed_mod = 1 + /// Blood volume. + var/blood_volume = DEFAULT_BLOOD_AMOUNT + /// Multiplicative time modifier on syringe injections + var/injection_mod = 1 - var/vision_flags = DEFAULT_SIGHT // Same flags as glasses. - var/inherent_eye_protection // If set, this species has this level of inherent eye protection. - var/eyes_are_impermeable = FALSE // If TRUE, this species' eyes are not damaged by phoron. - var/break_cuffs = FALSE //used in resist.dm to check if they can break hand/leg cuffs - var/natural_climbing = FALSE //If true, the species always succeeds at climbing. - var/climb_coeff = 1.25 //The coefficient to the climbing speed of the individual = 60 SECONDS * climb_coeff + /// Same flags as glasses. + var/vision_flags = DEFAULT_SIGHT + /// If set, this species has this level of inherent eye protection. + var/inherent_eye_protection + /// If TRUE, this species' eyes are not damaged by phoron. + var/eyes_are_impermeable = FALSE + /// Used in resist.dm to check if they can break hand/leg cuffs + var/break_cuffs = FALSE + /// If true, the species always succeeds at climbing. + var/natural_climbing = FALSE + /// The coefficient to the climbing speed of the individual = 60 SECONDS * climb_coeff + var/climb_coeff = 1.25 // Death vars. var/respawn_type = CREW @@ -135,7 +188,8 @@ var/knockout_message = "has been knocked unconscious!" var/halloss_message = "slumps to the ground, too weak to continue fighting." var/halloss_message_self = "You're in too much pain to keep going..." - var/list/pain_messages = list("It hurts so much", "You really need some painkillers", "Dear god, the pain") // passive message displayed to user when injured + /// Passive message displayed to user when injured + var/list/pain_messages = list("It hurts so much", "You really need some painkillers", "Dear god, the pain") var/list/pain_item_drop_cry = list("screams in pain and ", "lets out a sharp cry and ", "cries out and ") // External Organ Pain Damage @@ -230,27 +284,46 @@ var/list/equip_adjust // Body/form vars. - var/list/inherent_verbs // Species-specific verbs. - var/list/inherent_spells // Species-specific spells. - var/has_fine_manipulation = 1 // Can use small items. - var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation. - var/darksight = 2 // Native darksight distance. - var/flags = 0 // Various specific features. - var/appearance_flags = 0 // Appearance/display related features. - var/spawn_flags = 0 // Flags that specify who can spawn as this species - var/slowdown = 0 // Passive movement speed malus (or boost, if negative) - var/primitive_form // Lesser form, if any (ie. monkey for humans) - var/greater_form // Greater form, if any, ie. human for monkeys. + /// Species-specific verbs. + var/list/inherent_verbs + /// Species-specific spells. + var/list/inherent_spells + /// Can use small items. + var/has_fine_manipulation = 1 + /// The lower, the thicker the skin and better the insulation. + var/siemens_coefficient = 1 + /// Native darksight distance. + var/darksight = 2 + /// Various specific features. + var/flags = 0 + /// Appearance/display related features. + var/appearance_flags = 0 + /// Flags that specify who can spawn as this species + var/spawn_flags = 0 + /// Passive movement speed malus (or boost, if negative) + var/slowdown = 0 + /// Lesser form, if any (ie. monkey for humans) + var/primitive_form + /// Greater form, if any, ie. human for monkeys. + var/greater_form var/holder_type - var/rarity_value = 1 // Relative rarity/collector value for this species. - var/ethanol_resistance = 1 // How well the mob resists alcohol, lower values get drunk faster, higher values need to drink more - var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes. Higher values means less sensitive. Lower values means more sensitive. + /// Relative rarity/collector value for this species. + var/rarity_value = 1 + /// How well the mob resists alcohol, lower values get drunk faster, higher values need to drink more + var/ethanol_resistance = 1 + /// How sensitive the species is to minute tastes. Higher values means less sensitive. Lower values means more sensitive. + var/taste_sensitivity = TASTE_NORMAL - var/stamina = 100 // The maximum stamina this species has. Determines how long it can sprint - var/stamina_recovery = 3 // Flat amount of stamina species recovers per proc - var/sprint_speed_factor = 0.7 // The percentage of bonus speed you get when sprinting. 0.4 = 40% - var/sprint_cost_factor = 0.9 // Multiplier on stamina cost for sprinting - var/exhaust_threshold = 50 // When stamina runs out, the mob takes oxyloss up til this value. Then collapses and drops to walk + /// The maximum stamina this species has. Determines how long it can sprint + var/stamina = 100 + /// Flat amount of stamina species recovers per proc + var/stamina_recovery = 3 + /// The percentage of bonus speed you get when sprinting. 0.4 = 40% + var/sprint_speed_factor = 0.7 + /// Multiplier on stamina cost for sprinting + var/sprint_cost_factor = 0.9 + /// When stamina runs out, the mob takes oxyloss up til this value. Then collapses and drops to walk + var/exhaust_threshold = 50 // Pulse modifiers var/low_pulse = 40 @@ -267,17 +340,23 @@ var/hearing_sensitivity = HEARING_NORMAL // Eating & nutrition related stuff - var/gluttonous = 0 // Can eat some mobs. Values can be GLUT_TINY, GLUT_SMALLER, GLUT_ANYTHING, GLUT_ITEM_TINY, GLUT_ITEM_NORMAL, GLUT_ITEM_ANYTHING, GLUT_PROJECTILE_VOMIT - var/stomach_capacity = 5 // How much stuff they can stick in their stomach + /// Can eat some mobs. Values can be GLUT_TINY, GLUT_SMALLER, GLUT_ANYTHING, GLUT_ITEM_TINY, GLUT_ITEM_NORMAL, GLUT_ITEM_ANYTHING, GLUT_PROJECTILE_VOMIT + var/gluttonous = 0 + /// How much stuff they can stick in their stomach + var/stomach_capacity = 5 var/allowed_eat_types = TYPE_ORGANIC - var/max_nutrition_factor = 1 //Multiplier on maximum nutrition - var/nutrition_loss_factor = 1 //Multiplier on passive nutrition losses + /// Multiplier on maximum nutrition + var/max_nutrition_factor = 1 + /// Multiplier on passive nutrition losses + var/nutrition_loss_factor = 1 - var/max_hydration_factor = 1 //Multiplier on maximum thirst - var/hydration_loss_factor = 1 //Multiplier on passive thirst losses + /// Multiplier on maximum thirst + var/max_hydration_factor = 1 + /// Multiplier on passive thirst losses + var/hydration_loss_factor = 1 - ///Determines the organs that the species spawns with and - var/list/has_organ = list( // which required-organ checks are conducted. + /// Determines the organs that the species spawns with and which required-organ checks are conducted. + var/list/has_organ = list( BP_BRAIN = /obj/item/organ/internal/brain, BP_EYES = /obj/item/organ/internal/eyes, BP_HEART = /obj/item/organ/internal/heart, @@ -287,8 +366,10 @@ BP_STOMACH = /obj/item/organ/internal/stomach, BP_APPENDIX = /obj/item/organ/internal/appendix ) - var/vision_organ // If set, this organ is required for vision. Defaults to BP_EYES if the species has them. - var/breathing_organ // If set, this organ is required to breathe. Defaults to BP_LUNGS if the species has them. + /// If set, this organ is required for vision. Defaults to BP_EYES if the species has them. + var/vision_organ + /// If set, this organ is required to breathe. Defaults to BP_LUNGS if the species has them. + var/breathing_organ var/list/has_limbs = list( BP_CHEST = list("path" = /obj/item/organ/external/chest), @@ -307,13 +388,17 @@ var/list/natural_armor // Bump vars - var/bump_flag = HUMAN // What are we considered to be when bumped? - var/push_flags = ~HEAVY // What can we push? - var/swap_flags = ~HEAVY // What can we swap place with? + /// What are we considered to be when bumped? + var/bump_flag = HUMAN + /// What can we push? + var/push_flags = ~HEAVY + /// What can we swap place with? + var/swap_flags = ~HEAVY var/pass_flags = 0 - var/obj/effect/decal/cleanable/blood/tracks/move_trail = /obj/effect/decal/cleanable/blood/tracks/footprints/barefoot // What marks are left when walking + /// What marks are left when walking + var/obj/effect/decal/cleanable/blood/tracks/move_trail = /obj/effect/decal/cleanable/blood/tracks/footprints/barefoot var/default_h_style = "Bald" var/default_f_style = "Shaved" @@ -323,9 +408,12 @@ /singleton/origin_item/culture/unknown ) - var/zombie_type //What zombie species they become - var/bodyfall_sound = /singleton/sound_category/bodyfall_sound //default, can be used for species specific falling sounds - var/footsound = /singleton/sound_category/blank_footsteps //same as above but for footsteps without shoes + /// What zombie species they become + var/zombie_type + /// Default, can be used for species specific falling sounds + var/bodyfall_sound = /singleton/sound_category/bodyfall_sound + /// Same as above but for footsteps without shoes + var/footsound = /singleton/sound_category/blank_footsteps /// Sets the base "tint" of the species' sprite, which is then adjusted by the skin tone var/list/character_color_presets @@ -336,7 +424,8 @@ /// The upper bound for the skin tone value, the higher, the "darker" they'll appear var/upper_skin_tone_bound = 220 - var/list/alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_BRAIN, BP_KIDNEYS, BP_STOMACH, BP_APPENDIX) //what internal organs can be changed in character setup + /// What internal organs can be changed in character setup + var/list/alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_BRAIN, BP_KIDNEYS, BP_STOMACH, BP_APPENDIX) var/list/possible_external_organs_modifications = list("Normal","Amputated","Prosthesis") /// These are the prefixes of the icon states in talk.dmi. var/list/possible_speech_bubble_types = list("default") @@ -349,25 +438,17 @@ var/character_creation_psi_points = 0 /// Is this species psionically deaf? var/psi_deaf = FALSE - ///Which species-unique robolimb types can this species take? + /// Which species-unique robolimb types can this species take? var/list/valid_prosthetics //Sleeping stuff - /** - * Does this species sleep standing up? - */ + /// Does this species sleep standing up? var/sleeps_upright = FALSE - /** - * The key of the emote to play when this species is sleeping - */ - var/snore_key = "snore" - /** - * Whether or not this species snores when sleeping - */ + /// Whether this species snores or not. var/snores = TRUE - /** - * Whether this species can choose to sleep indefinitely - */ + /// The key of the emote to play when this species is sleeping, if it snores. + var/snore_key = "snore" + /// Whether this species can choose to sleep indefinitely var/indefinite_sleep = FALSE /datum/species/proc/get_eyes(var/mob/living/carbon/human/H) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9e46202703d..343acb1d994 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1,10 +1,10 @@ //mob verbs are faster than object verbs. See mob/verb/examine. -/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1)) +/mob/living/verb/pulled(atom/movable/atom_movable as mob|obj in oview(1)) set name = "Pull" set category = "Object" - if(AM.Adjacent(src)) - src.start_pulling(AM) + if(atom_movable.Adjacent(src)) + src.start_pulling(atom_movable) return @@ -19,9 +19,9 @@ if(.) visible_message("\The [src] points to \the [pointing_at].") -/mob/living/drop_from_inventory(var/obj/item/W, var/atom/target) - . = ..(W, target) - if(W && W.GetID()) +/mob/living/drop_from_inventory(var/obj/item/item, var/atom/target) + . = ..(item, target) + if(item && item.GetID()) BITSET(hud_updateflag, ID_HUD) //If we drop our ID, update ID HUD /*one proc, four uses @@ -51,25 +51,25 @@ default behaviour is: /mob/living var/tmp/last_push_notif -/mob/living/Collide(atom/movable/AM) - if (now_pushing || !loc) +/mob/living/Collide(atom/movable/target_movable_atom) + if(now_pushing || !loc) return now_pushing = TRUE - if (istype(AM, /mob/living)) - var/mob/living/tmob = AM + if(istype(target_movable_atom, /mob/living)) + var/mob/living/target_mob = target_movable_atom - for(var/mob/living/M in range(tmob, 1)) - if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/grab, tmob.grabbed_by.len)) ) - if (last_push_notif + 0.5 SECONDS <= world.time) - to_chat(src, SPAN_WARNING("[tmob] is restrained, you cannot push past")) + for(var/mob/living/nearby_mob in range(target_mob, 1)) + if(target_mob.pinned.len || ((nearby_mob.pulling == target_mob && (target_mob.restrained() && !(nearby_mob.restrained()) && nearby_mob.stat == 0)) || locate(/obj/item/grab, target_mob.grabbed_by.len))) + if(last_push_notif + 0.5 SECONDS <= world.time) + to_chat(src, SPAN_WARNING("[target_mob] is restrained, you cannot push past")) last_push_notif = world.time now_pushing = FALSE return - if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) ) - if (last_push_notif + 0.5 SECONDS <= world.time) - to_chat(src, SPAN_WARNING("[tmob] is restraining [M], you cannot push past")) + if(target_mob.pulling == nearby_mob && (nearby_mob.restrained() && !( target_mob.restrained()) && target_mob.stat == 0)) + if(last_push_notif + 0.5 SECONDS <= world.time) + to_chat(src, SPAN_WARNING("[target_mob] is restraining [nearby_mob], you cannot push past")) last_push_notif = world.time now_pushing = FALSE @@ -77,40 +77,40 @@ default behaviour is: //Leaping mobs just land on the tile, no pushing, no anything. if(status_flags & LEAPING) - forceMove(tmob.loc) + forceMove(target_mob.loc) status_flags &= ~LEAPING now_pushing = FALSE return - if(can_swap_with(tmob)) // mutual brohugs all around! - var/turf/tmob_oldloc = get_turf(tmob) + if(can_swap_with(target_mob)) // mutual brohugs all around! + var/turf/target_mob_oldloc = get_turf(target_mob) var/turf/src_oldloc = get_turf(src) if(pulling?.density) - tmob.forceMove(pulling.loc) - forceMove(tmob_oldloc) + target_mob.forceMove(pulling.loc) + forceMove(target_mob_oldloc) pulling.forceMove(src_oldloc) - else if(tmob.pulling?.density) - forceMove(tmob.pulling.loc) - tmob.forceMove(src_oldloc) - tmob.pulling.forceMove(tmob_oldloc) + else if(target_mob.pulling?.density) + forceMove(target_mob.pulling.loc) + target_mob.forceMove(src_oldloc) + target_mob.pulling.forceMove(target_mob_oldloc) else - forceMove(tmob_oldloc) + forceMove(target_mob_oldloc) if(pulling) pulling.forceMove(src_oldloc) - tmob.forceMove(src_oldloc) - if(tmob.pulling) - tmob.pulling.forceMove(tmob_oldloc) - for(var/obj/item/grab/G in list(l_hand, r_hand)) - G.affecting.forceMove(loc) - for(var/obj/item/grab/G in list(tmob.l_hand, tmob.r_hand)) - G.affecting.forceMove(tmob.loc) + target_mob.forceMove(src_oldloc) + if(target_mob.pulling) + target_mob.pulling.forceMove(target_mob_oldloc) + for(var/obj/item/grab/grab_item in list(l_hand, r_hand)) + grab_item.affecting.forceMove(loc) + for(var/obj/item/grab/grab_item in list(target_mob.l_hand, target_mob.r_hand)) + grab_item.affecting.forceMove(target_mob.loc) now_pushing = FALSE - for(var/mob/living/carbon/slime/slime in view(2, tmob)) - if(slime.victim == tmob) + for(var/mob/living/carbon/slime/slime in view(2, target_mob)) + if(slime.victim == target_mob) slime.UpdateFeed() return - if(!can_move_mob(tmob, 0, 0)) + if(!can_move_mob(target_mob, 0, 0)) now_pushing = FALSE return @@ -118,56 +118,52 @@ default behaviour is: now_pushing = FALSE return - if(istype(tmob, /mob/living/carbon/human) && (tmob.mutations & FAT)) - if(prob(40) && !(mutations & FAT)) - to_chat(src, SPAN_DANGER("You fail to push [tmob]'s fat ass out of the way.")) - now_pushing = FALSE - return - - if(istype(tmob.r_hand, /obj/item/shield/riot)) + if(istype(target_mob.r_hand, /obj/item/shield/riot)) if(prob(99)) now_pushing = FALSE return - if(istype(tmob.l_hand, /obj/item/shield/riot)) + if(istype(target_mob.l_hand, /obj/item/shield/riot)) if(prob(99)) now_pushing = FALSE return - if(!(tmob.status_flags & CANPUSH)) + if(!(target_mob.status_flags & CANPUSH)) now_pushing = FALSE return - tmob.LAssailant = WEAKREF(src) + target_mob.LAssailant = WEAKREF(src) now_pushing = FALSE . = ..() - if (!istype(AM, /atom/movable)) + if(!istype(target_movable_atom, /atom/movable)) return - if (!now_pushing) + if(!now_pushing) now_pushing = TRUE - if (!AM.anchored) - if(isobj(AM)) - var/obj/O = AM - if ((can_pull_size == 0) || (can_pull_size < O.w_class)) + if(!target_movable_atom.anchored) + if(isobj(target_movable_atom)) + var/obj/object = target_movable_atom + if((can_pull_size == 0) || (can_pull_size < object.w_class)) now_pushing = FALSE return - var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) - for(var/obj/structure/window/win in get_step(AM,t)) + var/target_direction = get_dir(src, target_movable_atom) + if(istype(target_movable_atom, /obj/structure/window)) + for(var/obj/structure/window/win in get_step(target_movable_atom,target_direction)) now_pushing = FALSE return - step(AM, t) - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(H.grabbed_by) - for(var/obj/item/grab/G in H.grabbed_by) - step(G.assailant, get_dir(G.assailant, H)) - G.adjust_position() + if(target_movable_atom == src.pulling) + stop_pulling() + step(target_movable_atom, target_direction) + if(ishuman(target_movable_atom)) + var/mob/living/carbon/human/target_human = target_movable_atom + if(target_human.grabbed_by) + for(var/obj/item/grab/grab_item in target_human.grabbed_by) + step(grab_item.assailant, get_dir(grab_item.assailant, target_human)) + grab_item.adjust_position() now_pushing = FALSE /** @@ -198,31 +194,31 @@ default behaviour is: if(!A.CanPass(swapee, T, 1)) return TRUE -/mob/living/proc/can_swap_with(var/mob/living/tmob) - if(tmob.buckled_to || buckled_to) +/mob/living/proc/can_swap_with(var/mob/living/target_mob) + if(target_mob.buckled_to || buckled_to) return FALSE //BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller - if(!(tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained()))) + if(!(target_mob.mob_always_swap || (target_mob.a_intent == I_HELP || target_mob.restrained()) && (a_intent == I_HELP || src.restrained()))) return FALSE - if(!tmob.canmove || !canmove) + if(!target_mob.canmove || !canmove) return FALSE - if(swap_density_check(src, tmob)) + if(swap_density_check(src, target_mob)) return FALSE - if(swap_density_check(tmob, src)) + if(swap_density_check(target_mob, src)) return FALSE - if(pulling?.density && tmob.pulling?.density) // if both are pulling, don't shuffle + if(pulling?.density && target_mob.pulling?.density) // if both are pulling, don't shuffle return FALSE - return can_move_mob(tmob, 1, 0) + return can_move_mob(target_mob, 1, 0) /mob/living/verb/succumb() set hidden = 1 - if (health < maxHealth / 3) + if(health < maxHealth / 3) adjustBrainLoss(health + maxHealth * 2) // Deal 2x health in BrainLoss damage, as before but variable. to_chat(src, SPAN_NOTICE("You have given up life and succumbed to death.")) else @@ -282,7 +278,7 @@ default behaviour is: return maxHealth - health /mob/living/proc/adjustBruteLoss(var/amount) - if (status_flags & GODMODE) + if(status_flags & GODMODE) return health = clamp(health - amount, 0, maxHealth) @@ -409,7 +405,7 @@ default behaviour is: /mob/living/proc/get_organ_target() var/mob/shooter = src var/t = shooter.zone_sel?.selecting - if ((t in list( BP_EYES, BP_MOUTH ))) + if((t in list( BP_EYES, BP_MOUTH ))) t = BP_HEAD var/obj/item/organ/external/def_zone = ran_zone(t) return def_zone @@ -463,11 +459,11 @@ default behaviour is: if(iscarbon(src)) var/mob/living/carbon/C = src - if (C.handcuffed && !initial(C.handcuffed)) + if(C.handcuffed && !initial(C.handcuffed)) C.drop_from_inventory(C.handcuffed) C.handcuffed = initial(C.handcuffed) - if (C.legcuffed && !initial(C.legcuffed)) + if(C.legcuffed && !initial(C.legcuffed)) C.drop_from_inventory(C.legcuffed) C.legcuffed = initial(C.legcuffed) BITSET(hud_updateflag, HEALTH_HUD) @@ -571,23 +567,23 @@ default behaviour is: return /mob/living/Move(atom/newloc, direct) - if (buckled_to) + if(buckled_to) return - if (restrained()) + if(restrained()) stop_pulling() var/t7 = 1 - if (restrained()) + if(restrained()) for(var/mob/living/M in range(src, 1)) - if ((M.pulling == src && M.stat == 0 && !( M.restrained() ))) + if((M.pulling == src && M.stat == 0 && !( M.restrained() ))) t7 = null - if ((t7 && (pulling && ((get_dist(src, pulling) <= 1 || pulling.loc == loc) && (client && client.moving))))) + if((t7 && (pulling && ((get_dist(src, pulling) <= 1 || pulling.loc == loc) && (client && client.moving))))) var/turf/T = loc . = ..() - if (pulling && pulling.loc) + if(pulling && pulling.loc) if(!( isturf(pulling.loc) )) stop_pulling() return @@ -597,27 +593,27 @@ default behaviour is: stop_pulling() return - if (!restrained()) + if(!restrained()) var/diag = get_dir(src, pulling) - if (!((diag - 1) & diag)) + if(!((diag - 1) & diag)) diag = null - if ((get_dist(src, pulling) > 1 || diag)) - if (isliving(pulling)) + if((get_dist(src, pulling) > 1 || diag)) + if(isliving(pulling)) var/mob/living/M = pulling var/ok = 1 - if (locate(/obj/item/grab, M.grabbed_by)) - if (prob(75)) + if(locate(/obj/item/grab, M.grabbed_by)) + if(prob(75)) var/obj/item/grab/G = pick(M.grabbed_by) - if (istype(G, /obj/item/grab)) + if(istype(G, /obj/item/grab)) for(var/mob/O in viewers(M, null)) O.show_message(SPAN_WARNING("[G.affecting] has been pulled from [G.assailant]'s grip by [src]"), 1) //G = null qdel(G) else ok = 0 - if (locate(/obj/item/grab, M.grabbed_by.len)) + if(locate(/obj/item/grab, M.grabbed_by.len)) ok = 0 - if (ok) + if(ok) var/atom/movable/t = M.pulling M.stop_pulling() @@ -625,9 +621,9 @@ default behaviour is: var/area/A = get_area(M) if(A.has_gravity()) //this is the gay blood on floor shit -- Added back -- Skie - if (M.lying && (prob(M.getBruteLoss() / 6))) + if(M.lying && (prob(M.getBruteLoss() / 6))) var/turf/location = M.loc - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) location.add_blood(M) //pull damage with injured people if(prob(25)) @@ -638,7 +634,7 @@ default behaviour is: M.adjustBruteLoss(2) visible_message(SPAN_DANGER("\The [M]'s [M.isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!")) var/turf/location = M.loc - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) location.add_blood(M) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -651,19 +647,19 @@ default behaviour is: if(t) M.start_pulling(t) else - if (pulling) - if (istype(pulling, /obj/structure/window)) + if(pulling) + if(istype(pulling, /obj/structure/window)) var/obj/structure/window/W = pulling if(W.is_full_window()) for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T))) stop_pulling() - if (pulling) + if(pulling) step(pulling, get_dir(pulling.loc, T)) else stop_pulling() . = ..() - if (s_active && !s_active.Adjacent(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. + if(s_active && !s_active.Adjacent(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. s_active.close(src) if(update_slimes) @@ -818,7 +814,7 @@ default behaviour is: /mob/living/proc/under_door() //This function puts a silicon on a layer that makes it draw under doors, then periodically checks if its still standing on a door - if (layer > UNDERDOOR)//Don't toggle it if we're hiding + if(layer > UNDERDOOR)//Don't toggle it if we're hiding layer = UNDERDOOR underdoor = 1 @@ -850,15 +846,15 @@ default behaviour is: //damage/heal the mob ears and adjust the deaf amount /mob/living/adjustEarDamage(var/damage, var/deaf, var/ringing = FALSE) var/alreadydeaf = FALSE - if (ear_deaf) + if(ear_deaf) alreadydeaf = TRUE ear_damage = max(0, ear_damage + damage) ear_deaf = max(0, ear_deaf + deaf) - if (ringing && !alreadydeaf) - if (ear_damage >= 5) - if (ear_damage >= 15) + if(ringing && !alreadydeaf) + if(ear_damage >= 5) + if(ear_damage >= 15) to_chat(src, SPAN_DANGER("Your ears start to ring badly!")) else to_chat(src, SPAN_DANGER("Your ears start to ring!")) @@ -978,23 +974,23 @@ default behaviour is: #define PPM 9 //Protein per meat, used for calculating the quantity of protein in an animal /mob/living/proc/calculate_composition() - if (!composition_reagent)//if no reagent has been set, then we'll set one + if(!composition_reagent)//if no reagent has been set, then we'll set one var/type = find_type(src) - if (type & TYPE_SYNTHETIC) + if(type & TYPE_SYNTHETIC) src.composition_reagent = /singleton/reagent/iron else src.composition_reagent = /singleton/reagent/nutriment/protein //if the mob is a simple animal with a defined meat quantity - if (istype(src, /mob/living/simple_animal)) + if(istype(src, /mob/living/simple_animal)) var/mob/living/simple_animal/SA = src - if (SA.meat_amount) + if(SA.meat_amount) src.composition_reagent_quantity = SA.meat_amount*2*PPM //The quantity of protein is based on the meat_amount, but multiplied by 2 var/size_reagent = (src.mob_size * src.mob_size) * 3//The quantity of protein is set to 3x mob size squared - if (size_reagent > src.composition_reagent_quantity)//We take the larger of the two + if(size_reagent > src.composition_reagent_quantity)//We take the larger of the two src.composition_reagent_quantity = size_reagent #undef PPM diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index c0540b4be61..b12029e4c97 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -357,6 +357,8 @@ var/list/channel_to_radio_key = new var/list/langchat_styles = list() if(istype(speaking, /datum/language/noise)) langchat_styles = list("emote", "langchat_small") + if(istype(speaking, /datum/language/noise)) + langchat_styles = list("emote", "langchat_small") langchat_speech(message, get_hearers_in_view(message_range, src), speaking, additional_styles = langchat_styles) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 3992f41c293..ba7f1e9a272 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -36,8 +36,8 @@ resist_mod = 1.5 heat_damage_per_tick = 20 cold_damage_per_tick = 20 - var/poison_per_bite = 5 - var/poison_type = /singleton/reagent/toxin + var/venom_per_bite = 5 + var/venom_type = /singleton/reagent/toxin faction = "spiders" var/busy = 0 pass_flags = PASSTABLE @@ -64,9 +64,9 @@ melee_damage_lower = 5 melee_damage_upper = 10 armor_penetration = 20 - poison_per_bite = 10 + venom_per_bite = 10 var/atom/cocoon_target - poison_type = /singleton/reagent/soporific + venom_type = /singleton/reagent/soporific var/fed = 0 sample_data = list("Genetic markers identified as being linked with stem cell differentiaton", "Cellular structures indicative of high offspring production") @@ -82,9 +82,9 @@ melee_damage_lower = 15 melee_damage_upper = 20 armor_penetration = 30 - poison_per_bite = 10 + venom_per_bite = 10 speed = -2 - poison_type = /singleton/reagent/soporific + venom_type = /singleton/reagent/soporific fed = 1 var/playable = TRUE sample_data = list("Genetic markers identified as being linked with stem cell differentiaton", "Cellular structures indicative of high offspring production", "Tissue sample contains high neural cell content") @@ -106,7 +106,7 @@ melee_damage_lower = 10 melee_damage_upper = 20 armor_penetration = 15 - poison_per_bite = 5 + venom_per_bite = 5 speed = 4 sample_data = list("Genetic markers identified as being linked with stem cell differentiaton", "Cellular biochemistry shows high metabolic capacity") smart_melee = TRUE @@ -122,8 +122,8 @@ melee_damage_lower = 5 melee_damage_upper = 10 armor_penetration = 15 - poison_type = /singleton/reagent/perconol // mildly beneficial for organics - poison_per_bite = 2 + venom_type = /singleton/reagent/perconol // mildly beneficial for organics + venom_per_bite = 2 speed = 5 sample_data = list("Genetic markers identified as being linked with stem cell differentiaton", "Cellular biochemistry geared towards creating strong electrical potential differences") smart_melee = TRUE @@ -141,8 +141,8 @@ armor_penetration = 5 ranged = TRUE ranged_attack_range = 4 - poison_type = /singleton/reagent/acid/greimorian - poison_per_bite = 2 + venom_type = /singleton/reagent/acid/greimorian + venom_per_bite = 2 speed = 5 sample_data = list("Genetic markers identified as being linked with stem cell differentiaton", "Exocrinic acid synthesis detected") smart_melee = TRUE @@ -156,7 +156,7 @@ var/turf/target_turf = get_turf(target) var/obj/effect/effect/water/chempuff/pepperspray = new /obj/effect/effect/water/chempuff(get_turf(src)) pepperspray.create_reagents(10) - pepperspray.reagents.add_reagent(poison_type, 10) + pepperspray.reagents.add_reagent(venom_type, 10) pepperspray.set_color() pepperspray.set_up(target_turf, 3, 5) @@ -192,11 +192,11 @@ inject_probability -= armor_datum.armor_values[MELEE] * 1.8 if(prob(inject_probability)) to_chat(target, SPAN_WARNING("You feel a tiny prick.")) - target.reagents.add_reagent(poison_type, poison_per_bite) + target.reagents.add_reagent(venom_type, venom_per_bite) /mob/living/simple_animal/hostile/giant_spider/nurse/on_attack_mob(var/mob/hit_mob, var/obj/item/organ/external/limb) . = ..() - if(ishuman(hit_mob) && istype(limb) && !BP_IS_ROBOTIC(limb) && prob(poison_per_bite)) + if(ishuman(hit_mob) && istype(limb) && !BP_IS_ROBOTIC(limb) && prob(venom_per_bite)) var/eggs = new /obj/effect/spider/eggcluster(limb, src) limb.implants += eggs to_chat(hit_mob, SPAN_WARNING("\The [src] injects something into your [limb.name]!")) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 48dbbfbd9ad..1a4f8c8563e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -76,6 +76,10 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile) if(!faction) //No faction, no reason to attack anybody. return null + // Reduce spam for when you put 20 rogue maint drones in a box. + if(!isturf(loc) && prob(33)) + return null + var/atom/T = null var/target_range = INFINITY for (var/atom/A in targets) @@ -431,6 +435,10 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile) if(ON_ATTACK_COOLDOWN(src)) return FALSE + // Can't break shit from inside crates and whatnot. + if(!isturf(loc)) + return + if(prob(break_stuff_probability) || bypass_prob) //bypass_prob is used to make mob destroy things in the way to our target for(var/card_dir in GLOB.cardinals) // North, South, East, West var/turf/target_turf = get_step(src, card_dir) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 7885b6c2d66..29457b9d15b 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -133,9 +133,15 @@ return "2" return "0" -//parses the message mode code (e.g. :h, :w) from text, such as that supplied to say. -//returns the message mode string or null for no message mode. -//standard mode is the mode returned for the special ';' radio code. +/** + * Parses the message mode code (e.g. :h, :w) from text, such as that supplied to Say. + * Standard mode is the mode returned for the special ';' radio code. + * + * * message - the original string being passed + * * standard_mode - the message mode itself + * + * Returns the message mode string. + */ /mob/proc/parse_message_mode(var/message, var/standard_mode="headset") if(length(message) >= 1 && copytext(message,1,2) == ";") return standard_mode diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index 4b311579bc9..1998734cbd6 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -259,8 +259,12 @@ var/obj/structure/stairs/staircase = locate() in target var/target_dir = get_dir(mover, target) + // If moving laterally off a staircase... if(!staircase && (target_dir != dir && target_dir != REVERSE_DIR(dir))) - INVOKE_ASYNC(src, PROC_REF(mob_fall), mover) + // And nothing blocks you from doing so... + if(CanPass(mover, target)) + // Then fall over, idiot. + INVOKE_ASYNC(src, PROC_REF(mob_fall), mover) return ..() diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm index 598d4c8e6e9..de2f990d1e6 100644 --- a/code/modules/power/fusion/core/core_field.dm +++ b/code/modules/power/fusion/core/core_field.dm @@ -226,7 +226,7 @@ // Roundstart update if(field_strength < 20) field_strength = 20 - field_strength_entropy_multiplier = clamp((owned_core.field_strength ** 1.075) / 40, 0.8, 2.0) + field_strength_entropy_multiplier = clamp((owned_core.field_strength ** 1.075) / 100, 0.33, 1.67) // Energy decay (entropy tax). if(plasma_temperature >= 1) var/lost = plasma_temperature * 0.00125 @@ -597,7 +597,7 @@ if(possible_s_reacts[cur_s_react] < 1) continue var/singleton/fusion_reaction/cur_reaction = get_fusion_reaction(cur_p_react, cur_s_react) - if(cur_reaction && plasma_temperature >= (cur_reaction.minimum_energy_level)&& possible_s_reacts[cur_p_react] >= cur_reaction.minimum_p_react) + if(cur_reaction && plasma_temperature >= cur_reaction.minimum_energy_level && possible_s_reacts[cur_p_react] >= cur_reaction.minimum_p_react) LAZYDISTINCTADD(possible_reactions, cur_reaction) // If there are no possible reactions here, abandon this primary reactant and move on. @@ -632,7 +632,7 @@ // Randomly determined amount to react. Starts at up to 1/20th, scales to up to 2/3rd at 20x min temp var/temp_over_min = plasma_temperature / (cur_reaction.minimum_energy_level * 20) - var/max_react_percent = clamp(temp_over_min, (1/20), (2/3)) + var/max_react_percent = clamp(temp_over_min, (1/10), (2/3)) var/amount_reacting = rand(1, (max_num_reactants * max_react_percent)) // Removing the reacting substances from the list of substances that are primed to react this cycle. diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm index db7ac959224..153613ebb5e 100644 --- a/code/modules/power/fusion/fusion_reactions.dm +++ b/code/modules/power/fusion/fusion_reactions.dm @@ -109,7 +109,7 @@ GLOBAL_LIST(fusion_reactions) energy_production = 18 products = list(GAS_DEUTERIUM = 1) radiation = 48 - instability = 2.8 + instability = 2.1 minimum_energy_level = 200000 priority = 9 @@ -164,7 +164,7 @@ GLOBAL_LIST(fusion_reactions) energy_consumption = 1 energy_production = 40 radiation = 18 - instability = 2.8 + instability = 2.2 products = list(GAS_TRITIUM = 2) minimum_energy_level = 2000000 priority = 30 @@ -200,7 +200,7 @@ GLOBAL_LIST(fusion_reactions) energy_production = 10 products = list(GAS_HELIUM = 2) radiation = 36 - instability = 5 + instability = 3 minimum_energy_level = 25000 priority = 19 @@ -221,7 +221,7 @@ GLOBAL_LIST(fusion_reactions) p_react = GAS_HELIUMFUEL s_react = GAS_HELIUMFUEL energy_consumption = 2 - energy_production = 96 + energy_production = 128 products = list(GAS_HELIUM = 1, GAS_HYDROGEN = 2) radiation = 1 minimum_energy_level = 3200000 diff --git a/code/modules/power/lights/fixtures.dm b/code/modules/power/lights/fixtures.dm index cc337b8b451..c09d27eef4e 100644 --- a/code/modules/power/lights/fixtures.dm +++ b/code/modules/power/lights/fixtures.dm @@ -275,7 +275,7 @@ /obj/machinery/light/proc/use_emergency_power(pwr = 0.2) if (!has_emergency_power(pwr)) return FALSE - if (cell.charge > 300) //it's meant to handle 120 W, ya doofus + if (cell.charge > 600) // Default mini-cell max is 500. visible_message(SPAN_WARNING("\The [src] short-circuits!"), SPAN_WARNING("You hear glass breaking.")) broken() return FALSE diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 5427f439c5d..fa2d15c1c30 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -41,7 +41,7 @@ /obj/machinery/power/emitter/mechanics_hints(mob/user, distance, is_adjacent) . += ..() . += "Standing next to \the [src] and examining it will let you see how many shots it has fired since last being turned on." - . += "ALT-click the [src] to lock or unlock it (if you have the appropriate ID access)." + . += "Using an Engineering ID on \the [src] will toggle its control locks." . += "You can attach a signaler to \the [src] to remotely toggle it on and off (so long as its controls are not locked)." /obj/machinery/power/emitter/assembly_hints(mob/user, distance, is_adjacent) @@ -216,10 +216,11 @@ var/obj/item/weldingtool/WT = attacking_item if(active) to_chat(user, SPAN_NOTICE("You cannot unweld \the [src] while it's active.")) - return + return FALSE switch(state) if(EMITTER_LOOSE) to_chat(user, SPAN_WARNING("\The [src] needs to be wrenched to the floor.")) + return FALSE if(EMITTER_BOLTED) if(WT.use(0, user)) playsound(get_turf(src), 'sound/items/welder_pry.ogg', 50, TRUE) @@ -228,12 +229,14 @@ SPAN_WARNING("You hear the sound of metal being welded.")) if(attacking_item.use_tool(src, user, 20, volume = 50)) if(!src || !WT.isOn()) - return + return FALSE state = EMITTER_WELDED to_chat(user, SPAN_NOTICE("You weld \the [src] to the floor.")) connect_to_network() + return TRUE else to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) + return FALSE if(EMITTER_WELDED) if(WT.use(0, user)) playsound(get_turf(src), 'sound/items/welder_pry.ogg', 50, TRUE) @@ -242,38 +245,37 @@ SPAN_WARNING("You hear the sound of metal being welded.")) if(attacking_item.use_tool(src, user, 20, volume = 50)) if(!src || !WT.isOn()) - return + return FALSE state = EMITTER_BOLTED to_chat(user, SPAN_NOTICE("You cut \the [src] free from the floor.")) disconnect_from_network() + return TRUE else to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) - return - ..() - return + return FALSE -/obj/machinery/power/emitter/AltClick(mob/user) - if(Adjacent(user)) - add_fingerprint(user) + if(attacking_item.GetID()) if(emagged) to_chat(user, SPAN_WARNING("The lock seems to be broken.")) - return + return FALSE if(allowed(user)) if(active) locked = !locked - if(locked) - playsound(src, 'sound/machines/terminal/terminal_button03.ogg', 35, FALSE) - else - playsound(src, 'sound/machines/terminal/terminal_button01.ogg', 35, FALSE) + playsound(src, 'sound/machines/terminal/terminal_button01.ogg', 35, FALSE) balloon_alert(user, locked ? "locked" : "unlocked") + to_chat(user, SPAN_NOTICE("The controls are now [locked ? "locked." : "unlocked."]")) + return TRUE else locked = FALSE //just in case it somehow gets locked to_chat(user, SPAN_WARNING("The controls can only be locked when \the [src] is online.")) + return FALSE else - to_chat(user, SPAN_WARNING("Access denied.")) playsound(src, 'sound/machines/terminal/terminal_error.ogg', 25, FALSE) balloon_alert(user, "access denied!") - return + to_chat(user, SPAN_WARNING("Access denied.")) + return FALSE + ..() + return /obj/machinery/power/emitter/emag_act(remaining_charges, mob/user) if(!emagged) diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm index 8f1dbe1f787..5ea1c9d3063 100644 --- a/code/modules/security levels/security levels.dm +++ b/code/modules/security levels/security levels.dm @@ -6,8 +6,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) //4 = code delta //config.alert_desc_blue_downto -/var/datum/announcement/priority/security/security_announcement_sound = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/announcements/security_level.ogg')) -/var/datum/announcement/priority/security/security_announcement = new(do_log = 0, do_newscast = 1) +/var/datum/announcement/priority/security/security_announcement_sound = new(do_log = FALSE, do_newscast = TRUE, new_sound = sound('sound/misc/announcements/security_level.ogg')) +/var/datum/announcement/priority/security/security_announcement = new(do_log = FALSE, do_newscast = TRUE) /proc/set_security_level(var/level) switch(level) diff --git a/html/changelogs/Bat-Bugfixes.yml b/html/changelogs/Bat-Bugfixes.yml new file mode 100644 index 00000000000..2e8fab31c45 --- /dev/null +++ b/html/changelogs/Bat-Bugfixes.yml @@ -0,0 +1,35 @@ +# Your name. +author: Batrachophrenoboocosmomachia + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - balance: "Budget insulated gloves no longer able to be manually restocked in YouTool (random insulation coefficient reroll exploit)." + - bugfix: "Replaces missing req_access values from D3 Medical Equipment Storage." + - bugfix: "Emitters can be rotated again (alt-click lock toggling disabled)." + - bugfix: "Lights no longer explode when toggled off and on." + - bugfix: "Langchat images now pop up for untranslated speech." + - bugfix: "Cyborgs can no longer flip Plasteel Barricades remotely." + - bugfix: "Fixes ghost vision inconsistently toggling when Following mobs." + - bugfix: "Removes deprecated 'Gender and Pronouns' section from Appearance Changer (has been replaced by 'Pronouns' section)." + - bugfix: "Offship locations will not print Mining Yield Declarations saying they're from SCCV Horizon." + - bugfix: "Simple mobs which target their surroundings (destroying tables windows etc) will not do so if inside a container." + - bugfix: "Newscaster Announcements channel now logs announcements made by heads of staff." + - bugfix: "Held phoron- or chlorine-contaminated items will respect if you're wearing a sealed suit or thick gloves (that is to say, if the gloves provide fire protection)." + - bugfix: "Fixes runtime in Electrical Storm event." + - bugfix: "Fixes some bounties returning 0 credit reward due to rounding issues." + - bugfix: "Removes old fusion debug vars, fixed outdated maths." + - bugfix: "Fixes Horizon kitchen alt fridge being swapped w/ empty freezer." + - bugfix: "Fixes chameleon projector sometimes turning user invisible." + - bugfix: "You are again able to push an object currently being pulled." + - bugfix: "Command Support roles which start with flash-protective sunglasses can now also choose them in their loadout." + - code_imp: "Updates more code comments to DMDocs." + - code_imp: "Corrects poison/venom for greimorian variable naming." + - rscadd: "Adds missing fire alarm to Paramedic Quarters." + - rscadd: "Holomap now respects and displays outer hull structure." diff --git a/maps/_common/mapsystem/map.dm b/maps/_common/mapsystem/map.dm index 2c39df19ebc..35530a55945 100644 --- a/maps/_common/mapsystem/map.dm +++ b/maps/_common/mapsystem/map.dm @@ -1,7 +1,8 @@ /datum/map var/name = "Unnamed Map" var/full_name = "Unnamed Map" - var/description // Basic info about the map. Shows up in the new player options. + /// Basic info about the map. Shows up in the new player options. + var/description var/path /** @@ -11,18 +12,26 @@ */ var/list/traits = list() - var/list/admin_levels = list() // Z-levels for admin functionality (Centcom, shuttle transit, etc) - var/list/contact_levels = list() // Z-levels that can be contacted from the station, for eg announcements - var/list/player_levels = list() // Z-levels a character can typically reach - var/list/sealed_levels = list() // Z-levels that don't allow random transit at edge - var/list/restricted_levels = list() // Z-levels that dont allow ghosts to randomly move around - var/list/empty_levels = null // Empty Z-levels that may be used for various things (currently used by bluespace jump) + /// Z-levels for admin functionality (Centcom, shuttle transit, etc) + var/list/admin_levels = list() + /// Z-levels that can be contacted from the station, for eg announcements + var/list/contact_levels = list() + /// Z-levels a character can typically reach + var/list/player_levels = list() + /// Z-levels that don't allow random transit at edge + var/list/sealed_levels = list() + /// Z-levels that dont allow ghosts to randomly move around + var/list/restricted_levels = list() + /// Empty Z-levels that may be used for various things (currently used by bluespace jump) + var/list/empty_levels = null - var/list/map_levels // Z-levels available to various consoles, such as the crew monitor. Defaults to station_levels if unset. + /// Z-levels available to various consoles, such as the crew monitor. Defaults to station_levels if unset. + var/list/map_levels - var/list/base_turf_by_z = list() // Custom base turf by Z-level. Defaults to world.turf for unlisted Z-levels + /// Custom base turf by Z-level. Defaults to world.turf for unlisted Z-levels + var/list/base_turf_by_z = list() - //This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. + /// This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. var/list/accessible_z_levels = list() var/list/allowed_jobs @@ -48,7 +57,8 @@ var/list/spawn_types - var/shuttle_call_restarts = FALSE // if true, calling crew transfer or evac just restarts the round in ten minute + /// if true, calling crew transfer or evac just restarts the round in ten minute + var/shuttle_call_restarts = FALSE var/shuttle_call_restart_timer var/shuttle_docked_message var/shuttle_leaving_dock @@ -72,15 +82,20 @@ var/evac_controller_type = /datum/evacuation_controller - var/list/station_networks = list() // Camera networks that will show up on the console. + /// Camera networks that will show up on the console. + var/list/station_networks = list() - var/list/holodeck_programs = list() // map of string ids to /datum/holodeck_program instances + /// map of string ids to /datum/holodeck_program instances + var/list/holodeck_programs = list() + /** + * map of maps - first level maps from list-of-programs string id (e.g. "BarPrograms") to another map + * this is in order to support multiple holodeck program listings for different holodecks + * second level maps from program friendly display names ("Picnic Area") to program string ids ("picnicarea") + * as defined in holodeck_programs + */ var/list/holodeck_supported_programs = list() - // map of maps - first level maps from list-of-programs string id (e.g. "BarPrograms") to another map - // this is in order to support multiple holodeck program listings for different holodecks - // second level maps from program friendly display names ("Picnic Area") to program string ids ("picnicarea") - // as defined in holodeck_programs - var/list/holodeck_restricted_programs = list() // as above... but EVIL! + /// as above... but EVIL! + var/list/holodeck_restricted_programs = list() var/force_spawnpoint = FALSE var/allowed_spawns = list("Arrivals Shuttle","Gateway", "Cryogenic Storage", "Cyborg Storage") @@ -90,14 +105,21 @@ var/lobby_icon // This is what the game uses to store the chosen dmi. var/list/lobby_screens = list() // The list of lobby screen to pick() from. Leave this unset to fill from the lobby icon DMI. - var/lobby_transitions = FALSE // If a number, transition between the lobby screens with this delay instead of picking just one. + /// If a number, transition between the lobby screens with this delay instead of picking just one. + var/lobby_transitions = FALSE - var/use_overmap = FALSE //If overmap should be used (including overmap space travel override) - var/overmap_size = 20 //Dimensions of overmap zlevel if overmap is used. - var/overmap_z = 0 //If 0 will generate overmap zlevel on init. Otherwise will populate the zlevel provided. - var/overmap_event_areas = 0 //How many event "clouds" will be generated - var/list/map_shuttles = list() // A list of all our shuttles. - var/default_sector = SECTOR_ROMANOVICH //What is the default space sector for this map + /// If overmap should be used (including overmap space travel override) + var/use_overmap = FALSE + /// Dimensions of overmap zlevel if overmap is used. + var/overmap_size = 20 + /// If 0 will generate overmap zlevel on init. Otherwise will populate the zlevel provided. + var/overmap_z = 0 + /// How many event "clouds" will be generated + var/overmap_event_areas = 0 + /// A list of all our shuttles. + var/list/map_shuttles = list() + /// What is the default space sector for this map + var/default_sector = SECTOR_ROMANOVICH //event messages @@ -124,15 +146,20 @@ var/rogue_drone_destroyed_message = "Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered." var/num_exoplanets = 0 - var/list/planet_size //dimensions of planet zlevel, defaults to world size. Due to how maps are generated, must be (2^n+1) e.g. 17,33,65,129 etc. Map will just round up to those if set to anything other. + ///Dimensions of planet zlevel, defaults to world size. Due to how maps are generated, must be (2^n+1) e.g. 17,33,65,129 etc. Map will just round up to those if set to anything other. + var/list/planet_size var/min_offmap_players = 0 var/away_site_budget = 0 var/away_ship_budget = 0 - var/away_variance = 0 //how much higher the budgets can randomly go + ///How much higher the budgets can randomly go + var/away_variance = 0 - var/allow_borgs_to_leave = FALSE //this controls if borgs can leave the station or ship without exploding - var/area/warehouse_basearea //this controls where the cargospawner tries to populate warehouse items - var/area/warehouse_packagearea // used to handle spawnpoints for the packages that spawned after Initialize. See: `receptacle.dm`. + ///This controls if borgs can leave the station or ship without exploding + var/allow_borgs_to_leave = FALSE + ///This controls where the cargospawner tries to populate warehouse items + var/area/warehouse_basearea + /// used to handle spawnpoints for the packages that spawned after Initialize. See: `receptacle.dm`. + var/area/warehouse_packagearea /** * A list of the shuttles on this map, used by the Shuttle Manifest program to populate itself. diff --git a/maps/away/away_site/quarantined_outpost/quarantined_outpost_objects.dm b/maps/away/away_site/quarantined_outpost/quarantined_outpost_objects.dm index fa5a26da0e2..dfda6b79570 100644 --- a/maps/away/away_site/quarantined_outpost/quarantined_outpost_objects.dm +++ b/maps/away/away_site/quarantined_outpost/quarantined_outpost_objects.dm @@ -290,8 +290,8 @@ GLOBAL_LIST_EMPTY(trackables_pool) melee_damage_lower = 5 melee_damage_upper = 10 armor_penetration = 5 - poison_per_bite = 1 - poison_type = /singleton/reagent/soporific // sweet, horrible dreams for its undoubting victims + venom_per_bite = 1 + venom_type = /singleton/reagent/soporific // sweet, horrible dreams for its undoubting victims /mob/living/simple_animal/hostile/giant_spider/lesser_abomination/Initialize() . = ..() diff --git a/maps/runtime/runtime.dmm b/maps/runtime/runtime.dmm index cb0d294b060..e1372eaf041 100644 --- a/maps/runtime/runtime.dmm +++ b/maps/runtime/runtime.dmm @@ -2948,6 +2948,12 @@ /obj/machinery/shipsensors, /turf/template_noop, /area/engineering) +"EY" = ( +/obj/effect/landmark/minimap_poi{ + desc = "Minimap description ayup" + }, +/turf/simulated/floor/plating, +/area/construction) "Fn" = ( /obj/machinery/light{ brightness_range = 16; @@ -9331,7 +9337,7 @@ de yk dq dq -de +EY de rE WV diff --git a/maps/sccv_horizon/areas/horizon_areas_operations.dm b/maps/sccv_horizon/areas/horizon_areas_operations.dm index 096c54f6a93..bd265681f59 100644 --- a/maps/sccv_horizon/areas/horizon_areas_operations.dm +++ b/maps/sccv_horizon/areas/horizon_areas_operations.dm @@ -83,6 +83,7 @@ /area/horizon/hangar/control name = "Hangar Control Room" + holomap_color = HOLOMAP_AREACOLOR_COMMAND sound_environment = SOUND_AREA_SMALL_ENCLOSED /area/horizon/hangar/intrepid @@ -95,6 +96,7 @@ /area/horizon/hangar/operations name = "Starboard Auxiliary Hangar" + holomap_color = HOLOMAP_AREACOLOR_OPERATIONS area_blurb = "A big, open room, home to the SCCV Horizon's mining shuttle, the Spark." area_blurb_category = "hanger" diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm index 632233e5c03..a33ffb6443f 100644 --- a/maps/sccv_horizon/sccv_horizon.dmm +++ b/maps/sccv_horizon/sccv_horizon.dmm @@ -6740,32 +6740,6 @@ /obj/structure/extinguisher_cabinet/north, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/central) -"aUG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/platform_deco/dark{ - dir = 6 - }, -/obj/structure/platform_deco/ledge/dark{ - dir = 6 - }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/rod_railing/bar{ - dir = 6 - }, -/obj/structure/platform/bar{ - dir = 1 - }, -/obj/machinery/vending/overloaders, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plating, -/area/horizon/service/bar) "aUI" = ( /obj/machinery/iv_drip, /obj/effect/floor_decal/industrial/warning, @@ -8457,27 +8431,6 @@ /obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/engineering/reactor/indra/mainchamber) -"bhc" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch{ - dir = 4; - lights = 0; - locked = 1; - name = "Maintenance Hatch" - }, -/obj/machinery/door/firedoor{ - dir = 4 - }, -/turf/simulated/floor/tiled/full, -/area/horizon/medical/ward/isolation) "bhj" = ( /obj/effect/floor_decal/corner/teal{ dir = 6 @@ -23991,6 +23944,20 @@ }, /turf/simulated/floor/tiled/dark/full, /area/horizon/tcommsat/chamber) +"dpO" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/medical{ + dir = 1; + name = "Staff Facilities"; + req_access = list(5) + }, +/turf/simulated/floor/tiled/full, +/area/horizon/medical/washroom) "dpQ" = ( /obj/effect/map_effect/window_spawner/full/reinforced/grille/firedoor, /obj/machinery/door/blast/regular{ @@ -31356,27 +31323,6 @@ /obj/effect/floor_decal/industrial/warning, /turf/unsimulated/floor, /area/antag/mercenary) -"epV" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/medical{ - dir = 4; - name = "Staff Facilities"; - req_access = list(5) - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/full, -/area/horizon/medical/smoking) "epX" = ( /obj/structure/bed/stool/chair/office/dark, /obj/structure/sign/double/map/left{ @@ -33659,6 +33605,27 @@ /obj/structure/table/wood, /turf/simulated/floor/carpet, /area/horizon/command/bridge/cciaroom) +"eHB" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch{ + dir = 4; + lights = 0; + locked = 1; + name = "Maintenance Hatch" + }, +/turf/simulated/floor/tiled/full, +/area/horizon/medical/ward/isolation) "eHI" = ( /obj/machinery/door/blast/odin{ _wifi_id = "odin_arrivals_lockdown"; @@ -34035,6 +34002,14 @@ }, /turf/simulated/floor/reinforced, /area/horizon/operations/secure_ammunition_storage) +"eLI" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/closet/secure_closet/refrigerator/station/alt, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/service/kitchen) "eLJ" = ( /obj/machinery/power/breakerbox/activated{ RCon_tag = "Medical Substation" @@ -39775,6 +39750,29 @@ /obj/item/device/radio/intercom/north, /turf/simulated/floor/tiled, /area/horizon/security/checkpoint2) +"fDs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id = "LCKDshutters"; + name = "Medical Lockdown Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor{ + req_one_access = list(24,11,67,73); + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + dir = 4; + name = "Deck 3 Medical Maintenance"; + req_access = list(5) + }, +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/aft/holodeck) "fDv" = ( /obj/structure/cable{ icon_state = "4-8" @@ -40272,23 +40270,6 @@ }, /turf/simulated/floor/tiled, /area/horizon/operations/machinist/surgicalbay) -"fHu" = ( -/obj/machinery/door/airlock/maintenance{ - dir = 4; - name = "Deck 3 Medical Maintenance"; - req_access = list(5) - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id = "LCKDshutters"; - name = "Medical Lockdown Shutters"; - opacity = 0 - }, -/turf/simulated/floor/tiled/full, -/area/horizon/maintenance/deck_3/aft/holodeck) "fHU" = ( /obj/structure/cable{ icon_state = "1-2" @@ -45377,18 +45358,6 @@ /obj/effect/decal/cleanable/dirt, /turf/unsimulated/floor, /area/antag/raider) -"grO" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/rod_railing/bar, -/obj/structure/platform/bar{ - dir = 1 - }, -/obj/structure/flora/pottedplant/fortune_flower, -/turf/simulated/floor/plating, -/area/horizon/service/bar) "grP" = ( /obj/effect/floor_decal/corner/brown{ dir = 5 @@ -54989,6 +54958,18 @@ }, /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenobiology) +"hHX" = ( +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/rod_railing/bar, +/obj/structure/platform/bar{ + dir = 1 + }, +/obj/structure/flora/pottedplant/fortune_flower, +/turf/simulated/floor/plating, +/area/horizon/service/bar) "hHY" = ( /obj/structure/platform{ dir = 4 @@ -67980,6 +67961,30 @@ }, /turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/starboard/far) +"jBS" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + req_one_access = list(24,11,67,73); + dir = 4 + }, +/obj/machinery/door/airlock/medical{ + dir = 4; + name = "Staff Facilities"; + req_access = list(5) + }, +/turf/simulated/floor/tiled/full, +/area/horizon/medical/smoking) "jBX" = ( /obj/structure/lattice, /obj/structure/cable/green{ @@ -72458,26 +72463,6 @@ /obj/effect/floor_decal/industrial/outline/emergency_closet, /turf/simulated/floor/tiled/dark, /area/horizon/hallway/primary/deck_3/central) -"kiA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - dir = 4; - name = "Deck 3 Medical Maintenance"; - req_access = list(5) - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id = "LCKDshutters"; - name = "Medical Lockdown Shutters"; - opacity = 0 - }, -/turf/simulated/floor, -/area/horizon/maintenance/deck_3/aft/holodeck) "kiI" = ( /obj/structure/cable{ icon_state = "4-8" @@ -84389,6 +84374,10 @@ /obj/effect/floor_decal/industrial/outline/firefighting_closet, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/port) +"lNU" = ( +/obj/effect/landmark/newplayer_start, +/turf/unsimulated/floor, +/area/centcom/start) "lOb" = ( /obj/effect/landmark{ name = "Holocarp Spawn" @@ -106568,16 +106557,6 @@ /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/xenobiology/xenoflora) -"pbt" = ( -/obj/machinery/door/airlock/medical{ - dir = 1; - id_tag = "deck2_medicaltoilet"; - name = "Washroom Stall"; - req_access = list(5) - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/full, -/area/horizon/medical/washroom) "pbE" = ( /obj/machinery/firealarm/south, /obj/structure/table/standard, @@ -109503,14 +109482,6 @@ }, /turf/simulated/floor/tiled/dark, /area/horizon/operations/loading) -"pAh" = ( -/obj/structure/closet/secure_closet/freezer, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/full, -/area/horizon/service/kitchen) "pAl" = ( /turf/unsimulated/floor/wood, /area/centcom/specops) @@ -120644,10 +120615,6 @@ }, /turf/simulated/floor/tiled/dark/full, /area/horizon/operations/mail_room) -"rhD" = ( -/obj/effect/landmark/newplayer_start, -/turf/unsimulated/floor, -/area/centcom/start) "rhL" = ( /obj/effect/floor_decal/spline/plain, /obj/structure/flora/tree/grove, @@ -127458,28 +127425,6 @@ name = "thruster mount" }, /area/horizon/engineering/atmos/propulsion) -"sfN" = ( -/obj/machinery/door/airlock/command{ - dir = 4; - id_tag = "CMOdoor"; - name = "Chief Medical Officer's Office"; - req_access = list(40) - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/full, -/area/horizon/command/heads/cmo) "sfZ" = ( /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_2/fore) @@ -133914,29 +133859,6 @@ }, /turf/simulated/floor/tiled, /area/horizon/engineering/hallway/aft) -"sYc" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/door/airlock/glass_medical{ - dir = 1; - frequency = 1379; - id_tag = "processing_airlock_exterior"; - locked = 1; - name = "Isolation Ward Exterior"; - req_access = list(5) - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/horizon/medical/ward/isolation) "sYf" = ( /obj/effect/decal/fake_object/light_source/invisible, /turf/unsimulated/floor/rubber_carpet, @@ -136606,6 +136528,32 @@ /obj/effect/floor_decal/industrial/warning/full, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/research) +"trN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/platform_deco/dark{ + dir = 6 + }, +/obj/structure/platform_deco/ledge/dark{ + dir = 6 + }, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/rod_railing/bar{ + dir = 6 + }, +/obj/structure/platform/bar{ + dir = 1 + }, +/obj/machinery/vending/overloaders, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plating, +/area/horizon/service/bar) "trQ" = ( /obj/machinery/light/small{ dir = 8 @@ -139856,6 +139804,26 @@ }, /turf/simulated/floor/wood, /area/horizon/service/chapel/office) +"tPz" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id = "LCKDshutters"; + name = "Medical Lockdown Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor{ + req_one_access = list(24,11,67,73); + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + dir = 4; + name = "Deck 3 Medical Maintenance"; + req_access = list(5) + }, +/turf/simulated/floor/tiled/full, +/area/horizon/maintenance/deck_3/aft/holodeck) "tPH" = ( /obj/effect/decal/fake_object{ dir = 4; @@ -143334,29 +143302,6 @@ /obj/structure/bed/stool/chair/office/bridge, /turf/simulated/floor/tiled/dark, /area/horizon/shuttle/intrepid/flight_deck) -"uqy" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass_medical{ - dir = 1; - name = "Medical Equipment" - }, -/turf/simulated/floor/tiled/full, -/area/horizon/medical/equipment) "uqz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -152033,6 +151978,16 @@ /obj/random/contraband, /turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/starboard/far) +"vzT" = ( +/obj/effect/floor_decal/corner/white/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/table/reinforced/steel, +/obj/structure/roller_rack/two, +/obj/machinery/firealarm/east, +/turf/simulated/floor/tiled, +/area/horizon/medical/paramedic) "vzV" = ( /obj/structure/bed/stool/chair/office/light{ dir = 8 @@ -161282,6 +161237,29 @@ }, /turf/simulated/floor/holofloor/tiled, /area/horizon/holodeck/source_battlemonsters) +"wNr" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_medical{ + dir = 1; + frequency = 1379; + id_tag = "processing_airlock_exterior"; + locked = 1; + name = "Isolation Ward Exterior"; + req_access = list(5) + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/medical/ward/isolation) "wNx" = ( /obj/effect/floor_decal/corner/red/full{ dir = 8 @@ -165022,18 +165000,6 @@ }, /turf/simulated/floor/tiled/dark, /area/shuttle/legion) -"xoo" = ( -/obj/effect/floor_decal/corner/white/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/table/reinforced/steel, -/obj/structure/roller_rack/two, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/horizon/medical/paramedic) "xos" = ( /obj/effect/floor_decal/corner/mauve{ dir = 5 @@ -165766,29 +165732,6 @@ /obj/machinery/firealarm/west, /turf/simulated/floor/tiled/dark, /area/horizon/service/bar) -"xtD" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/medical{ - dir = 1; - name = "Staff Facilities"; - req_access = list(5) - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/full, -/area/horizon/medical/washroom) "xtJ" = ( /obj/item/device/flashlight/lantern, /turf/simulated/floor/holofloor/beach/sand{ @@ -166134,6 +166077,16 @@ }, /turf/simulated/floor/tiled/dark, /area/shuttle/merchant) +"xwk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + dir = 1; + id_tag = "deck2_medicaltoilet"; + name = "Washroom Stall"; + req_access = list(5) + }, +/turf/simulated/floor/tiled/full, +/area/horizon/medical/washroom) "xwv" = ( /obj/structure/railing/mapped{ dir = 4 @@ -171000,6 +170953,31 @@ }, /turf/space/dynamic, /area/horizon/exterior) +"yfI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + req_one_access = list(24,11,67,73); + dir = 4 + }, +/obj/machinery/door/airlock/command{ + dir = 4; + id_tag = "CMOdoor"; + name = "Chief Medical Officer's Office"; + req_access = list(40) + }, +/turf/simulated/floor/tiled/full, +/area/horizon/command/heads/cmo) "yfK" = ( /turf/simulated/wall/r_wall, /area/horizon/rnd/xenobiology/hazardous) @@ -171746,6 +171724,21 @@ /obj/item/deployable_kit/legion_barrier, /turf/unsimulated/floor, /area/centcom/legion/hangar5) +"ykS" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/medical{ + dir = 1; + name = "Medical Equipment"; + req_access = list(5) + }, +/turf/simulated/floor/tiled/full, +/area/horizon/medical/equipment) "ykW" = ( /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ @@ -266877,7 +266870,7 @@ kSN ezA aNt iyD -grO +hHX ipz fjc ixZ @@ -267134,7 +267127,7 @@ pns inP rfq klT -aUG +trN miR ahF fRs @@ -273564,7 +273557,7 @@ rjz gbX aZJ nBM -pAh +eLI bhP cTZ eby @@ -327497,12 +327490,12 @@ gGy sFu cGW oqZ -epV +jBS koz hFo qdk qdk -sfN +yfI qdk qdk nqd @@ -327753,7 +327746,7 @@ oGv cAt cKc ozA -uqy +ykS dht eJp keX @@ -328519,7 +328512,7 @@ xMt ubA rjp hzJ -pbt +xwk dkt vvz pIv @@ -328781,7 +328774,7 @@ wKe sgS wiq evg -xtD +dpO tlV hvv jjc @@ -329289,7 +329282,7 @@ mfe woh eCo eai -bhc +eHB eai eai eai @@ -329809,7 +329802,7 @@ oGS jNl lok lsm -sYc +wNr kvi rUu dsa @@ -330849,7 +330842,7 @@ iMl nBN eqd uhd -xoo +vzT hpp sSD oMa @@ -331095,11 +331088,11 @@ eai eai eai eai -kiA +fDs rkE rkE rkE -fHu +tPz rkE eVP eVP @@ -369260,7 +369253,7 @@ eSV eSV qSA qSA -rhD +lNU qSA qSA "} diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger.tsx b/tgui/packages/tgui/interfaces/AppearanceChanger.tsx index c0e81984b30..fc2b5c48566 100644 --- a/tgui/packages/tgui/interfaces/AppearanceChanger.tsx +++ b/tgui/packages/tgui/interfaces/AppearanceChanger.tsx @@ -103,25 +103,15 @@ export const GenderWindow = (props, context) => { const { act, data } = useBackend(context); return ( -
- {data.valid_genders.map((new_gender) => ( +
+ {data.valid_pronouns.map((pronoun) => (
); }; diff --git a/tgui/public/tgui.bundle.js b/tgui/public/tgui.bundle.js index acab924822b..ea597f28fe3 100644 --- a/tgui/public/tgui.bundle.js +++ b/tgui/public/tgui.bundle.js @@ -1 +1 @@ -!function(){var e={36997:function(e,t,n){"use strict";t.__esModule=!0,t.popperGenerator=h,t.createPopper=void 0;var o=p(n(65811)),r=p(n(62408)),a=p(n(39662)),i=p(n(95111)),c=(p(n(25462)),p(n(23967))),l=p(n(17850)),u=(p(n(23849)),p(n(6559)),p(n(91561)),p(n(13043))),d=p(n(63308));t.detectOverflow=d["default"];var s=n(1316);n(61797);function p(e){return e&&e.__esModule?e:{"default":e}}var m={placement:"bottom",modifiers:[],strategy:"absolute"};function f(){for(var e=arguments.length,t=new Array(e),n=0;n=0&&(0,d.isHTMLElement)(e)?(0,c["default"])(e):e;if(!(0,d.isElement)(n))return[];return t.filter((function(e){return(0,d.isElement)(e)&&(0,m["default"])(e,n)&&"body"!==(0,f["default"])(e)}))}(e):[].concat(t),r=[].concat(o,[n]),a=r[0],l=r.reduce((function(t,n){var o=b(e,n);return t.top=(0,C.max)(o.top,t.top),t.right=(0,C.min)(o.right,t.right),t.bottom=(0,C.min)(o.bottom,t.bottom),t.left=(0,C.max)(o.left,t.left),t}),b(e,a));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l};var o=n(61797),r=g(n(68056)),a=g(n(52779)),i=g(n(39662)),c=g(n(95111)),l=g(n(67977)),u=g(n(25462)),d=n(1316),s=g(n(93529)),p=g(n(62576)),m=g(n(63171)),f=g(n(22999)),h=g(n(24955)),C=n(36083);function g(e){return e&&e.__esModule?e:{"default":e}}function b(e,t){return t===o.viewport?(0,h["default"])((0,r["default"])(e)):(0,d.isHTMLElement)(t)?function(e){var t=(0,s["default"])(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):(0,h["default"])((0,a["default"])((0,l["default"])(e)))}},65811:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){void 0===n&&(n=!1);var d=(0,i.isHTMLElement)(t),s=(0,i.isHTMLElement)(t)&&function(e){var t=e.getBoundingClientRect(),n=t.width/e.offsetWidth||1,o=t.height/e.offsetHeight||1;return 1!==n||1!==o}(t),p=(0,l["default"])(t),m=(0,o["default"])(e,s),f={scrollLeft:0,scrollTop:0},h={x:0,y:0};(d||!d&&!n)&&(("body"!==(0,a["default"])(t)||(0,u["default"])(p))&&(f=(0,r["default"])(t)),(0,i.isHTMLElement)(t)?((h=(0,o["default"])(t,!0)).x+=t.clientLeft,h.y+=t.clientTop):p&&(h.x=(0,c["default"])(p)));return{x:m.left+f.scrollLeft-h.x,y:m.top+f.scrollTop-h.y,width:m.width,height:m.height}};var o=d(n(93529)),r=d(n(62317)),a=d(n(22999)),i=n(1316),c=d(n(54418)),l=d(n(67977)),u=d(n(63383));function d(e){return e&&e.__esModule?e:{"default":e}}},25462:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,r["default"])(e).getComputedStyle(e)};var o,r=(o=n(83808))&&o.__esModule?o:{"default":o}},67977:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(((0,o.isElement)(e)?e.ownerDocument:e.document)||window.document).documentElement};var o=n(1316)},52779:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=(0,o["default"])(e),l=(0,i["default"])(e),u=null==(t=e.ownerDocument)?void 0:t.body,d=(0,c.max)(n.scrollWidth,n.clientWidth,u?u.scrollWidth:0,u?u.clientWidth:0),s=(0,c.max)(n.scrollHeight,n.clientHeight,u?u.scrollHeight:0,u?u.clientHeight:0),p=-l.scrollLeft+(0,a["default"])(e),m=-l.scrollTop;"rtl"===(0,r["default"])(u||n).direction&&(p+=(0,c.max)(n.clientWidth,u?u.clientWidth:0)-d);return{width:d,height:s,x:p,y:m}};var o=l(n(67977)),r=l(n(25462)),a=l(n(54418)),i=l(n(43581)),c=n(36083);function l(e){return e&&e.__esModule?e:{"default":e}}},66860:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},62408:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=e.offsetWidth,o=e.offsetHeight;Math.abs(t.width-n)<=1&&(n=t.width);Math.abs(t.height-o)<=1&&(o=t.height);return{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}};var o,r=(o=n(93529))&&o.__esModule?o:{"default":o}},22999:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e?(e.nodeName||"").toLowerCase():null}},62317:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e!==(0,r["default"])(e)&&(0,a.isHTMLElement)(e)?(0,i["default"])(e):(0,o["default"])(e)};var o=c(n(43581)),r=c(n(83808)),a=n(1316),i=c(n(66860));function c(e){return e&&e.__esModule?e:{"default":e}}},95111:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=d(e);for(;n&&(0,c["default"])(n)&&"static"===(0,a["default"])(n).position;)n=d(n);if(n&&("html"===(0,r["default"])(n)||"body"===(0,r["default"])(n)&&"static"===(0,a["default"])(n).position))return t;return n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&(0,i.isHTMLElement)(e)){if("fixed"===(0,a["default"])(e).position)return null}var n=(0,l["default"])(e);for(;(0,i.isHTMLElement)(n)&&["html","body"].indexOf((0,r["default"])(n))<0;){var o=(0,a["default"])(n);if("none"!==o.transform||"none"!==o.perspective||"paint"===o.contain||-1!==["transform","perspective"].indexOf(o.willChange)||t&&"filter"===o.willChange||t&&o.filter&&"none"!==o.filter)return n;n=n.parentNode}return null}(e)||t};var o=u(n(83808)),r=u(n(22999)),a=u(n(25462)),i=n(1316),c=u(n(45574)),l=u(n(62576));function u(e){return e&&e.__esModule?e:{"default":e}}function d(e){return(0,i.isHTMLElement)(e)&&"fixed"!==(0,a["default"])(e).position?e.offsetParent:null}},62576:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){if("html"===(0,o["default"])(e))return e;return e.assignedSlot||e.parentNode||((0,a.isShadowRoot)(e)?e.host:null)||(0,r["default"])(e)};var o=i(n(22999)),r=i(n(67977)),a=n(1316);function i(e){return e&&e.__esModule?e:{"default":e}}},99597:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e){if(["html","body","#document"].indexOf((0,a["default"])(e))>=0)return e.ownerDocument.body;if((0,i.isHTMLElement)(e)&&(0,r["default"])(e))return e;return l((0,o["default"])(e))};var o=c(n(62576)),r=c(n(63383)),a=c(n(22999)),i=n(1316);function c(e){return e&&e.__esModule?e:{"default":e}}},68056:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=(0,r["default"])(e),i=t.visualViewport,c=n.clientWidth,l=n.clientHeight,u=0,d=0;i&&(c=i.width,l=i.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(u=i.offsetLeft,d=i.offsetTop));return{width:c,height:l,x:u+(0,a["default"])(e),y:d}};var o=i(n(83808)),r=i(n(67977)),a=i(n(54418));function i(e){return e&&e.__esModule?e:{"default":e}}},83808:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}},43581:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}};var o,r=(o=n(83808))&&o.__esModule?o:{"default":o}},54418:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,o["default"])((0,r["default"])(e)).left+(0,a["default"])(e).scrollLeft};var o=i(n(93529)),r=i(n(67977)),a=i(n(43581));function i(e){return e&&e.__esModule?e:{"default":e}}},1316:function(e,t,n){"use strict";t.__esModule=!0,t.isElement=function(e){var t=(0,r["default"])(e).Element;return e instanceof t||e instanceof Element},t.isHTMLElement=function(e){var t=(0,r["default"])(e).HTMLElement;return e instanceof t||e instanceof HTMLElement},t.isShadowRoot=function(e){if("undefined"==typeof ShadowRoot)return!1;var t=(0,r["default"])(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot};var o,r=(o=n(83808))&&o.__esModule?o:{"default":o}},63383:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+o)};var o,r=(o=n(25462))&&o.__esModule?o:{"default":o}},45574:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return["table","td","th"].indexOf((0,r["default"])(e))>=0};var o,r=(o=n(22999))&&o.__esModule?o:{"default":o}},39662:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e,t){var n;void 0===t&&(t=[]);var c=(0,o["default"])(e),u=c===(null==(n=e.ownerDocument)?void 0:n.body),d=(0,a["default"])(c),s=u?[d].concat(d.visualViewport||[],(0,i["default"])(c)?c:[]):c,p=t.concat(s);return u?p:p.concat(l((0,r["default"])(s)))};var o=c(n(99597)),r=c(n(62576)),a=c(n(83808)),i=c(n(63383));function c(e){return e&&e.__esModule?e:{"default":e}}},61797:function(e,t){"use strict";t.__esModule=!0,t.modifierPhases=t.afterWrite=t.write=t.beforeWrite=t.afterMain=t.main=t.beforeMain=t.afterRead=t.read=t.beforeRead=t.placements=t.variationPlacements=t.reference=t.popper=t.viewport=t.clippingParents=t.end=t.start=t.basePlacements=t.auto=t.left=t.right=t.bottom=t.top=void 0;t.top="top";var n="bottom";t.bottom=n;var o="right";t.right=o;var r="left";t.left=r;var a="auto";t.auto=a;var i=["top",n,o,r];t.basePlacements=i;var c="start";t.start=c;var l="end";t.end=l;t.clippingParents="clippingParents";t.viewport="viewport";t.popper="popper";t.reference="reference";var u=i.reduce((function(e,t){return e.concat([t+"-"+c,t+"-"+l])}),[]);t.variationPlacements=u;var d=[].concat(i,[a]).reduce((function(e,t){return e.concat([t,t+"-"+c,t+"-"+l])}),[]);t.placements=d;var s="beforeRead";t.beforeRead=s;var p="read";t.read=p;var m="afterRead";t.afterRead=m;var f="beforeMain";t.beforeMain=f;var h="main";t.main=h;var C="afterMain";t.afterMain=C;var g="beforeWrite";t.beforeWrite=g;var b="write";t.write=b;var v="afterWrite";t.afterWrite=v;var N=[s,p,m,f,h,C,g,b,v];t.modifierPhases=N},84195:function(e,t,n){"use strict";t.__esModule=!0;var o={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};t.createPopperLite=t.createPopper=t.createPopperBase=t.detectOverflow=t.popperGenerator=void 0;var r=n(61797);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===r[e]||(t[e]=r[e]))}));var a=n(16850);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var i=n(36997);t.popperGenerator=i.popperGenerator,t.detectOverflow=i.detectOverflow,t.createPopperBase=i.createPopper;var c=n(38385);t.createPopper=c.createPopper;var l=n(97126);t.createPopperLite=l.createPopper},59028:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(22999))&&o.__esModule?o:{"default":o},a=n(1316);var i={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];(0,a.isHTMLElement)(i)&&(0,r["default"])(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},c=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});(0,a.isHTMLElement)(o)&&(0,r["default"])(o)&&(Object.assign(o.style,c),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};t["default"]=i},25615:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=p(n(91561)),r=p(n(62408)),a=p(n(63171)),i=p(n(95111)),c=p(n(19398)),l=p(n(83158)),u=p(n(2595)),d=p(n(1724)),s=n(61797);n(1316);function p(e){return e&&e.__esModule?e:{"default":e}}var m=function(e,t){return e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e,(0,u["default"])("number"!=typeof e?e:(0,d["default"])(e,s.basePlacements))};var f={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,a=e.name,u=e.options,d=n.elements.arrow,p=n.modifiersData.popperOffsets,f=(0,o["default"])(n.placement),h=(0,c["default"])(f),C=[s.left,s.right].indexOf(f)>=0?"height":"width";if(d&&p){var g=m(u.padding,n),b=(0,r["default"])(d),v="y"===h?s.top:s.left,N="y"===h?s.bottom:s.right,V=n.rects.reference[C]+n.rects.reference[h]-p[h]-n.rects.popper[C],y=p[h]-n.rects.reference[h],_=(0,i["default"])(d),w=_?"y"===h?_.clientHeight||0:_.clientWidth||0:0,k=V/2-y/2,S=g[v],B=w-b[C]-g[N],x=w/2-b[C]/2+k,A=(0,l["default"])(S,x,B),D=h;n.modifiersData[a]=((t={})[D]=A,t.centerOffset=A-x,t)}},effect:function(e){var t=e.state,n=e.options.element,o=void 0===n?"[data-popper-arrow]":n;null!=o&&("string"!=typeof o||(o=t.elements.popper.querySelector(o)))&&(0,a["default"])(t.elements.popper,o)&&(t.elements.arrow=o)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};t["default"]=f},21481:function(e,t,n){"use strict";t.__esModule=!0,t.mapToStyles=p,t["default"]=void 0;var o=n(61797),r=d(n(95111)),a=d(n(83808)),i=d(n(67977)),c=d(n(25462)),l=d(n(91561)),u=n(36083);function d(e){return e&&e.__esModule?e:{"default":e}}var s={top:"auto",right:"auto",bottom:"auto",left:"auto"};function p(e){var t,n=e.popper,l=e.popperRect,d=e.placement,p=e.offsets,m=e.position,f=e.gpuAcceleration,h=e.adaptive,C=e.roundOffsets,g=!0===C?function(e){var t=e.x,n=e.y,o=window.devicePixelRatio||1;return{x:(0,u.round)((0,u.round)(t*o)/o)||0,y:(0,u.round)((0,u.round)(n*o)/o)||0}}(p):"function"==typeof C?C(p):p,b=g.x,v=void 0===b?0:b,N=g.y,V=void 0===N?0:N,y=p.hasOwnProperty("x"),_=p.hasOwnProperty("y"),w=o.left,k=o.top,S=window;if(h){var B=(0,r["default"])(n),x="clientHeight",A="clientWidth";B===(0,a["default"])(n)&&(B=(0,i["default"])(n),"static"!==(0,c["default"])(B).position&&(x="scrollHeight",A="scrollWidth")),d===o.top&&(k=o.bottom,V-=B[x]-l.height,V*=f?1:-1),d===o.left&&(w=o.right,v-=B[A]-l.width,v*=f?1:-1)}var D,L=Object.assign({position:m},h&&s);return f?Object.assign({},L,((D={})[k]=_?"0":"",D[w]=y?"0":"",D.transform=(S.devicePixelRatio||1)<2?"translate("+v+"px, "+V+"px)":"translate3d("+v+"px, "+V+"px, 0)",D)):Object.assign({},L,((t={})[k]=_?V+"px":"",t[w]=y?v+"px":"",t.transform="",t))}var m={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,o=n.gpuAcceleration,r=void 0===o||o,a=n.adaptive,i=void 0===a||a,c=n.roundOffsets,u=void 0===c||c,d={placement:(0,l["default"])(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,p(Object.assign({},d,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:u})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,p(Object.assign({},d,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};t["default"]=m},42325:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(83808))&&o.__esModule?o:{"default":o};var a={passive:!0};var i={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,o=e.options,i=o.scroll,c=void 0===i||i,l=o.resize,u=void 0===l||l,d=(0,r["default"])(t.elements.popper),s=[].concat(t.scrollParents.reference,t.scrollParents.popper);return c&&s.forEach((function(e){e.addEventListener("scroll",n.update,a)})),u&&d.addEventListener("resize",n.update,a),function(){c&&s.forEach((function(e){e.removeEventListener("scroll",n.update,a)})),u&&d.removeEventListener("resize",n.update,a)}},data:{}};t["default"]=i},56159:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=d(n(86141)),r=d(n(91561)),a=d(n(10404)),i=d(n(63308)),c=d(n(97396)),l=n(61797),u=d(n(26992));function d(e){return e&&e.__esModule?e:{"default":e}}var s={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,d=e.name;if(!t.modifiersData[d]._skip){for(var s=n.mainAxis,p=void 0===s||s,m=n.altAxis,f=void 0===m||m,h=n.fallbackPlacements,C=n.padding,g=n.boundary,b=n.rootBoundary,v=n.altBoundary,N=n.flipVariations,V=void 0===N||N,y=n.allowedAutoPlacements,_=t.options.placement,w=(0,r["default"])(_),k=h||(w===_||!V?[(0,o["default"])(_)]:function(e){if((0,r["default"])(e)===l.auto)return[];var t=(0,o["default"])(e);return[(0,a["default"])(e),t,(0,a["default"])(t)]}(_)),S=[_].concat(k).reduce((function(e,n){return e.concat((0,r["default"])(n)===l.auto?(0,c["default"])(t,{placement:n,boundary:g,rootBoundary:b,padding:C,flipVariations:V,allowedAutoPlacements:y}):n)}),[]),B=t.rects.reference,x=t.rects.popper,A=new Map,D=!0,L=S[0],E=0;E=0,M=O?"width":"height",P=(0,i["default"])(t,{placement:T,boundary:g,rootBoundary:b,altBoundary:v,padding:C}),R=O?F?l.right:l.left:F?l.bottom:l.top;B[M]>x[M]&&(R=(0,o["default"])(R));var j=(0,o["default"])(R),W=[];if(p&&W.push(P[I]<=0),f&&W.push(P[R]<=0,P[j]<=0),W.every((function(e){return e}))){L=T,D=!1;break}A.set(T,W)}if(D)for(var z=function(e){var t=S.find((function(t){var n=A.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return L=t,"break"},U=V?3:1;U>0;U--){if("break"===z(U))break}t.placement!==L&&(t.modifiersData[d]._skip=!0,t.placement=L,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};t["default"]=s},408:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=n(61797),a=(o=n(63308))&&o.__esModule?o:{"default":o};function i(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function c(e){return[r.top,r.right,r.bottom,r.left].some((function(t){return e[t]>=0}))}var l={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,o=t.rects.reference,r=t.rects.popper,l=t.modifiersData.preventOverflow,u=(0,a["default"])(t,{elementContext:"reference"}),d=(0,a["default"])(t,{altBoundary:!0}),s=i(u,o),p=i(d,r,l),m=c(s),f=c(p);t.modifiersData[n]={referenceClippingOffsets:s,popperEscapeOffsets:p,isReferenceHidden:m,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":f})}};t["default"]=l},16850:function(e,t,n){"use strict";t.__esModule=!0,t.preventOverflow=t.popperOffsets=t.offset=t.hide=t.flip=t.eventListeners=t.computeStyles=t.arrow=t.applyStyles=void 0;var o=p(n(59028));t.applyStyles=o["default"];var r=p(n(25615));t.arrow=r["default"];var a=p(n(21481));t.computeStyles=a["default"];var i=p(n(42325));t.eventListeners=i["default"];var c=p(n(56159));t.flip=c["default"];var l=p(n(408));t.hide=l["default"];var u=p(n(62167));t.offset=u["default"];var d=p(n(56496));t.popperOffsets=d["default"];var s=p(n(458));function p(e){return e&&e.__esModule?e:{"default":e}}t.preventOverflow=s["default"]},62167:function(e,t,n){"use strict";t.__esModule=!0,t.distanceAndSkiddingToXY=i,t["default"]=void 0;var o,r=(o=n(91561))&&o.__esModule?o:{"default":o},a=n(61797);function i(e,t,n){var o=(0,r["default"])(e),i=[a.left,a.top].indexOf(o)>=0?-1:1,c="function"==typeof n?n(Object.assign({},t,{placement:e})):n,l=c[0],u=c[1];return l=l||0,u=(u||0)*i,[a.left,a.right].indexOf(o)>=0?{x:u,y:l}:{x:l,y:u}}var c={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,o=e.name,r=n.offset,c=void 0===r?[0,0]:r,l=a.placements.reduce((function(e,n){return e[n]=i(n,t.rects,c),e}),{}),u=l[t.placement],d=u.x,s=u.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=s),t.modifiersData[o]=l}};t["default"]=c},56496:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(38138))&&o.__esModule?o:{"default":o};var a={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=(0,r["default"])({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};t["default"]=a},458:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(61797),r=f(n(91561)),a=f(n(19398)),i=f(n(81367)),c=f(n(83158)),l=f(n(62408)),u=f(n(95111)),d=f(n(63308)),s=f(n(26992)),p=f(n(15565)),m=n(36083);function f(e){return e&&e.__esModule?e:{"default":e}}var h={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,f=e.name,h=n.mainAxis,C=void 0===h||h,g=n.altAxis,b=void 0!==g&&g,v=n.boundary,N=n.rootBoundary,V=n.altBoundary,y=n.padding,_=n.tether,w=void 0===_||_,k=n.tetherOffset,S=void 0===k?0:k,B=(0,d["default"])(t,{boundary:v,rootBoundary:N,padding:y,altBoundary:V}),x=(0,r["default"])(t.placement),A=(0,s["default"])(t.placement),D=!A,L=(0,a["default"])(x),E=(0,i["default"])(L),T=t.modifiersData.popperOffsets,I=t.rects.reference,F=t.rects.popper,O="function"==typeof S?S(Object.assign({},t.rects,{placement:t.placement})):S,M={x:0,y:0};if(T){if(C||b){var P="y"===L?o.top:o.left,R="y"===L?o.bottom:o.right,j="y"===L?"height":"width",W=T[L],z=T[L]+B[P],U=T[L]-B[R],K=w?-F[j]/2:0,H=A===o.start?I[j]:F[j],G=A===o.start?-F[j]:-I[j],Y=t.elements.arrow,q=w&&Y?(0,l["default"])(Y):{width:0,height:0},$=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:(0,p["default"])(),Q=$[P],J=$[R],Z=(0,c["default"])(0,I[j],q[j]),X=D?I[j]/2-K-Z-Q-O:H-Z-Q-O,ee=D?-I[j]/2+K+Z+J+O:G+Z+J+O,te=t.elements.arrow&&(0,u["default"])(t.elements.arrow),ne=te?"y"===L?te.clientTop||0:te.clientLeft||0:0,oe=t.modifiersData.offset?t.modifiersData.offset[t.placement][L]:0,re=T[L]+X-oe-ne,ae=T[L]+ee-oe;if(C){var ie=(0,c["default"])(w?(0,m.min)(z,re):z,W,w?(0,m.max)(U,ae):U);T[L]=ie,M[L]=ie-W}if(b){var ce="x"===L?o.top:o.left,le="x"===L?o.bottom:o.right,ue=T[E],de=ue+B[ce],se=ue-B[le],pe=(0,c["default"])(w?(0,m.min)(de,re):de,ue,w?(0,m.max)(se,ae):se);T[E]=pe,M[E]=pe-ue}}t.modifiersData[f]=M}},requiresIfExists:["offset"]};t["default"]=h},97126:function(e,t,n){"use strict";t.__esModule=!0,t.defaultModifiers=t.createPopper=void 0;var o=n(36997);t.popperGenerator=o.popperGenerator,t.detectOverflow=o.detectOverflow;var r=l(n(42325)),a=l(n(56496)),i=l(n(21481)),c=l(n(59028));function l(e){return e&&e.__esModule?e:{"default":e}}var u=[r["default"],a["default"],i["default"],c["default"]];t.defaultModifiers=u;var d=(0,o.popperGenerator)({defaultModifiers:u});t.createPopper=d},38385:function(e,t,n){"use strict";t.__esModule=!0;var o={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};t.defaultModifiers=t.createPopperLite=t.createPopper=void 0;var r=n(36997);t.popperGenerator=r.popperGenerator,t.detectOverflow=r.detectOverflow;var a=C(n(42325)),i=C(n(56496)),c=C(n(21481)),l=C(n(59028)),u=C(n(62167)),d=C(n(56159)),s=C(n(458)),p=C(n(25615)),m=C(n(408)),f=n(97126);t.createPopperLite=f.createPopper;var h=n(16850);function C(e){return e&&e.__esModule?e:{"default":e}}Object.keys(h).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===h[e]||(t[e]=h[e]))}));var g=[a["default"],i["default"],c["default"],l["default"],u["default"],d["default"],s["default"],p["default"],m["default"]];t.defaultModifiers=g;var b=(0,r.popperGenerator)({defaultModifiers:g});t.createPopperLite=t.createPopper=b},97396:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,c=n.placement,l=n.boundary,u=n.rootBoundary,d=n.padding,s=n.flipVariations,p=n.allowedAutoPlacements,m=void 0===p?r.placements:p,f=(0,o["default"])(c),h=f?s?r.variationPlacements:r.variationPlacements.filter((function(e){return(0,o["default"])(e)===f})):r.basePlacements,C=h.filter((function(e){return m.indexOf(e)>=0}));0===C.length&&(C=h);var g=C.reduce((function(t,n){return t[n]=(0,a["default"])(e,{placement:n,boundary:l,rootBoundary:u,padding:d})[(0,i["default"])(n)],t}),{});return Object.keys(g).sort((function(e,t){return g[e]-g[t]}))};var o=c(n(26992)),r=n(61797),a=c(n(63308)),i=c(n(91561));function c(e){return e&&e.__esModule?e:{"default":e}}},38138:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=e.reference,c=e.element,l=e.placement,u=l?(0,o["default"])(l):null,d=l?(0,r["default"])(l):null,s=n.x+n.width/2-c.width/2,p=n.y+n.height/2-c.height/2;switch(u){case i.top:t={x:s,y:n.y-c.height};break;case i.bottom:t={x:s,y:n.y+n.height};break;case i.right:t={x:n.x+n.width,y:p};break;case i.left:t={x:n.x-c.width,y:p};break;default:t={x:n.x,y:n.y}}var m=u?(0,a["default"])(u):null;if(null!=m){var f="y"===m?"height":"width";switch(d){case i.start:t[m]=t[m]-(n[f]/2-c[f]/2);break;case i.end:t[m]=t[m]+(n[f]/2-c[f]/2)}}return t};var o=c(n(91561)),r=c(n(26992)),a=c(n(19398)),i=n(61797);function c(e){return e&&e.__esModule?e:{"default":e}}},17850:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=undefined,n(e())}))}))),t}}},63308:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,p=n.placement,m=void 0===p?e.placement:p,f=n.boundary,h=void 0===f?l.clippingParents:f,C=n.rootBoundary,g=void 0===C?l.viewport:C,b=n.elementContext,v=void 0===b?l.popper:b,N=n.altBoundary,V=void 0!==N&&N,y=n.padding,_=void 0===y?0:y,w=(0,d["default"])("number"!=typeof _?_:(0,s["default"])(_,l.basePlacements)),k=v===l.popper?l.reference:l.popper,S=e.elements.reference,B=e.rects.popper,x=e.elements[V?k:v],A=(0,r["default"])((0,u.isElement)(x)?x:x.contextElement||(0,a["default"])(e.elements.popper),h,g),D=(0,o["default"])(S),L=(0,i["default"])({reference:D,element:B,strategy:"absolute",placement:m}),E=(0,c["default"])(Object.assign({},B,L)),T=v===l.popper?E:D,I={top:A.top-T.top+w.top,bottom:T.bottom-A.bottom+w.bottom,left:A.left-T.left+w.left,right:T.right-A.right+w.right},F=e.modifiersData.offset;if(v===l.popper&&F){var O=F[m];Object.keys(I).forEach((function(e){var t=[l.right,l.bottom].indexOf(e)>=0?1:-1,n=[l.top,l.bottom].indexOf(e)>=0?"y":"x";I[e]+=O[n]*t}))}return I};var o=p(n(93529)),r=p(n(76416)),a=p(n(67977)),i=p(n(38138)),c=p(n(24955)),l=n(61797),u=n(1316),d=p(n(2595)),s=p(n(1724));function p(e){return e&&e.__esModule?e:{"default":e}}},1724:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}},62630:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=0?"x":"y"}},86141:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/left|right|bottom|top/g,(function(e){return n[e]}))};var n={left:"right",right:"left",bottom:"top",top:"bottom"}},10404:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/start|end/g,(function(e){return n[e]}))};var n={start:"end",end:"start"}},26992:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[1]}},36083:function(e,t){"use strict";t.__esModule=!0,t.round=t.min=t.max=void 0;var n=Math.max;t.max=n;var o=Math.min;t.min=o;var r=Math.round;t.round=r},13043:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t=e.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{});return Object.keys(t).map((function(e){return t[e]}))}},2595:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},(0,r["default"])(),e)};var o,r=(o=n(15565))&&o.__esModule?o:{"default":o}},23967:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=function(e){var t=new Map,n=new Set,o=[];function r(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var o=t.get(e);o&&r(o)}})),o.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||r(e)})),o}(e);return o.modifierPhases.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])};var o=n(61797)},24955:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}},6559:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=new Set;return e.filter((function(e){var o=t(e);if(!n.has(o))return n.add(o),!0}))}},23849:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){e.forEach((function(t){Object.keys(t).forEach((function(n){switch(n){case"name":t.name;break;case"enabled":t.enabled;case"phase":r.modifierPhases.indexOf(t.phase);break;case"fn":t.fn;break;case"effect":t.effect;break;case"requires":Array.isArray(t.requires);break;case"requiresIfExists":Array.isArray(t.requiresIfExists)}t.requires&&t.requires.forEach((function(t){e.find((function(e){return e.name===t}))}))}))}))};(o=n(62630))&&o.__esModule;var o,r=n(61797)},83158:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){return(0,o.max)(e,(0,o.min)(t,n))};var o=n(36083)},52726:function(e){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},91254:function(e,t,n){"use strict";var o=n(81662);e.exports=function(e){if(!o(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},26817:function(e,t,n){"use strict";var o=n(20839),r=n(49500),a=n(81965),i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a.f(c,i,{configurable:!0,value:r(null)}),e.exports=function(e){c[i][e]=!0}},84249:function(e,t,n){"use strict";var o=n(70219).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},62147:function(e){"use strict";e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},90155:function(e,t,n){"use strict";var o=n(81662);e.exports=function(e){if(!o(e))throw TypeError(String(e)+" is not an object");return e}},38536:function(e){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},46024:function(e,t,n){"use strict";var o,r,a,i=n(38536),c=n(54408),l=n(29071),u=n(81662),d=n(83122),s=n(42287),p=n(95479),m=n(51414),f=n(81965).f,h=n(87263),C=n(99099),g=n(20839),b=n(58060),v=l.Int8Array,N=v&&v.prototype,V=l.Uint8ClampedArray,y=V&&V.prototype,_=v&&h(v),w=N&&h(N),k=Object.prototype,S=k.isPrototypeOf,B=g("toStringTag"),x=b("TYPED_ARRAY_TAG"),A=b("TYPED_ARRAY_CONSTRUCTOR"),D=i&&!!C&&"Opera"!==s(l.opera),L=!1,E={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},T={BigInt64Array:8,BigUint64Array:8},I=function(e){if(!u(e))return!1;var t=s(e);return"DataView"===t||d(E,t)||d(T,t)},F=function(e){if(!u(e))return!1;var t=s(e);return d(E,t)||d(T,t)};for(o in E)(a=(r=l[o])&&r.prototype)?p(a,A,r):D=!1;for(o in T)(a=(r=l[o])&&r.prototype)&&p(a,A,r);if((!D||"function"!=typeof _||_===Function.prototype)&&(_=function(){throw TypeError("Incorrect invocation")},D))for(o in E)l[o]&&C(l[o],_);if((!D||!w||w===k)&&(w=_.prototype,D))for(o in E)l[o]&&C(l[o].prototype,w);if(D&&h(y)!==w&&C(y,w),c&&!d(w,B))for(o in L=!0,f(w,B,{get:function(){return u(this)?this[x]:undefined}}),E)l[o]&&p(l[o],x,o);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:D,TYPED_ARRAY_CONSTRUCTOR:A,TYPED_ARRAY_TAG:L&&x,aTypedArray:function(e){if(F(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(C&&!S.call(_,e))throw TypeError("Target is not a typed array constructor");return e},exportTypedArrayMethod:function(e,t,n){if(c){if(n)for(var o in E){var r=l[o];if(r&&d(r.prototype,e))try{delete r.prototype[e]}catch(a){}}w[e]&&!n||m(w,e,n?t:D&&N[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var o,r;if(c){if(C){if(n)for(o in E)if((r=l[o])&&d(r,e))try{delete r[e]}catch(a){}if(_[e]&&!n)return;try{return m(_,e,n?t:D&&_[e]||t)}catch(a){}}for(o in E)!(r=l[o])||r[e]&&!n||m(r,e,t)}},isView:I,isTypedArray:F,TypedArray:_,TypedArrayPrototype:w}},14374:function(e,t,n){"use strict";var o=n(29071),r=n(54408),a=n(38536),i=n(95479),c=n(46360),l=n(46203),u=n(62147),d=n(54026),s=n(46330),p=n(21332),m=n(33830),f=n(87263),h=n(99099),C=n(6628).f,g=n(81965).f,b=n(21657),v=n(72843),N=n(48441),V=N.get,y=N.set,_="ArrayBuffer",w="DataView",k="Wrong index",S=o.ArrayBuffer,B=S,x=o.DataView,A=x&&x.prototype,D=Object.prototype,L=o.RangeError,E=m.pack,T=m.unpack,I=function(e){return[255&e]},F=function(e){return[255&e,e>>8&255]},O=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},M=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},P=function(e){return E(e,23,4)},R=function(e){return E(e,52,8)},j=function(e,t){g(e.prototype,t,{get:function(){return V(this)[t]}})},W=function(e,t,n,o){var r=p(n),a=V(e);if(r+t>a.byteLength)throw L(k);var i=V(a.buffer).bytes,c=r+a.byteOffset,l=i.slice(c,c+t);return o?l:l.reverse()},z=function(e,t,n,o,r,a){var i=p(n),c=V(e);if(i+t>c.byteLength)throw L(k);for(var l=V(c.buffer).bytes,u=i+c.byteOffset,d=o(+r),s=0;sG;)(U=H[G++])in B||i(B,U,S[U]);K.constructor=B}h&&f(A)!==D&&h(A,D);var Y=new x(new B(2)),q=A.setInt8;Y.setInt8(0,2147483648),Y.setInt8(1,2147483649),!Y.getInt8(0)&&Y.getInt8(1)||c(A,{setInt8:function(e,t){q.call(this,e,t<<24>>24)},setUint8:function(e,t){q.call(this,e,t<<24>>24)}},{unsafe:!0})}else B=function(e){u(this,B,_);var t=p(e);y(this,{bytes:b.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},x=function(e,t,n){u(this,x,w),u(e,B,w);var o=V(e).byteLength,a=d(t);if(a<0||a>o)throw L("Wrong offset");if(a+(n=n===undefined?o-a:s(n))>o)throw L("Wrong length");y(this,{buffer:e,byteLength:n,byteOffset:a}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},r&&(j(B,"byteLength"),j(x,"buffer"),j(x,"byteLength"),j(x,"byteOffset")),c(x.prototype,{getInt8:function(e){return W(this,1,e)[0]<<24>>24},getUint8:function(e){return W(this,1,e)[0]},getInt16:function(e){var t=W(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=W(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return M(W(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return M(W(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return T(W(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return T(W(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){z(this,1,e,I,t)},setUint8:function(e,t){z(this,1,e,I,t)},setInt16:function(e,t){z(this,2,e,F,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){z(this,2,e,F,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){z(this,4,e,O,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){z(this,4,e,O,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){z(this,4,e,P,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){z(this,8,e,R,t,arguments.length>2?arguments[2]:undefined)}});v(B,_),v(x,w),e.exports={ArrayBuffer:B,DataView:x}},84705:function(e,t,n){"use strict";var o=n(45009),r=n(97094),a=n(46330),i=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),c=a(n.length),l=r(e,c),u=r(t,c),d=arguments.length>2?arguments[2]:undefined,s=i((d===undefined?c:r(d,c))-u,c-l),p=1;for(u0;)u in n?n[l]=n[u]:delete n[l],l+=p,u+=p;return n}},21657:function(e,t,n){"use strict";var o=n(45009),r=n(97094),a=n(46330);e.exports=function(e){for(var t=o(this),n=a(t.length),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,u=l===undefined?n:r(l,n);u>c;)t[c++]=e;return t}},49751:function(e,t,n){"use strict";var o=n(78969).forEach,r=n(57978)("forEach");e.exports=r?[].forEach:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}},15886:function(e){"use strict";e.exports=function(e,t){for(var n=0,o=t.length,r=new e(o);o>n;)r[n]=t[n++];return r}},34192:function(e,t,n){"use strict";var o=n(77348),r=n(45009),a=n(32603),i=n(64453),c=n(46330),l=n(18996),u=n(39423);e.exports=function(e){var t,n,d,s,p,m,f=r(e),h="function"==typeof this?this:Array,C=arguments.length,g=C>1?arguments[1]:undefined,b=g!==undefined,v=u(f),N=0;if(b&&(g=o(g,C>2?arguments[2]:undefined,2)),v==undefined||h==Array&&i(v))for(n=new h(t=c(f.length));t>N;N++)m=b?g(f[N],N):f[N],l(n,N,m);else for(p=(s=v.call(f)).next,n=new h;!(d=p.call(s)).done;N++)m=b?a(s,g,[d.value,N],!0):d.value,l(n,N,m);return n.length=N,n}},35957:function(e,t,n){"use strict";var o=n(10961),r=n(46330),a=n(97094),i=function(e){return function(t,n,i){var c,l=o(t),u=r(l.length),d=a(i,u);if(e&&n!=n){for(;u>d;)if((c=l[d++])!=c)return!0}else for(;u>d;d++)if((e||d in l)&&l[d]===n)return e||d||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},78969:function(e,t,n){"use strict";var o=n(77348),r=n(27371),a=n(45009),i=n(46330),c=n(87257),l=[].push,u=function(e){var t=1==e,n=2==e,u=3==e,d=4==e,s=6==e,p=7==e,m=5==e||s;return function(f,h,C,g){for(var b,v,N=a(f),V=r(N),y=o(h,C,3),_=i(V.length),w=0,k=g||c,S=t?k(f,_):n||p?k(f,0):undefined;_>w;w++)if((m||w in V)&&(v=y(b=V[w],w,N),e))if(t)S[w]=v;else if(v)switch(e){case 3:return!0;case 5:return b;case 6:return w;case 2:l.call(S,b)}else switch(e){case 4:return!1;case 7:l.call(S,b)}return s?-1:u||d?d:S}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},65975:function(e,t,n){"use strict";var o=n(10961),r=n(54026),a=n(46330),i=n(57978),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=i("lastIndexOf"),s=u||!d;e.exports=s?function(e){if(u)return l.apply(this,arguments)||0;var t=o(this),n=a(t.length),i=n-1;for(arguments.length>1&&(i=c(i,r(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in t&&t[i]===e)return i||0;return-1}:l},71721:function(e,t,n){"use strict";var o=n(46203),r=n(20839),a=n(95336),i=r("species");e.exports=function(e){return a>=51||!o((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},57978:function(e,t,n){"use strict";var o=n(46203);e.exports=function(e,t){var n=[][e];return!!n&&o((function(){n.call(null,t||function(){throw 1},1)}))}},97402:function(e,t,n){"use strict";var o=n(52726),r=n(45009),a=n(27371),i=n(46330),c=function(e){return function(t,n,c,l){o(n);var u=r(t),d=a(u),s=i(u.length),p=e?s-1:0,m=e?-1:1;if(c<2)for(;;){if(p in d){l=d[p],p+=m;break}if(p+=m,e?p<0:s<=p)throw TypeError("Reduce of empty array with no initial value")}for(;e?p>=0:s>p;p+=m)p in d&&(l=n(l,d[p],p,u));return l}};e.exports={left:c(!1),right:c(!0)}},85492:function(e){"use strict";var t=Math.floor,n=function(e,t){for(var n,o,r=e.length,a=1;a0;)e[o]=e[--o];o!==a++&&(e[o]=n)}return e},o=function(e,t,n){for(var o=e.length,r=t.length,a=0,i=0,c=[];a1?arguments[1]:undefined,3);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),a(d.prototype,n?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return C(this,0===e?0:e,t)}}:{add:function(e){return C(this,e=0===e?0:e,e)}}),s&&o(d.prototype,"size",{get:function(){return m(this).size}}),d},setStrong:function(e,t,n){var o=t+" Iterator",r=h(t),a=h(o);u(e,t,(function(e,t){f(this,{type:o,target:e,state:r(e),kind:t,last:undefined})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),d(t)}}},6789:function(e,t,n){"use strict";var o=n(46360),r=n(88511).getWeakData,a=n(90155),i=n(81662),c=n(62147),l=n(1464),u=n(78969),d=n(83122),s=n(48441),p=s.set,m=s.getterFor,f=u.find,h=u.findIndex,C=0,g=function(e){return e.frozen||(e.frozen=new b)},b=function(){this.entries=[]},v=function(e,t){return f(e.entries,(function(e){return e[0]===t}))};b.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=h(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,u){var s=e((function(e,o){c(e,s,t),p(e,{type:t,id:C++,frozen:undefined}),o!=undefined&&l(o,e[u],{that:e,AS_ENTRIES:n})})),f=m(t),h=function(e,t,n){var o=f(e),i=r(a(t),!0);return!0===i?g(o).set(t,n):i[o.id]=n,e};return o(s.prototype,{"delete":function(e){var t=f(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t)["delete"](e):n&&d(n,t.id)&&delete n[t.id]},has:function(e){var t=f(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t).has(e):n&&d(n,t.id)}}),o(s.prototype,n?{get:function(e){var t=f(this);if(i(e)){var n=r(e);return!0===n?g(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return h(this,e,t)}}:{add:function(e){return h(this,e,!0)}}),s}}},37488:function(e,t,n){"use strict";var o=n(70850),r=n(29071),a=n(17600),i=n(51414),c=n(88511),l=n(1464),u=n(62147),d=n(81662),s=n(46203),p=n(61504),m=n(72843),f=n(50843);e.exports=function(e,t,n){var h=-1!==e.indexOf("Map"),C=-1!==e.indexOf("Weak"),g=h?"set":"add",b=r[e],v=b&&b.prototype,N=b,V={},y=function(e){var t=v[e];i(v,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(C&&!d(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return C&&!d(e)?undefined:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(C&&!d(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(a(e,"function"!=typeof b||!(C||v.forEach&&!s((function(){(new b).entries().next()})))))N=n.getConstructor(t,e,h,g),c.enable();else if(a(e,!0)){var _=new N,w=_[g](C?{}:-0,1)!=_,k=s((function(){_.has(1)})),S=p((function(e){new b(e)})),B=!C&&s((function(){for(var e=new b,t=5;t--;)e[g](t,t);return!e.has(-0)}));S||((N=t((function(t,n){u(t,N,e);var o=f(new b,t,N);return n!=undefined&&l(n,o[g],{that:o,AS_ENTRIES:h}),o}))).prototype=v,v.constructor=N),(k||B)&&(y("delete"),y("has"),h&&y("get")),(B||w)&&y(g),C&&v.clear&&delete v.clear}return V[e]=N,o({global:!0,forced:N!=b},V),m(N,e),C||n.setStrong(N,e,h),N}},9088:function(e,t,n){"use strict";var o=n(83122),r=n(11475),a=n(77415),i=n(81965);e.exports=function(e,t){for(var n=r(t),c=i.f,l=a.f,u=0;u"+c+""}},89750:function(e,t,n){"use strict";var o=n(53637).IteratorPrototype,r=n(49500),a=n(66856),i=n(72843),c=n(63913),l=function(){return this};e.exports=function(e,t,n){var u=t+" Iterator";return e.prototype=r(o,{next:a(1,n)}),i(e,u,!1,!0),c[u]=l,e}},95479:function(e,t,n){"use strict";var o=n(54408),r=n(81965),a=n(66856);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},66856:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},18996:function(e,t,n){"use strict";var o=n(86997),r=n(81965),a=n(66856);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},11216:function(e,t,n){"use strict";var o=n(46203),r=n(77169).start,a=Math.abs,i=Date.prototype,c=i.getTime,l=i.toISOString;e.exports=o((function(){return"0385-07-25T07:06:39.999Z"!=l.call(new Date(-50000000000001))}))||!o((function(){l.call(new Date(NaN))}))?function(){if(!isFinite(c.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),o=t<0?"-":t>9999?"+":"";return o+r(a(t),o?6:4,0)+"-"+r(e.getUTCMonth()+1,2,0)+"-"+r(e.getUTCDate(),2,0)+"T"+r(e.getUTCHours(),2,0)+":"+r(e.getUTCMinutes(),2,0)+":"+r(e.getUTCSeconds(),2,0)+"."+r(n,3,0)+"Z"}:l},62812:function(e,t,n){"use strict";var o=n(90155),r=n(17762);e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw TypeError("Incorrect hint");return r(this,e)}},54934:function(e,t,n){"use strict";var o=n(70850),r=n(89750),a=n(87263),i=n(99099),c=n(72843),l=n(95479),u=n(51414),d=n(20839),s=n(80591),p=n(63913),m=n(53637),f=m.IteratorPrototype,h=m.BUGGY_SAFARI_ITERATORS,C=d("iterator"),g="keys",b="values",v="entries",N=function(){return this};e.exports=function(e,t,n,d,m,V,y){r(n,t,d);var _,w,k,S=function(e){if(e===m&&L)return L;if(!h&&e in A)return A[e];switch(e){case g:case b:case v:return function(){return new n(this,e)}}return function(){return new n(this)}},B=t+" Iterator",x=!1,A=e.prototype,D=A[C]||A["@@iterator"]||m&&A[m],L=!h&&D||S(m),E="Array"==t&&A.entries||D;if(E&&(_=a(E.call(new e)),f!==Object.prototype&&_.next&&(s||a(_)===f||(i?i(_,f):"function"!=typeof _[C]&&l(_,C,N)),c(_,B,!0,!0),s&&(p[B]=N))),m==b&&D&&D.name!==b&&(x=!0,L=function(){return D.call(this)}),s&&!y||A[C]===L||l(A,C,L),p[t]=L,m)if(w={values:S(b),keys:V?L:S(g),entries:S(v)},y)for(k in w)(h||x||!(k in A))&&u(A,k,w[k]);else o({target:t,proto:!0,forced:h||x},w);return w}},34899:function(e,t,n){"use strict";var o=n(82155),r=n(83122),a=n(78131),i=n(81965).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},54408:function(e,t,n){"use strict";var o=n(46203);e.exports=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},939:function(e,t,n){"use strict";var o=n(29071),r=n(81662),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},69238:function(e,t,n){"use strict";var o=n(68548).match(/firefox\/(\d+)/i);e.exports=!!o&&+o[1]},45158:function(e){"use strict";e.exports="object"==typeof window},85342:function(e,t,n){"use strict";var o=n(68548);e.exports=/MSIE|Trident/.test(o)},10064:function(e,t,n){"use strict";var o=n(68548),r=n(29071);e.exports=/iphone|ipod|ipad/i.test(o)&&r.Pebble!==undefined},33459:function(e,t,n){"use strict";var o=n(68548);e.exports=/(?:iphone|ipod|ipad).*applewebkit/i.test(o)},12396:function(e,t,n){"use strict";var o=n(87684),r=n(29071);e.exports="process"==o(r.process)},45521:function(e,t,n){"use strict";var o=n(68548);e.exports=/web0s(?!.*chrome)/i.test(o)},68548:function(e,t,n){"use strict";var o=n(54883);e.exports=o("navigator","userAgent")||""},95336:function(e,t,n){"use strict";var o,r,a=n(29071),i=n(68548),c=a.process,l=a.Deno,u=c&&c.versions||l&&l.version,d=u&&u.v8;d?r=(o=d.split("."))[0]<4?1:o[0]+o[1]:i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=o[1]),e.exports=r&&+r},5556:function(e,t,n){"use strict";var o=n(68548).match(/AppleWebKit\/(\d+)\./);e.exports=!!o&&+o[1]},17195:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},70850:function(e,t,n){"use strict";var o=n(29071),r=n(77415).f,a=n(95479),i=n(51414),c=n(97952),l=n(9088),u=n(17600);e.exports=function(e,t){var n,d,s,p,m,f=e.target,h=e.global,C=e.stat;if(n=h?o:C?o[f]||c(f,{}):(o[f]||{}).prototype)for(d in t){if(p=t[d],s=e.noTargetGet?(m=r(n,d))&&m.value:n[d],!u(h?d:f+(C?".":"#")+d,e.forced)&&s!==undefined){if(typeof p==typeof s)continue;l(p,s)}(e.sham||s&&s.sham)&&a(p,"sham",!0),i(n,d,p,e)}}},46203:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},96504:function(e,t,n){"use strict";n(69811);var o=n(51414),r=n(10199),a=n(46203),i=n(20839),c=n(95479),l=i("species"),u=RegExp.prototype;e.exports=function(e,t,n,d){var s=i(e),p=!a((function(){var t={};return t[s]=function(){return 7},7!=""[e](t)})),m=p&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[s]=/./[s]),n.exec=function(){return t=!0,null},n[s](""),!t}));if(!p||!m||n){var f=/./[s],h=t(s,""[e],(function(e,t,n,o,a){var i=t.exec;return i===r||i===u.exec?p&&!a?{done:!0,value:f.call(t,n,o)}:{done:!0,value:e.call(n,t,o)}:{done:!1}}));o(String.prototype,e,h[0]),o(u,s,h[1])}d&&c(u[s],"sham",!0)}},46927:function(e,t,n){"use strict";var o=n(32420),r=n(46330),a=n(77348);e.exports=function i(e,t,n,c,l,u,d,s){for(var p,m=l,f=0,h=!!d&&a(d,s,3);f0&&o(p))m=i(e,t,p,r(p.length),m,u-1)-1;else{if(m>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[m]=p}m++}f++}return m}},90452:function(e,t,n){"use strict";var o=n(46203);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},77348:function(e,t,n){"use strict";var o=n(52726);e.exports=function(e,t,n){if(o(e),t===undefined)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,o){return e.call(t,n,o)};case 3:return function(n,o,r){return e.call(t,n,o,r)}}return function(){return e.apply(t,arguments)}}},18602:function(e,t,n){"use strict";var o=n(52726),r=n(81662),a=[].slice,i={},c=function(e,t,n){if(!(t in i)){for(var o=[],r=0;r]*>)/g,c=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,l,u,d){var s=n+e.length,p=l.length,m=c;return u!==undefined&&(u=o(u),m=i),a.call(d,m,(function(o,a){var i;switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,n);case"'":return t.slice(s);case"<":i=u[a.slice(1,-1)];break;default:var c=+a;if(0===c)return o;if(c>p){var d=r(c/10);return 0===d?o:d<=p?l[d-1]===undefined?a.charAt(1):l[d-1]+a.charAt(1):o}i=l[c-1]}return i===undefined?"":i}))}},29071:function(e,t,n){"use strict";var o=function(e){return e&&e.Math==Math&&e};e.exports=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},83122:function(e,t,n){"use strict";var o=n(45009),r={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return r.call(o(e),t)}},18609:function(e){"use strict";e.exports={}},40753:function(e,t,n){"use strict";var o=n(29071);e.exports=function(e,t){var n=o.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},21929:function(e,t,n){"use strict";var o=n(54883);e.exports=o("document","documentElement")},72825:function(e,t,n){"use strict";var o=n(54408),r=n(46203),a=n(939);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},33830:function(e){"use strict";var t=Math.abs,n=Math.pow,o=Math.floor,r=Math.log,a=Math.LN2;e.exports={pack:function(e,i,c){var l,u,d,s=new Array(c),p=8*c-i-1,m=(1<>1,h=23===i?n(2,-24)-n(2,-77):0,C=e<0||0===e&&1/e<0?1:0,g=0;for((e=t(e))!=e||e===Infinity?(u=e!=e?1:0,l=m):(l=o(r(e)/a),e*(d=n(2,-l))<1&&(l--,d*=2),(e+=l+f>=1?h/d:h*n(2,1-f))*d>=2&&(l++,d/=2),l+f>=m?(u=0,l=m):l+f>=1?(u=(e*d-1)*n(2,i),l+=f):(u=e*n(2,f-1)*n(2,i),l=0));i>=8;s[g++]=255&u,u/=256,i-=8);for(l=l<0;s[g++]=255&l,l/=256,p-=8);return s[--g]|=128*C,s},unpack:function(e,t){var o,r=e.length,a=8*r-t-1,i=(1<>1,l=a-7,u=r-1,d=e[u--],s=127&d;for(d>>=7;l>0;s=256*s+e[u],u--,l-=8);for(o=s&(1<<-l)-1,s>>=-l,l+=t;l>0;o=256*o+e[u],u--,l-=8);if(0===s)s=1-c;else{if(s===i)return o?NaN:d?-Infinity:Infinity;o+=n(2,t),s-=c}return(d?-1:1)*o*n(2,s-t)}}},27371:function(e,t,n){"use strict";var o=n(46203),r=n(87684),a="".split;e.exports=o((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==r(e)?a.call(e,""):Object(e)}:Object},50843:function(e,t,n){"use strict";var o=n(81662),r=n(99099);e.exports=function(e,t,n){var a,i;return r&&"function"==typeof(a=t.constructor)&&a!==n&&o(i=a.prototype)&&i!==n.prototype&&r(e,i),e}},69718:function(e,t,n){"use strict";var o=n(41537),r=Function.toString;"function"!=typeof o.inspectSource&&(o.inspectSource=function(e){return r.call(e)}),e.exports=o.inspectSource},88511:function(e,t,n){"use strict";var o=n(70850),r=n(18609),a=n(81662),i=n(83122),c=n(81965).f,l=n(6628),u=n(18118),d=n(58060),s=n(90452),p=!1,m=d("meta"),f=0,h=Object.isExtensible||function(){return!0},C=function(e){c(e,m,{value:{objectID:"O"+f++,weakData:{}}})},g=e.exports={enable:function(){g.enable=function(){},p=!0;var e=l.f,t=[].splice,n={};n[m]=1,e(n).length&&(l.f=function(n){for(var o=e(n),r=0,a=o.length;rp;p++)if((f=_(e[p]))&&f instanceof u)return f;return new u(!1)}d=s.call(e)}for(h=d.next;!(C=h.call(d)).done;){try{f=_(C.value)}catch(w){throw l(d),w}if("object"==typeof f&&f&&f instanceof u)return f}return new u(!1)}},151:function(e,t,n){"use strict";var o=n(90155);e.exports=function(e){var t=e["return"];if(t!==undefined)return o(t.call(e)).value}},53637:function(e,t,n){"use strict";var o,r,a,i=n(46203),c=n(87263),l=n(95479),u=n(83122),d=n(20839),s=n(80591),p=d("iterator"),m=!1;[].keys&&("next"in(a=[].keys())?(r=c(c(a)))!==Object.prototype&&(o=r):m=!0);var f=o==undefined||i((function(){var e={};return o[p].call(e)!==e}));f&&(o={}),s&&!f||u(o,p)||l(o,p,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:m}},63913:function(e){"use strict";e.exports={}},49294:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!=t(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:n(e)-1}:t},23965:function(e,t,n){"use strict";var o=n(84250),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),u=a(2,-126);e.exports=Math.fround||function(e){var t,n,a=r(e),d=o(e);return al||n!=n?d*Infinity:d*n}},82544:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:t(1+e)}},84250:function(e){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},83639:function(e,t,n){"use strict";var o,r,a,i,c,l,u,d,s=n(29071),p=n(77415).f,m=n(37189).set,f=n(33459),h=n(10064),C=n(45521),g=n(12396),b=s.MutationObserver||s.WebKitMutationObserver,v=s.document,N=s.process,V=s.Promise,y=p(s,"queueMicrotask"),_=y&&y.value;_||(o=function(){var e,t;for(g&&(e=N.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(n){throw r?i():a=undefined,n}}a=undefined,e&&e.enter()},f||g||C||!b||!v?!h&&V&&V.resolve?((u=V.resolve(undefined)).constructor=V,d=u.then,i=function(){d.call(u,o)}):i=g?function(){N.nextTick(o)}:function(){m.call(s,o)}:(c=!0,l=v.createTextNode(""),new b(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c})),e.exports=_||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},86514:function(e,t,n){"use strict";var o=n(29071);e.exports=o.Promise},82156:function(e,t,n){"use strict";var o=n(95336),r=n(46203);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&o&&o<41}))},63059:function(e,t,n){"use strict";var o=n(29071),r=n(69718),a=o.WeakMap;e.exports="function"==typeof a&&/native code/.test(r(a))},24735:function(e,t,n){"use strict";var o=n(52726),r=function(e){var t,n;this.promise=new e((function(e,o){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)};e.exports.f=function(e){return new r(e)}},2019:function(e,t,n){"use strict";var o=n(94384);e.exports=function(e){if(o(e))throw TypeError("The method doesn't accept regular expressions");return e}},19548:function(e,t,n){"use strict";var o=n(29071).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},14236:function(e,t,n){"use strict";var o=n(29071),r=n(1435),a=n(8182).trim,i=n(89384),c=o.parseFloat,l=1/c(i+"-0")!=-Infinity;e.exports=l?function(e){var t=a(r(e)),n=c(t);return 0===n&&"-"==t.charAt(0)?-0:n}:c},40731:function(e,t,n){"use strict";var o=n(29071),r=n(1435),a=n(8182).trim,i=n(89384),c=o.parseInt,l=/^[+-]?0[Xx]/,u=8!==c(i+"08")||22!==c(i+"0x16");e.exports=u?function(e,t){var n=a(r(e));return c(n,t>>>0||(l.test(n)?16:10))}:c},81217:function(e,t,n){"use strict";var o=n(54408),r=n(46203),a=n(45044),i=n(37881),c=n(96177),l=n(45009),u=n(27371),d=Object.assign,s=Object.defineProperty;e.exports=!d||r((function(){if(o&&1!==d({b:1},d(s({},"a",{enumerable:!0,get:function(){s(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=d({},e)[n]||a(d({},t)).join("")!=r}))?function(e,t){for(var n=l(e),r=arguments.length,d=1,s=i.f,p=c.f;r>d;)for(var m,f=u(arguments[d++]),h=s?a(f).concat(s(f)):a(f),C=h.length,g=0;C>g;)m=h[g++],o&&!p.call(f,m)||(n[m]=f[m]);return n}:d},49500:function(e,t,n){"use strict";var o,r=n(90155),a=n(61685),i=n(17195),c=n(18609),l=n(21929),u=n(939),d=n(15595),s=d("IE_PROTO"),p=function(){},m=function(e){return"