From 02eb65cc2dfa190ec54cfebb890baabe125a1306 Mon Sep 17 00:00:00 2001 From: crossexonar Date: Wed, 25 Jun 2025 08:37:23 -0400 Subject: [PATCH 01/55] Bork Mediguns wew --- .../icons/itemicons/borkmedigun.dmi | Bin 0 -> 10695 bytes code/game/Rogue Star/weapons/bork-medigun.dm | 672 ++++++++++++++++++ code/game/machinery/recharger.dm | 2 +- .../spacesuits/rig/suits/station_vr.dm | 50 +- icons/mob/items/lefthand_guns_rs.dmi | Bin 0 -> 737 bytes icons/mob/items/righthand_guns_rs.dmi | Bin 0 -> 643 bytes icons/mob/modifier_effects.dmi | Bin 26024 -> 26315 bytes vorestation.dme | 1 + 8 files changed, 699 insertions(+), 26 deletions(-) create mode 100644 code/game/Rogue Star/icons/itemicons/borkmedigun.dmi create mode 100644 code/game/Rogue Star/weapons/bork-medigun.dm create mode 100644 icons/mob/items/lefthand_guns_rs.dmi create mode 100644 icons/mob/items/righthand_guns_rs.dmi diff --git a/code/game/Rogue Star/icons/itemicons/borkmedigun.dmi b/code/game/Rogue Star/icons/itemicons/borkmedigun.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1e2cff34fa95771ad24ba9cef759e561ffaec488 GIT binary patch literal 10695 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 HtC0Tzfm!wa literal 0 HcmV?d00001 diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm new file mode 100644 index 00000000000..067318e6ed1 --- /dev/null +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -0,0 +1,672 @@ +/datum/modifier/medbeameffect + name = "medgunffect" + desc = "You're being regenerated" + mob_overlay_state = "medigun_effect" + stacks = MODIFIER_STACK_EXTEND + pain_immunity = TRUE + bleeding_rate_percent = 0.1 //only a little + incoming_oxy_damage_percent = 0 + +/obj/item/device/bork_medigun + name = "Bork Medical Beam Disperser" + desc = "A highly advanced beam gun, designed for progressive and gradual healing of damaged tissue." + icon = 'code/game/Rogue Star/icons/itemicons/borkmedigun.dmi' + icon_state = "medblaster" + var/wielded_item_state = "medblaster-wielded" + var/base_icon_state = "medblaster" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns_rs.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns_rs.dmi', + ) + w_class = ITEMSIZE_HUGE + force = 0 + var/beam_range = 4 // How many tiles away it can scan. Changing this also changes the box size. + var/busy = FALSE // Set to true when scanning, to stop multiple scans. + var/wielded = 0 + var/current_target + var/mgcmo + canremove = 0 + +//backpack item +/obj/item/device/medigun_backpack + name = "Bork Medical Beam Backpack Unit" + desc = "A highly advanced beam gun unit, designed for progressive and gradual healing of damaged tissue." + icon = 'code/game/Rogue Star/icons/itemicons/borkmedigun.dmi' + icon_override = 'code/game/Rogue Star/icons/itemicons/borkmedigun.dmi' + icon_state = "mg-backpack" + item_state = "mg-backpack-onmob" + slot_flags = SLOT_BACK + force = 5 + throwforce = 6 + preserve_item = 1 + w_class = ITEMSIZE_HUGE + unacidable = TRUE + origin_tech = list(TECH_BIO = 4, TECH_POWER = 2, TECH_BLUESPACE = 4) + action_button_name = "Remove/Replace medigun" + + var/obj/item/device/bork_medigun/linked/medigun + var/obj/item/weapon/cell/bcell = null + var/brutevol = 0 + var/toxvol = 0 + var/burnvol = 0 + var/tankmax = 100 + var/chargecost = 25 + var/bpcmo = 0 + var/containsgun = 1 + bcell = /obj/item/weapon/cell/apc +//backpack item +/obj/item/device/medigun_backpack/cmo + name = "Bork Medical Beam Backpack Unit CMO" + desc = "An even more advanced beam gun unit, designed for progressive and gradual healing of damaged tissue." + icon = 'code/game/Rogue Star/icons/itemicons/borkmedigun.dmi' + icon_override = 'code/game/Rogue Star/icons/itemicons/borkmedigun.dmi' + icon_state = "mg-backpack_cmo" + item_state = "mg-backpack_cmo-onmob" + slot_flags = SLOT_BACK + force = 5 + throwforce = 6 + preserve_item = 1 + w_class = ITEMSIZE_HUGE + unacidable = TRUE + action_button_name = "Remove/Replace medigun" + brutevol = 100 + toxvol = 100 + burnvol = 100 + tankmax = 100 + chargecost = 25 + bpcmo = 1 + +/obj/item/device/medigun_backpack/examine(mob/user) + . = ..() + + if(Adjacent(user)) + if(bcell) + . += "The Cell is [round(bcell.percent())]% charged." + if(!bcell) + . += "The Unit does not have a power source installed." + if(brutevol) + . += "Bruteheal tank has [brutevol] U remaining." + else + . += "Bruteheal tank is empty." + if(burnvol) + . += "Burnheal tank has [burnvol] U remaining." + else + . += "Burnheal tank is empty." + if(toxvol) + . += "Toxheal tank has [toxvol] U remaining." + else + . += "Toxheal tank is empty." + +/obj/item/device/medigun_backpack/get_cell() + return bcell + +/obj/item/device/medigun_backpack/update_icon() + . = ..() + cut_overlays() + if(brutevol <= 0) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "redstrike-blink")) + //to_chat(world, span("warning", "brute empty")) + if(toxvol <= 0) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "greenstrike-blink")) + //to_chat(world, span("warning", "tox empty")) + if(burnvol <= 0) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "orangestrike-blink")) + //to_chat(world, span("warning", "burn empty")) + + +/obj/item/device/bork_medigun/update_twohanding() + //to_chat(world, span("warning", "Twohanding")) + var/mob/living/M = loc + if(istype(M) && M.item_is_in_hands(src) && !M.hands_are_full()) + wielded = 1 + //to_chat(world, span("warning", "Wielded")) + name = "[initial(name)] (wielded)" + else + wielded = 0 + //to_chat(world, span("warning", "Not wielded")) + name = initial(name) + update_held_icon() + ..() + +/obj/item/device/bork_medigun/update_held_icon() + if(wielded_item_state) + var/mob/living/M = loc + if(istype(M)) + if(M.can_wield_item(src) && src.is_held_twohanded(M)) + LAZYSET(item_state_slots, slot_l_hand_str, wielded_item_state) + LAZYSET(item_state_slots, slot_r_hand_str, wielded_item_state) + else + LAZYSET(item_state_slots, slot_l_hand_str, initial(item_state)) + LAZYSET(item_state_slots, slot_r_hand_str, initial(item_state)) + ..() +/obj/item/device/medigun_backpack/New() //starts without a cell for rnd + ..() + if(ispath(medigun)) + medigun = new medigun(src, src) + else + medigun = new(src, src) + + if(ispath(bcell)) + bcell = new bcell(src) + update_icon() + +/obj/item/device/medigun_backpack/Destroy() + . = ..() + QDEL_NULL(medigun) + QDEL_NULL(bcell) + + + +/obj/item/device/medigun_backpack/ui_action_click() + toggle_medigun() + +/obj/item/device/medigun_backpack/attack_hand(mob/user) + if(loc == user) + toggle_medigun() + else + ..() + +/obj/item/device/medigun_backpack/MouseDrop() + if(ismob(src.loc)) + if(!CanMouseDrop(src)) + return + var/mob/M = src.loc + if(!M.unEquip(src)) + return + src.add_fingerprint(usr) + M.put_in_any_hand_if_possible(src) + /*icon_state = "mg-backpack" + item_state = "mg-backpack-onmob" + update_icon() //success + usr.update_inv_back()*/ + + +/obj/item/device/medigun_backpack/attackby(obj/item/weapon/W, mob/user, params) + if(W == medigun) + to_chat(user, "backpack clicked with gun") + reattach_medigun(user) + else if(istype(W, /obj/item/weapon/cell)) + if(bcell) + to_chat(user, "\The [src] already has a cell.") + else + if(!user.unEquip(W)) + return + W.forceMove(src) + bcell = W + to_chat(user, "You install a cell in \the [src].") + update_icon() + + else if(W.is_screwdriver()) + if(bcell) + bcell.update_icon() + bcell.forceMove(get_turf(src.loc)) + bcell = null + to_chat(user, "You remove the cell from \the [src].") + update_icon() + else + return ..() + + +/obj/item/device/bork_medigun/linked + var/obj/item/device/medigun_backpack/medigun_base_unit + +/obj/item/device/bork_medigun/linked/New(newloc, var/obj/item/device/medigun_backpack/backpack) + medigun_base_unit = backpack + if(medigun_base_unit.bpcmo) + icon_state = "medblaster_cmo" + base_icon_state = "medblaster_cmo" + wielded_item_state = "" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns_rs.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns_rs.dmi', + ) + update_icon() + ..(newloc) + +/obj/item/device/bork_medigun/linked/Destroy() + if(medigun_base_unit) + //ensure the base unit's icon updates + if(medigun_base_unit.medigun == src) + medigun_base_unit.medigun = null + if(medigun_base_unit.bpcmo) + medigun_base_unit.icon_state = "mg-backpack_cmo" + medigun_base_unit.item_state = "mg-backpack_cmo-onmob" + else + medigun_base_unit.icon_state = "mg-backpack" + medigun_base_unit.item_state = "mg-backpack-onmob" + medigun_base_unit.update_icon() + usr.update_inv_back() + medigun_base_unit = null + return ..() + + +/obj/item/device/bork_medigun/linked/forceMove(atom/destination) //Forcemove override, ugh + to_chat(world, "forcemove") + to_chat(world, "[destination]") + if(destination == medigun_base_unit || destination == medigun_base_unit.loc || isturf(destination)) + . = doMove(destination, 0, 0) + if(isturf(destination)) + for(var/atom/A as anything in destination) // If we can't scan the turf, see if we can scan anything on it, to help with aiming. + if(istype(A,/obj/structure/closet )) + break + to_chat(world, "isturf") + if(ismob(medigun_base_unit.loc)) + var/mob/user = medigun_base_unit.loc + to_chat(world, "[user] eats ass") + medigun_base_unit.reattach_medigun(user) + + +/obj/item/device/bork_medigun/linked/dropped(mob/user) + ..() //update twohanding + + if(medigun_base_unit.containsgun == 0) + //to_chat(user, "[loc]") + if(medigun_base_unit) + + //to_chat(user, "Dropped") + medigun_base_unit.reattach_medigun(user) //medigun attached to a base unit should never exist outside of their base unit or the mob equipping the base unit + + +/obj/item/device/medigun_backpack/verb/toggle_medigun() + set name = "Toggle medigun" + set category = "Object" + + var/mob/living/carbon/human/user = usr + if(!medigun) + to_chat(user, "The medigun is missing!") + return + + if(medigun.loc != src) + to_chat(user, "location not source") + reattach_medigun(user) //Remove from their hands and back onto the medigun unit + return + + if(!slot_check()) + to_chat(user, "You need to equip [src] before taking out [medigun].") + else + if(!usr.put_in_hands(medigun)) //Detach the medigun into the user's hands + to_chat(user, "You need a free hand to hold the medigun!") + else + containsgun = 0 + icon_state = "mg-backpack-deployed" + item_state = "mg-backpack-deployed-onmob" + to_chat(user, "Deploy") + update_icon() //success + if(!bpcmo) + medigun.update_twohanding() + usr.update_inv_back() + + + +//checks that the base unit is in the correct slot to be used +/obj/item/device/medigun_backpack/proc/slot_check() + var/mob/M = loc + if(!istype(M)) + return 0 //not equipped + + if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_back) == src) + return 1 + if((slot_flags & SLOT_BELT) && M.get_equipped_item(slot_belt) == src) + return 1 + //VOREStation Add Start - RIGSuit compatability + if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_s_store) == src) + return 1 + if((slot_flags & SLOT_BELT) && M.get_equipped_item(slot_s_store) == src) + return 1 + //VOREStation Add End + + return 0 + +/obj/item/device/medigun_backpack/dropped(mob/user) + ..() + to_chat(user, "Dropped backpack") + reattach_medigun(user) //medigun attached to a base unit should never exist outside of their base unit or the mob equipping the base unit + +/obj/item/device/medigun_backpack/proc/reattach_medigun(mob/user) + to_chat(world, "Null") + //to_chat(user, "[user]") + //to_chat(user, "[medigun.loc]") + //to_chat(user, "[src]") + if(containsgun == 0) + to_chat(world, "doesnt contain gun") + containsgun = 1 + if(!medigun) + to_chat(world, "return") + return + if(bpcmo) + icon_state = "mg-backpack_cmo" + item_state = "mg-backpack_cmo-onmob" + else + icon_state = "mg-backpack" + item_state = "mg-backpack-onmob" + to_chat(user, "just before medigun busy") + if(medigun.busy) + medigun.busy = 0 + update_icon() + user.update_inv_back() + to_chat(user, "just before ismob") + if(ismob(medigun.loc)) + to_chat(user, "ismob") + var/mob/M = medigun.loc + if(M.drop_from_inventory(medigun, src)) + to_chat(user, "\The [medigun] snaps back into the main unit.") + else + to_chat(user, "!ismob") + medigun.forceMove(src) + to_chat(user, "\The [medigun] snaps back into the main unit.") + + +/obj/item/device/bork_medigun/linked/proc/check_charge(var/charge_amt) + return 0 + +/obj/item/device/bork_medigun/linked/check_charge(var/charge_amt) + return (medigun_base_unit.bcell && medigun_base_unit.bcell.check_charge(charge_amt)) + +/obj/item/device/bork_medigun/linked/proc/checked_use(var/charge_amt) + return 0 + +/obj/item/device/bork_medigun/linked/checked_use(var/charge_amt) + return (medigun_base_unit.bcell && medigun_base_unit.bcell.checked_use(charge_amt)) + +/obj/item/device/bork_medigun/linked/attack_self(mob/living/user) + if(!medigun_base_unit.bpcmo)update_twohanding() + if(busy) + busy = !busy + + +/obj/item/device/bork_medigun/attack_hand(mob/user as mob) + if(user.get_inactive_hand() == src)// && loc != get_turf) + return + else + return ..() + +/obj/item/device/medigun_backpack/attackby(obj/item/weapon/W, mob/user as mob) + if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker) || istype(W, /obj/item/weapon/reagent_containers/glass/bottle)) + + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + var/reagentwhitelist = list("bicaridine", "anti_toxin", "kelotane", "dermaline", "tricordrazine") + + for(var/G in W.reagents.reagent_list) + var/datum/reagent/R = G + var/modifier = 1 + var/totransfer = 0 + var/name = "" + if(R.id in reagentwhitelist) + switch(R.id) + if("bicaridine") + name = "bruteheal" + modifier = 4 + totransfer = tankmax - brutevol + if("anti_toxin") + name = "toxheal" + modifier = 4 + totransfer = tankmax - toxvol + if("kelotane") + name = "burnheal" + modifier = 4 + totransfer = tankmax - burnvol + if("dermaline") + name = "burnheal" + modifier = 8 + totransfer = tankmax - burnvol + if("tricordrazine") + name = "tricordrazine" + modifier = 1 + if((brutevol != 100) && (burnvol != 100) && (toxvol != 100)) + totransfer = 1 //tempcheck to get past the totransfer check + else + totransfer = 0 + if(totransfer <= 0) + to_chat(user, span("notice", "The [name] tank is full!")) + totransfer = min(totransfer,W.reagents.get_reagent_amount(R.id) * modifier) + switch(R.id) + if("bicaridine") + brutevol += totransfer + if("anti_toxin") + toxvol += totransfer + if("kelotane") + burnvol += totransfer + if("dermaline") + burnvol += totransfer + if("tricordrazine") + var/maxamount = W.reagents.get_reagent_amount(R.id) + var/amountused + var/oldbrute = brutevol + var/oldburn = burnvol + var/oldtox = toxvol + + while(maxamount > 0) + if(brutevol >= 100 && burnvol >= 100 && toxvol >= 100) + break + maxamount -- + amountused++ + totransfer ++ + if(brutevol < 100) + brutevol ++ + if(burnvol < 100) + burnvol ++ + if(toxvol < 100) + toxvol ++ + var/readout = "You add [amountused] units of [R.name] to the tank. \n The [src] Synthesizes " + var/readoutadditions = FALSE + if(oldbrute != brutevol) + readout += "([brutevol - oldbrute]) of brute charge" + readoutadditions = TRUE + if(oldburn != burnvol) + if(readoutadditions) + readout += ", " + readout += "([burnvol - oldburn]) of burn charge" + readoutadditions = TRUE + if(oldtox != toxvol) + if(readoutadditions) + readout += ", " + readout += "([toxvol - oldtox]) of tox charge" + if(oldbrute != brutevol || oldburn != burnvol || oldtox != toxvol)to_chat(user, span("notice", "[readout].")) + if(totransfer > 0) + if(R.id != "tricordrazine") + to_chat(user, span("notice", "You add [totransfer / modifier] units of [R.name] to the tank. \n The [src] Synthesizes [totransfer] charge of [name].")) + W.reagents.remove_reagent(R.id, totransfer / modifier) + update_icon() + else + ..() +/obj/item/device/bork_medigun/linked/proc/should_stop(var/mob/living/target, var/mob/living/user, var/active_hand) + if(!target || !user || !active_hand || !istype(target) || !istype(user) || !busy) + return TRUE + + if((user.get_active_hand() != active_hand || wielded == 0) && medigun_base_unit.bpcmo == 0) + to_chat(user, span("warning", "Please keep your hands free!")) + return TRUE + + if(user.incapacitated(INCAPACITATION_DEFAULT)) + return TRUE + + if(target.isSynthetic()) + to_chat(user, span("warning", "Target is not organic.")) + return TRUE + + //if(get_dist(user, target) > beam_range) + if(!(target in view(beam_range, user))) + to_chat(user, span("warning", "You are too far away from \the [target] to heal them, Or they are not in view. Get closer.")) + return TRUE + + if(!isliving(target)) + //to_chat(user, span("warning", "\the [target] is not a valid target.")) + return TRUE + + if(!ishuman(target)) + return TRUE + + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(H.stat >= DEAD) + to_chat(user, span("warning", "\the [target] is deceased!")) + return TRUE + + /*if(!H.getBruteLoss() && !H.getFireLoss() && !H.getToxLoss())// && !H.getOxyLoss()) // No point Wasting fuel/power if target healed + playsound(src, 'sound/machines/ping.ogg', 50) + to_chat(user, span("warning", "\the [target] is fully healed.")) + return TRUE + */ + return FALSE + +/obj/item/device/bork_medigun/linked/afterattack(atom/target, mob/user, proximity_flag) + // Things that invalidate the scan immediately. + if(isturf(target)) + for(var/atom/A as anything in target) // If we can't scan the turf, see if we can scan anything on it, to help with aiming. + if(isliving(A)) + target = A + break + if(!medigun_base_unit.bpcmo) + update_twohanding() + if(busy && !(target == current_target) && isliving(target)) + to_chat(user, span("warning", "\The [src] is already targeting something.")) + return + + if(!isliving(target)) + //to_chat(user, span("warning", "\the [target] is not a valid target.")) + return + + //var/mob/living/L = target + + if(get_dist(target, user) > beam_range) + to_chat(user, span("warning", "You are too far away from \the [target] to affect it. Get closer.")) + return + + if(target == current_target && busy) + busy = FALSE + return + if(target == user) + to_chat(user, span("warning", "Cant heal yourself.")) + return + if(!(target in view(beam_range, user))) + to_chat(user, span("warning", "You are too far away from \the [target] to heal them, Or they are not in view. Get closer.")) + return + current_target = target + busy = TRUE + update_icon() + var/datum/beam/scan_beam = user.Beam(target, icon = 'code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', icon_state = "medbeam_basic", time = 6000) + var/filter = filter(type = "outline", size = 1, color = "#037ffc") + var/list/box_segments = list() + var/active_hand = user.get_active_hand() + playsound(src, 'sound/weapons/wave.ogg', 50) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + to_chat(user, span("notice", "Locking on to [H]")) + to_chat(H, span("warning", "[user] is targetting you with their medigun")) + if(user.client) + box_segments = draw_box(target, beam_range, user.client) + color_box(box_segments, "#037ffc", 5) + var/ishealing = 0 + while(!should_stop(H, user, active_hand)) + //stoplag(15) + if(do_after(user,5,ignore_movement = 1)) + var/washealing = ishealing // Did we heal last cycle + ishealing = 0 // The default is 'we didn't heal this cycle' + if(!checked_use(medigun_base_unit.chargecost)) + to_chat(user, "\The [src] doesn't have enough charge left to do that.") + break + H.add_modifier(/datum/modifier/medbeameffect, 1 SECONDS) + if(medigun_base_unit.brutevol > 0 && H.getBruteLoss()) + H.adjustBruteLoss(-1) + medigun_base_unit.brutevol -- + ishealing = 1 + if(medigun_base_unit.burnvol > 0 && H.getFireLoss()) + H.adjustFireLoss(-1) + medigun_base_unit.burnvol -- + ishealing = 1 + if(medigun_base_unit.toxvol > 0 && H.getToxLoss()) + H.adjustToxLoss(-1) + medigun_base_unit.toxvol -- + ishealing = 1 + if(medigun_base_unit.brutevol <= 0 || medigun_base_unit.burnvol <= 0 || medigun_base_unit.toxvol <= 0) + medigun_base_unit.update_icon() + if(ishealing != washealing) // Either we stopped or started healing this cycle + if(ishealing) + target.filters += filter + else + target.filters -= filter + + + + busy = FALSE + current_target = null + + // Now clean up the effects. + update_icon() + QDEL_NULL(scan_beam) + target.filters -= filter + if(user.client) // If for some reason they logged out mid-scan the box will be gone anyways. + delete_box(box_segments, user.client) + + + + + +#define ICON_SIZE 32 + +// Draws a box showing the limits of movement while scanning something. +// Only the client supplied will see the box. +/obj/item/device/bork_medigun/proc/draw_box(atom/A, box_size, client/C) + . = list() + // Things moved with pixel_[x|y] will move the box, so this is to correct that. + var/pixel_x_correction = -A.pixel_x + var/pixel_y_correction = -A.pixel_y + + // First, place the bottom-left corner. + . += draw_line(A, SOUTHWEST, (-box_size * ICON_SIZE) + pixel_x_correction, (-box_size * ICON_SIZE) + pixel_y_correction, C) + + // Make a line on the bottom, going right. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_x_correction + var/y_displacement = (-box_size * ICON_SIZE) + pixel_y_correction + . += draw_line(A, SOUTH, x_displacement, y_displacement, C) + + // Bottom-right corner. + . += draw_line(A, SOUTHEAST, (box_size * ICON_SIZE) + pixel_x_correction, (-box_size * ICON_SIZE) + pixel_y_correction, C) + + // Second line, for the right side going up. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (box_size * ICON_SIZE) + pixel_x_correction + var/y_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_y_correction + . += draw_line(A, EAST, x_displacement, y_displacement, C) + + // Top-right corner. + . += draw_line(A, NORTHEAST, (box_size * ICON_SIZE) + pixel_x_correction, (box_size * ICON_SIZE) + pixel_y_correction, C) + + // Third line, for the top, going right. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_x_correction + var/y_displacement = (box_size * ICON_SIZE) + pixel_y_correction + . += draw_line(A, NORTH, x_displacement, y_displacement, C) + + // Top-left corner. + . += draw_line(A, NORTHWEST, (-box_size * ICON_SIZE) + pixel_x_correction, (box_size * ICON_SIZE) + pixel_y_correction, C) + + // Fourth and last line, for the left side going up. + for(var/i = 1 to (box_size * 2) - 1) + var/x_displacement = (-box_size * ICON_SIZE) + pixel_x_correction + var/y_displacement = (-box_size * ICON_SIZE) + (ICON_SIZE * i) + pixel_y_correction + . += draw_line(A, WEST, x_displacement, y_displacement, C) + +#undef ICON_SIZE + +// Draws an individual segment of the box. +/obj/item/device/bork_medigun/proc/draw_line(atom/A, line_dir, line_pixel_x, line_pixel_y, client/C) + var/image/line = image(icon = 'icons/effects/effects.dmi', loc = A, icon_state = "stripes", dir = line_dir) + line.pixel_x = line_pixel_x + line.pixel_y = line_pixel_y + line.plane = PLANE_FULLSCREEN // It's technically a HUD element but it doesn't need to show above item slots. + line.appearance_flags = RESET_TRANSFORM|RESET_COLOR|RESET_ALPHA|NO_CLIENT_COLOR|TILE_BOUND + line.alpha = 125 + C.images += line + return line + +// Removes the box that was generated before from the client. +/obj/item/device/bork_medigun/proc/delete_box(list/box_segments, client/C) + for(var/i in box_segments) + C.images -= i + qdel(i) + +/obj/item/device/bork_medigun/proc/color_box(list/box_segments, new_color, new_time) + for(var/i in box_segments) + animate(i, color = new_color, time = new_time) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index db94f63adbe..2c59a435ac6 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -10,7 +10,7 @@ active_power_usage = 40000 //40 kW var/efficiency = 40000 //will provide the modified power rate when upgraded var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/suit_cooling_unit/emergency, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery, /obj/item/device/paicard, /obj/item/device/personal_shield_generator) //VOREStation Add - NSFW Batteries + var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/suit_cooling_unit/emergency, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery, /obj/item/device/paicard, /obj/item/device/personal_shield_generator, /obj/item/device/medigun_backpack) //VOREStation Add - NSFW Batteries // RS ADD Medigun backpack var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered diff --git a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm index 16715d9c3ac..94664a3296e 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm @@ -17,49 +17,49 @@ //Area allowing backpacks to be placed on rigsuits. /obj/item/weapon/rig/vox - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack, /obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack, /obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/combat - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/ert allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \ /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ - /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/light/ninja - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/merc - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/ce - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/medical - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/hazmat - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/hazard - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/industrial - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/military allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \ /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ - /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/pmc allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \ /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ - /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack /obj/item/weapon/rig/robotics allowed = list(/obj/item/device/flashlight, /obj/item/weapon/storage/box, /obj/item/weapon/storage/belt, /obj/item/device/defib_kit/compact) @@ -68,7 +68,7 @@ /obj/item/weapon/rig/focalpoint name = "\improper F.P.E. hardsuit control module" desc = "A high-end hardsuit produced by Focal Point Energistics, focused around repair and construction." - + icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob icon_state = "techno_rig" @@ -85,7 +85,7 @@ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE // so it's like a rig firesuit armor = list("melee" = 40, "bullet" = 10, "laser" = 30, "energy" = 55, "bomb" = 70, "bio" = 100, "rad" = 100) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack) - + chest_type = /obj/item/clothing/suit/space/rig/focalpoint helm_type = /obj/item/clothing/head/helmet/space/rig/focalpoint boot_type = /obj/item/clothing/shoes/magboots/rig/ce/focalpoint @@ -136,7 +136,7 @@ /obj/item/weapon/rig/hephaestus name = "\improper Hephaestus hardsuit control module" desc = "A high-end hardsuit produced by Hephaestus Industries, focused on destroying the competition. Literally." - + icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob icon_state = "ihs_rig" @@ -145,10 +145,10 @@ allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \ /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ - /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit) + /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 50, "bomb" = 60, "bio" = 100, "rad" = 20) - + chest_type = /obj/item/clothing/suit/space/rig/hephaestus helm_type = /obj/item/clothing/head/helmet/space/rig/hephaestus boot_type = /obj/item/clothing/shoes/magboots/rig/hephaestus @@ -198,7 +198,7 @@ /obj/item/weapon/rig/zero name = "null hardsuit control module" desc = "A very lightweight suit designed to allow use inside mechs and starfighters. It feels like you're wearing nothing at all." - + icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob icon_state = "null_rig" @@ -210,8 +210,8 @@ boot_type = null glove_type = null - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack, /obj/item/device/bluespaceradio, /obj/item/device/defib_kit) - + allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack, /obj/item/device/bluespaceradio, /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack + slowdown = 0 offline_slowdown = 1 offline_vision_restriction = 2 @@ -244,7 +244,7 @@ /obj/item/weapon/rig/baymed name = "\improper Commonwealth medical hardsuit control module" desc = "A lightweight first responder hardsuit from the Commonwealth. Not suitable for combat use, but advanced myomer fibers can push the user to incredible speeds." - + icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob icon_state = "medical_rig_bay" @@ -266,14 +266,14 @@ /obj/item/roller, /obj/item/weapon/storage/backpack, /obj/item/device/bluespaceradio, - /obj/item/device/defib_kit) + /obj/item/device/defib_kit, /obj/item/device/medigun_backpack) // RS ADD Medigun backpack // speedy paper slowdown = -0.5 armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 25, "bio" = 100, "rad" = 20) /obj/item/weapon/rig/baymed/equipped - + initial_modules = list( /obj/item/rig_module/maneuvering_jets, /obj/item/rig_module/sprinter, @@ -318,7 +318,7 @@ /obj/item/weapon/rig/bayeng name = "\improper Commonwealth engineering hardsuit control module" desc = "An advanced construction hardsuit from the Commonwealth. Built like a tank. Don't expect to be taking any tight corners while running." - + icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob icon_state = "engineering_rig_bay" @@ -394,7 +394,7 @@ /obj/item/weapon/rig/pathfinder name = "\improper Commonwealth pathfinder hardsuit control module" desc = "A Commonwealth pathfinder hardsuit is hard to come by... how'd this end up on the frontier?" - + icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob icon_state = "pathfinder_rig_bay" diff --git a/icons/mob/items/lefthand_guns_rs.dmi b/icons/mob/items/lefthand_guns_rs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9824e7ebe17ee525dee9701932f5461bc3905d2a GIT binary patch literal 737 zcmV<70v`Q|P)9g-@iodn!608Z9(4LyJi_?EnA(0d!JMQvg8b*k%9#0D*c` zSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1pEipv+Xtj00H4iL_t(oh3%M4Pr^VDhD$26 zaB^MzNUtV(rCGqp3DcUWCrK5qVk9P>@B$k*+G>Dr}6jKEn>A|ctkYS5{}X~h!*F`oi8vLC37zk|+hu`+T^Rc6FJ#^f7S z*{~UbFN2&(_Jchh7hI=8m@IP;k~6`2%xR8p;zLph6B}08KR84I^Ffya#_0I|u<2Aq8SF$07#MFm#-oPN;OP}W;!2~udC_S-H|A+W$KiF97iP92xM|$>1RFqA+xSYnoR4Eb3+dlA}!f_*fePG_P1G1Y!id z`u%2Wuy6Mvy-}81&LVU1$t@=!N}E6+5D3-)x7!O4F+VUkOZf8xj=;kCL8-CY{9tyk zDX%s^m^JjP%@1Y`y(f@ten2(!iRK4%L!W4VKsWS><_B~`pKN{*t+hgkV6FTBv#DUh TPPB6m00000NkvXXu0mjfcPvBE literal 0 HcmV?d00001 diff --git a/icons/mob/items/righthand_guns_rs.dmi b/icons/mob/items/righthand_guns_rs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a9e85902d84783fca6db1e10117c49f06f4fac28 GIT binary patch literal 643 zcmV-}0(||6P) zu(*=wz)z&Odn!6&X?E4(;xscuOlXBbNpm0?EvEC-TL1t60d!JMQvg8b*k%9#0D*c` zSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1nK%HtBmmyp`WI)3h-@$c!O9j-%c`5{4&s{2@He#9Q+D0a? zA8$ewH|CLEqA=qmO(V^_kB8+b&lUJ(obUoOMyph5-rz-L2U$@}%>Zxz9XCF8Psv#| zlSTCm0+hs!m1!cW?Tv~Ipbds$7>3yngGo2TE9b;{!w8R!y$F%o^^0LA<^v)#61;+D zxVE|9ecTLVc+5EpP{Y46&At92L3*B4xKT(DP({HQ24pU7s6J3_@vwoz=o&Z56h2HT zIP|1^LX93$lDq}@F3U>AgfM>ai&HqPrfb4z%4<0Dmz2RU48uS=_5;iA+7Ik4^n=Dt zj=lof52P|@R;zv>GVD*77X3gpZ}OTJ{XoCTziHJEw3{4FCHjGOlcT9rKUgBeR{elZ d<$myg`2zM&Sa8od3snFB002ovPDHLkV1i$R6|w*T literal 0 HcmV?d00001 diff --git a/icons/mob/modifier_effects.dmi b/icons/mob/modifier_effects.dmi index 99a4f6e4ed0d40292cf2787218e58e8e4776b263..b814c176ba0bd593ca55d8b36cda856da7c3d1a2 100644 GIT binary patch delta 24695 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 WPcBIBOh*2@2n|cpt-Nmc{Qm&Gt4kpO delta 24326 zcmb5W2Ut^Ew>G*0NI)r~Zlr?(Vxjk5m8w)ldJ*YWdS56AD7}~nh7JNs@4XkPp-HdO z2@rZGxnb|`JKs6yzxO`(=2=gYxz=RNnOVj=#yiKLrw@|T1Bqq|(d za1$mlIvAgL~1W!#H(5bH;nQ)7`Gv8^0SMWY79z3D?I@raHXVDTI3;n?=C* zU?XqoogV5s7nM8%p>)?_BRNZd2`^d0EZB=Z?-}BUurnECQ5M7N6|)Nv#V5hOg+y3k`wH zJEOPFBhCdVo26-;<<;&rvV{g3Y2Q{Os!`9Z{FN-(E|TZ*M8{rell(RB=e{n;A1wf2 z0+gQ0y!1qD)q^}g%|&9-KQFDa*Eiog&t@^28$OKX8KSxsd^FmiN*+I`Jt(g>r8~;a zxG?G)w4(RLU5)yMt~p7a^S06KKy;Z#M>I+Jm*?+Nv<6GWYUq*r0A=!0%0~ zb-%1UX|!pK=H*9upRy;%D4S|v6mdOS4M)}(NxES7CE5M%T>W9ZF|VXi#rdYc{Tb1o z0`6Bf!nl$-$Q|L!3txQrKU{T-A3X3pEy0M<)u@bMw_4_cUr_|)>wZ6AAF1)R#>s?- zt3A}Wp%e}DRl=1VsZ(?WkJ()*Pc=ouVMywVf+UDb7v|5z-p*c@OCiFgFv-PnR`|7k zfjohn~|i?qqTsOJ&8F<(F0^hn+3C|$Wr=Qz9e3$sOz zT0gBxHWFJ+E=1+F=QzX-;`4%6f=_$w*`#YR`sQ);z-QAqe$C0fT*dWN>KPp*962pD zgBA~sxenU)6w1g#Z7x}LxZn!-F9$J*1xNeSawn9!7S>3!bj1=6)&Fure{O;|7D-v{ zbmj=^sHF(9KZ)-~Md*~p&%_hx?4zfxx+@#nxLY8iHdtF4)5oBkJ04vTR)J=Lp$ZY@ zGLw)&)_o^dU=}@Du=`mRlKDO0}k9m*gSk_vUM~DQ!_7AfY{Rz2u@ zn;>VxJ0CiUE{(k*y5pA*EWL&fM5Qz1fJ@|(R?cHdq#;A)Mb)NeLI&p|bylFU&(TPQ z)R zOM<2C`7zZ!`%@9aibt8AlICn9sv3d*sl9QpT#P zP!75lJ7sHAXNgt?B9<3fSbV0z&T7&^7O_u zD%)oz<;j;pyiP$$jv2Grx_7F2f{*aj;|w|9-6_D$KJ!v!f&Lax*|frfO;4e$jzb-X zW+KeYN+hb~H_SL9b$X;i(OS4=H$#;$URwW{LZ4EIJ^+?)j*!P~n26`r)eRi-^bRB5 zgc5LyQ4nVQL`&0QoRayhah1fIj5!adL5r}}%N_PS8<%iNV&(4I=w_8>G*8=+ zZX*;*@kBEwYgrUfRr)3&uw&y9ND(*4RNlQZkaV7Br>v`QsSssh5fb#nCs$2)Lydmg zmJ13I5C7`sSdSeVTdMeQoKlEWlI3;SKS}|UuenDJ;9t)$qatICm!=XD`g?Fer%~fl z4$G_&A-V%eGl4ok(XUT6<)37vytsjGxr>B_z`2rqmJvQ%495{F8&7jfKe~g(ZOOAB zaV!PUPwmr_)Q2eX5e@e4cUy-n=7DJZ2h^Xa>6g>GGt~FE7A7m)?KKk z({TG4EXOPN$b3PD`Xd8oH9hd|Tr!Nll+p%WTzQ6xa=xWdkG*Bi1_#Pok4inYZr#)E zI;)JYXYXlM&dF%M$^FVhiQeM-gE|p!uQw{Qn`yfCHgF;KdTa*V!op%BFd%cxqhh=k zGEcZAz&Ii~%ncM8!Qh@YZY}#>$X+itm|JDbfD2G1=R8S`)+P+o1uHIebSgP`RKy~K z&cd~lg8U<9d#1dxwsUGIWHzBTTEL+6SB4_-iMO=sq~jB> zgiVcY>|4u_|3pp2FV#-2Mg3lN2}^dTuOSGy`HiHs?B`)LqTIdgyBe1^{I>Y0vv*!2 zmrv{Dxu9%HnhIbDqpAEjID4;C6{^C(A;6MdewcHZ7n~~xAKmuv8HRZWN5d@gvZlXK#Mfx znw-Ya!tb6=(F3Y?%1=LtLe}ls`rZk4u1&*7bQn-KQ^@aMVvc3IA&T~uJzJ&AI+dy0 zi)BR?8GaTmqeiRAZfyoL@|&e!3TW@@iHV)Cmi@Rkwe{^Bzv$uIHDIJ6U^?)_N64(`2qfpo++Lsw5s240|HB^0Osiuq zM=w7oJE8PplzWI)3@c@j;u~qGSh>@?6Rxb~jh*m-I0*_X=#Db{N*F-QI1T)X)+^Ks z2j5!Mm*<`6i3pQ!OGr=vkCHND!ZrKkwFsJcHOW^u$?M(ZD;@Le>XB5o(Q8j^6$m>w z4=*bMeEBrzd;;9Zva3 zCGQB6Hnq$nG`hd$k{_7>56u`9s=jG*Kb$O>l=X(y8I`nfaPHkxRZ|GIn7#K7FedxWE; z+HwrhAtk;YoAI1eK1fa>dGFcj^qT!Ey;9ZBc@$?lJ!Vw-$Yc){_0$GOI?HkO?wehZ z@r}2QM|SIV4ys<@B)NzJQ863=84@k59l3ieSV^qTeiwLRW2O0lW7T0q%(id+%aG;w zV`JG_idpQRTTMAP3IFQO^}l865LqJ4IKsg-+EVIczEr#0&UcpU?`e5V+zAtMLYA!p z0gLzQ83^t0SGULKXI7v%P%^o00s!;oCmKxvFn|{>1sK*fU0D(U84=yp$9w>;n2vz& zm-&1YaZRbl0Dzc!N9^RTJWju#7KKv4y__=YJp@+Bw_RSHN)UdP^VmAG+%5|I+G3W;MR{|nrA_V=u;^E>f5?ylFLm9(P%KzU{EKfSc1oz^F0 zA*R=B9Q!F|d6{eOS0yR5i}A^Op=g5}tt`m}Ps?1hF7tYX>h=;R>f;4Ts3ZP}B-psR zL-b=i3;(mlbd9S~Ke+(8#wU-SsgOjOPbx>ahA*1^wlTBy&e%<(+PP{_?WYmR>W16u z!@$xl1(>~(#l!PviKh%dC7*n3H5&$ZQSs>RRsD&PFn8%6x1CDT zcSknW9ZJk4XUQahrI>m`dEQ%mqTO;|*z7NSQi^G8I&WR~z}aUN-)SNSU*}6QBaS&G z&R57Bt&Kz2DJs4h_5zb45fl18%7I5Eog*HQdFN<_$c;4) zND=Sksa$4YJ|;sRkT-J+Hu1AqE}rx+<@;M+e)%Gi-}gu${JRCLkB2#1p2g&%)8z1_ z)Tb?(TRJob`cx8POXKS%*77QTs=1;rWBE8(0sqF8`}bv>fk=NuzRO|S5uA$=JEwK` zN%k3i671&6ulF95_|onFK*n@HU6!1hC(NvZeZ6e70({}jm9;rY=JkV1P8^Y5#FOpKJQ|A+ptPgz&xE2VAaP1;3F*dvIMnEuKt!^mf)^^y9IA z8W{;N7;2WfJ9H0iaH)`2t3owjlq7(H-QQICOg0475E;Wp-f;nPrndf|ojzu&C~WFk za*5qhp4!s1^)^8HQdXY+&g+WMQ=7JNB$LqOb-rx9hprold{u#CZ->sM#|D6V<#* z^kByqYjV8A<`b9Rei!q$DboCBczS8xvm7CFR^ErVN^C7(YKl6+m1Md@bp%x(S%m56 zI)Zb$WWWEkAn=*2f63Eyc_ySkbGOc2tdz>jUPXC(Zy|gd3fMl&v1ot}_|h}_)4b7E z40J<}eNg^8i3Dt)&RpP+*3~!rAg%@5i1!jA0h;Q!Hy)aEko3&N^Ln49PC@3y%hjCi zQ%dcWlUf4<^~|-%7`^v{zehctaxPd`Dgc|Uaq^hY>kvY%F(Z($T8yT-a(=UIo|MWj zhu;da&`-Rq%rqJMYNICB6|atJitF?<)RdtvB0#L|d7>9S4q^`TIik!`^0U~dVf6zB z_j+L7?FEzMrXiCz48nnUi?ERduqUr_Wgm>iDJ7Wx zTNmWGty^l4MH9S0P!(8zG%RI!=mu<}Pam8sHP3c{o?2ug+|PpHrbx^)k3M z1uai-3WTf-7^Y)-^fATp_O$bBmvG7>pJe!cE93O)HhSjCF><^7Jn8(U>rT7mxOXNw zVH$(F^UE^i9D1D=2X>Zr9mnrZ_j*DOHeVo8BwGC2^EdsF&4EyUgND18$+z7b~)k*4KV&KQfCr z*!)&oSXL+pBhuF*EgX-P$%l|VTyO9_T@E}q#@Y@Os~2MBC)!y95^qkf@qGm=m+tXT zDQxWpXR)RZs_^+R*KN2Rh`rpWv;R12>5Jts2%!tk7ipOn82L4I9j=1nq$q%oh`e&= z!Bf92ODk~$lXUL7zfw5~2Uo()9dPcCJbB5i^fJbR=bkgAua7mmqxxHo^ng;%KE(|c zPO+~7QT&+V&0F!*Rb|`vZ4W_GiW|;lOd3Z6wLl(Q+x&xEpS&Y#^WfJ%Yk${#;P*6U z6xncjlE5u=TS6nybPC|GBkneJBd@) zH6H13A+ksKTplPB*ZV~MOwEwHl{&0EAzr{Q;KdFiyxFGB^fOU_%K!0r12Is&eLz>fKYJkoJvSe|j26IWVe{rB&VkfbW+yiAnyoa z*89b;Kq=r5tQgL5FW~XbAbn;d9qC4t@<{_asK_UJ-*RwA`0WW@sLlVBU%jz`Ex7aOWp~kp4>aiIHa)Ex{8YKE{BeC=J5AyQkw>`y17@1vUux8KKB6=)9Pl(Qr<`IOl1(~OI3%)9bmU<%#R)RYwxAWmEzAcexDe9?vq13F7mg7^p2A0R6GJ_ z#F6%wm*nF6Mr1r1tU#D67i>lKOA*h_XivoRyhZ7`UcnrLCv$ZLSCUY)nIGn2gxLqD zr~1svKJRj^4bjFo!4XC2JNybC#KIvVG1+YMz=fm zeRhV<_Kg*G{rSNhhkqQxUV8ne0Qz)S*W!LT|KmmtmKNm(TA}AJ9lTU%idac4wjDLu zZYtBPQR3%4`gTtL(?MT$+ArZ!rz9kSy`An8|&<3^ZNg z5(tRnzFxfoLKdKqE00T>@rpq#y3HR|du<=`Uwj%AisRD~|0kceYW4aR!bL*E$Hz^ z&pjD{9N%IF=a=F3TlV4Uew@$cWIi$_B~KjR6MMSRC=!RFqo&PZp0TJ$>U?2uy_7nW zs4P9E|H!GWEgd0oe{C;Ab9@UP%|VUm)J4V zD0w_q$j3_i+vGB-3cB%2kFSNvMjTK+_Vm~RsFLyNgO(%tNdkO!)2rIF{O(F5BgM)( z$8UWT(F^_$NtI-4Ui9_B@Mu$wJ+WOGW*F5KahF+k;m2G)|Pao{wby z`f%9q<)EJipAgBBH9Da2QE>UOeUPLa9AFo4xY1f!qwXPU$111$o+@^D(tE^P`zdlR zY)@_52o17j z(glp@y>v+7=&ZTs#+dz4fc7`v?PQW@#<$KX)^4)SZnVWnSVY=Xgolp!PDNpD#AQ2FNVW8KZxPU!VdfZ{q!#M^iq!NmIjEXG^d5?ssYtMRj4 zZZ`FedTOjI#(T28FXo5MAL%(e2l<21c>mLj7_2nPGLayV|LOOn;%MviveJZrqY+!a ztd~~FK>?w9$?4hVeSRO0DGWS3D#!Tt_s2}apWJKkT-R8=rQksz-J=il4z=(Rw%ph0 zt1KKWMS2A89xc}m2bh0X8DA07YHPVTM-q1muFF!>SzbHff^eg+!F|8}J|?-LUf%F% zp1qg+W3dBMWFt zOkScvbezQnZEE|maFWL6z~4SKbH#Mk6bSiz*I)W*ez4Ixd)#ZTmu=Cz_%+G?OL1r2 z7m2t6Qc6%Ax09L#**{5~jgB73uer2|&UNuOz_>n@*VwL^ZP8PGS{j{#@p>=aVFp+W z|7^Ul%Ul2LtrxPgi!+=5KDN$c&nDvi(zmW5WS+r`92bee_Pv9{sBV(cdv)JkcFCxG zW!)#LREqeA)XMuesl{$NezW@~_&2NN_?$gytdC~pwg0cyov2{n)jdK*RNZ#E+~Z=F zEV|hW{+@#o#2B(a*hOd~seI+&^Rwq{-q>eL^z)ZojMu~;2FY-Sd2Z%r#SuZs|3hqP zxcp$8o$&jhb@}$|5gp(po;lVUU_U=iPg^&2apeI#hme2(@NXvT*G}z~rUg>};|yFC zzv9lO8*Nb1&;AFK^%w4lgDzAQm<(AraI?Cc4d@ZCY8HHiW5>)4xf&6y*O@i|Cxg&I zxhTkr@Ro8d#^=HDhrYc(H?DD6hS*DrEN0 zq(9;-T)&jiO^4dRcl+6i&kryvIhuHB7fo>N^Df@fV}l6rY zyeYNMXR?c+y|h8T=V7+zW9sKp7x?)cMs=PSMhb>`T30t@~jK@H7*=9v19~b6#$@pM;3rfsGY1P7BQmA77k46hI&HtUZ4h&^#`< zn?O=Zp6ofh^4{l7^b?TF{{esHVuhwFpxF`r2B=QIHX436%Lv2QgBpvfc|rrOE+HP} zPY79DdRfr=T0pi$84;JSv_|caN<72^IHKfU^1p}@B@wONUWb>?&vSd3NynM{34}|A zUn!q-`>lp<@n7$bjs0>w_nCoJu@?BDx+)gBfN%Y0cpbbzYL?`YYmD3+j z&z5ghtyT;KZEQw5U=up;4RHq01WNwP+(fPG7Lp=Y8LMy4huUp5lAot5$giV|TZPW` zz|XVp(`MgvOoEHs&m!M1OaThUG-VzvlL3oqUpz%@Nqdb*H95*Jl`icb6F+9PQZ89j62lrC;&_3o* z?%BUh&sy@}7#RMZ+crLVl;d_*A<5?hW`e0KOi@Fo+R&zHrGQw|%NP~HUEXJ5n?stN z|H}q>*wI*ySvYgplAESId)!q{ z@8+!v^KEqhOtRn)^NUBwPs_(?I2NW(TH#+T%$S;_$SJrLonO+*Tf%s@LK`btf9Ocv zE6m{AEj_M<2@iMn)}zmxILmygWoUK9LPA1~Tq zYOI&mDyAeEmfYok@>B2_JZy`SStzV~U0?VkA29ZdGfv-{-1KZaq?d$x=v ziE>Q1ZOA}qqJXa2lyYIZr~(4%l$f!GrI={lQU|-a8y!QQAcp4i@wP z89sk0MQQ4}U4Pt4UhAI9sH}sK++$|(_TVv3D%h%Vepyn`NGGySzU-9%3omfLL$Ee5gsyc0#F&p0!faCe$Gj~>0a(MNU3wCKSezW9nV3AR zlts9-OmOCJg=1pcTb@f9efYJ`lJ@iCnf|?gkp(;WDCk~rnXE{_q}p4`&G)CNdwzqN zd;y(%B(Z1bbO)0#@6TzmT`SCkZ0QZff6{?eU}%}s+6v18ye{~fFAc&s#EOZU)_fM4 zB{a#x{!&n+U3brk*wop$`$?A~N3Pqn_z#ga^9)&eOcJGEn=`;-@k}JIFFtR*^%E;| zhSCeMGEkD-G~HUKgJcl$Nmql+w$#A(%n5H1tB8B{&m%%hSCb9<0Lly!ZIZVe&x4HW z^G56`g_DsxwWARjD|UJ6JgQ$K2}JeYy17&APU0yG9;|ddxcR2a;N8XD?!e!A5i-S- zl`NK4&1}xkEpPsZkHR|wI{A&P(o7kY@JKgTP%gz!6*#XDMjdau?abKLvn<#ZCYHz_ z#*J=H{mGjvea&1w=B?B+VI*MwyL(F&FWeGFS&QqsQgYjBadgj zJ9dtT`a_WUaSN7mY@IyU6X?y~6>Nv4xhzHT>;;0UN7kr)tuwN6F4l9O;4P0wHis+! zuKFlYMl3C*GtAel8`uA*IbF9N|I^RkiwR1+DPZC=Wb$R3yR*jAyJ&3XI^VHvHnK;e| z*^V_f(ho^A>FLNW%Pivb=f)EABctc^+{21-5h@rLj3uXKL@C-<3I%>2d4{6S6cx^D zjETZ?P+D80@~mhm6hXy)ck8RJc%kf^BYLu$!S;rtaKDlUi)he4+}Ufb=`C5|%D1Ho z&T8S|cJMQH8D)KeN_4UR7QdwKwu1x})Y|SFtvU)|MEoi@7M4TY63qJ=U%f7_1&)*- z@2ZOKKL4?Kt3h=ECf_wfA_Bd?Or`$zV@me6qLSZ(*V^lR7?+oR`U8=^^k2qz6lsa` z*MbY<3LWhbwrRr7kN#afYM-dWH8uX#SvZ#N)f{D2I$3%pWZOQVqzs(X`!KTkjc-k=0=hKko=l55#Dc@dW-{s=QB56RlIbkt{pgSyWe6n7 zN9()y1*DwKBvPcxPV_ZZC(r)S?_15Q`oM48f z%x)73o224Tg;&X+6V;@dq(HShiq^Hs)@y?S7SO<&2z!S#PVI`650`xVsr}FB7RFHy zH&l2P@S#BTdkVt&swN^d`QJfKO^{|mX&fs2eKvf>W&C|s?B22LoABp=7XYMs68wp% z|BHABOe_&xtH$@Q15G@-TySH}3;<_5R6|s~=Su~P^oF5pHzlF){bge$e7~Sl^>48F zZ&Yl!mB~0hI&)gM?Uu{0{)Ex zfj^_fgBr6ZkAIamYn)hqIIsR%jsDXneuIyhERRZx(TfOFE9ZjYE$t!+j$L?upxf>P zw@UA;hs3wOX{Q*Huc5bL7K5EVd!tRT5$&v#CoDUuSSe@!7R-LeSWE}}4Fi0vI2d@- z^~*|gm@FSD_tlC9#v|t{{YE>!b&`E7Q4-N~BK4m~&D8W?y=hb19|rz~pCEcW?KRgE zw{O=XSNSdq+%lwS!ZZk<5c0Y`kS#RQ-VnS&hqOE~B<^(9g905n&wX*Xccp!X7u><; zxvQ#H+lthr;Tj1iIG|a4fAqa|>#HU*$!a2IXcMsNYvAZVlklPUJ=Wt=5}x|`Jx}8@ z^Iy2}TXDPGDAuXs^$Xo{=h`@6F(K>YmK8IpHoMA?g8p@3iL9W~X^*2#c6HdxJmKfe z2ciEPL%{zDA{qxKbJuRtJh5)g+9I$sH**jg=BAU=%&)r>DiU-kSnm_Q965S##c_Vc_EM?vWLd zxc)g>B=X^`P2;~Y;(tK|kMJms@c$2p_j)i6RV@3PL+a8no-#|sj>?u)W@WA+&1Le#7N`@?SHgBPp>Dc7c zf@E&qtR!Wtk2_jO13IP2A6mI2ob^;OKA3i(4Iz3XC6L#dIZTo97tqolY?BinTevn~K*FNdAp)T?}q_WZ45_K0voTYiEl^c)U?=~4J zvCb;7B`bX~Y#HksgC_>T1ONQWq6>{TlaBezU$UQheCWOA{{Wqrf0A7PB)ptp^-XHw zh=>Jish!E5cJrkEx-O+Q6BB#(ydZDL@?tgTtfJ{JHzqE~NJ%F|S+w`Z3!9@p>h0|p z;Xf}WEgcB6*mDh{js7?2Y|pk;O`=^^EY!P8;`wPcH~2u7{2{iV_5U7pa<|?i;@CJDL23?0WYfC@FZI=y7QssOyHBRnjtS@h zX+n9bfJHp!I;nXapjfztle&1<0=V7Yg|7`EpAAYsX9$x-jJED>ccS>lCTG9mcj6V9cbU&CpDby04-%_|I}nqOy0<{|+PX*TF&*D*GKbey;QLs3 zrJG7}g)gA26H4N=5nvyHo3X@V-#w7=S*5uyZpylBGgS=6^6;B@e71GtMq%Jf;jvo% z(aiE?M(XXu?MVS^+%z(d(CkSRoUewWlp_Ik(%iRr$=@$BGG;KiHX_~6ZF`_5QT#K6 zSJC*HU*A2Lxg`)im>Hpc*+nMZCy1bVW)Y+I?D46(Sei!dW%;t!f~q7~R&woMh3Aq8 z>l<$(b^Es}Ee33@e={mwb+QTa9v}C?q#|4^F8lo==9eh&j?ho#7FnmH5yvSYm~OJFT>vLud;g(IS@MF~P1n4d{(jV(zU<2Mcj)(5BFdMwU`2Ca3yP97?fkN z5rHJnP2s?U;%MEc2z7q5k~`z%JtYPaTQvpQ11BNi?cWQ&{W^W;2&lrzQzU28I!XJUdg%pVDUrBA~}qnV7@y9(%xSo2pW zG(?evhvK!Ff+&rETza4&1VhBtA1eChrYI$ipZx;$Ff64dT{S}~|MVOj*1>byu9xGM zb-!_6DZrEJIP7CX`w$+$6p{jNtvcgn5|cKVFQTV$u~3SE_jtrosc3(~UkO{bnjG^w zkG{4U)}7QWC8M-hn;#D<^+Q0^EjCyKD0CQl*-G<=| z;hn6&5b{XbKF!uO4_U3sL9>94uY6`KR`N;jIoT-yaf9=>KaI-~%^DythtwF%jW(jq zMcC}TKZkGNnJaPXar^WcCiD<9Vf;g4lz4nO6bS=6g&JzoM#ZFg>&JXX)lh| zL$vdvlmH#sCBddaCLSmDj7c9AGD4hb%m{qFJ*)!wn-JHZQ7GX|*nvoO1x~#rx_p)* zjw4r@*pJ`tDQpzCvwP$De02xpor7>kI`kanW@^IYni8^QhoYLHelYL;bhaWW>Q+EI zl%fa!QU~084QS5mUJK~wWCrL;@ASNG_AYZBp?jNUndaXOm2Aw3 zb=*3hOGbjnLn64VlClBBZKXct$n?=+a!@Kt7Y{gR@vq!12$U#BAi>q?jN3aa>vPKe zO;g!OpH{TN#EF>DCtTVgA#7io9VK{O32M?I{+Zg1aLQAmY5&1)0(=myA3TTiCvmT@ zLF4zFA{}=QCZX@B8E11PZRoLJ1yki(2ZH9GSGMnAvnJP*K3`WC{*IV zn(bS~^s?D}zUMCA=0lZK-(K#)V)=znl% zeVWnRT740-{nDzADb|fV*BZ+CYYz{<9249Hx#;tOM%x%DR7SaM|F~+#pa%<%0Azl zbqG@dHgp2i98E!+tB?aI1>=T&D>0Ev`SJ~V*CxS}$Y-nkmSwG}( zjNcF)_5J3L)ynMn?x4Bcj>cBv!+=Hi@qwS;x-oDBpm-of2jEphnUZ7j8&A*5FpGO=lG~#Yomr!(0}w-r#n9tN2X!l(eDuY zbN?m8AI=V5{0=;)HF8Ao<*|}h7W6Qljvjyt+}|3stNU%BRDupyBh!5O!E!n=pT25C zQomj<#~!CPDH9GoqO|30Gzwla$mTP&yfx?R2egtgeRF@EOFcQawrCQ;@9iroJC_m? zTOQ~kPu4E&cQNo-;(n0s9M5-)Ea}muNKLp_g^YfXi*N%yeJ&WCIiipKaa%eVqd+FjJT|byg;+FloQvOzt4m(8C22Fg zEGK#Yooo#}z{X4&>o-)8Nh0N+%mx44z9RpD0Q?VEd5HfoI;nVD{qEQI|9uL)ltQNv zH!brH0*h0XX=s~ zO~d%yZ=`H;NnesSRqh>TA2eQZ4;nfX;$@(X#Eylyl3chL!ArFtw{KEm zGksSLx}uHg19Tc(BHM|bw$}-AdaqGvmJa-xL0X_+gu2c+ zzNNN@9yE%%V{f1YN+N8jC)l*7?$!Cf?uFc}O0N1!P-Vn9Cr-VCCBg3VZSFLl@HKmU z^W>ex?j9JI`(kG(aEw|u)L2yHZIh_S4Y>`5H%0UVSo~`=b|I*1&o#GpURJPXtWp&E zgbupz*fYJ8894mI_}*J+2E2CjDPh3@mCuJd;W%s~o8%E=jHDci6mCs%Ggpxi;XuK$ zpBxnycE;ZJnL&Zs?s(8I^-*nRPt4ow=(W4+4T3(n6Q=K{Q;p6&LaWf#=|gNrRm^!M zD4=)CR46w1Y`5uijHr9N*jLgBlBAf;Wqen3Lbue(yx`xj3^uAFQn>y?@(tfg22?g0W7l{SvSV zO>)|a(V`~Wx0X=!l3}r;({-R4uY!n#k^koS zjIbsCnUp`_C9+2iyc`%h!fo~(6I?Uxfsu?vjB$&7w0R0n87D12{x+K^UnY5Y3NBNAhi(s+%Q7WxVMxWoFFnZtLjQhtCHgG5kRq6CS1W5T$BZESZFaXfp(0lIxTH zW88xBz#PE0o8O$S7cySZ*yi162UI}PAW1xm{tx^+d)1>;VI`qTAqZlxkrD@sKX|1( z!gYRe@Kmdtg-SW^B%fL+MFw&})oZZ1gN%=HBl1w%{}c8AzC=>yc2m)T=f*9J4G9I* zqlZ=v+c?aueBF%ou~6jHK$e|lICAtBm!Vyoa^T~S>^{!Ud9y%hGX^NHBWrsie<_+DJ6Y4#QBWS_n-IV zg91v^z+gp%8>X&paeCKHzQ9jTAB#;UdS$3F3(b+=l63iGB{EY(JSEbNIsWu+lUJxp z$$S6o<7NM5Xb@V;{PL3X{y2D_i}hz2!PvZ$pd0C z_v@VdY}b8X*SXJiuIqiV4ixViCv`GDu?&~&{liM;`utWPX&1q?pL}azM^Wkfg%<8@ zX?~an(}oLu_f6&t-E|rJQM+Q(x{M5YcPeZ%nXp-L!mh}oRE~u`-XBi(&h*ygP*P0v z^#p+KYYAAt{)%>noe6f?Pd3VC@wT4l>CPAPL+{ic4yFD_UpZ5U5)(fsmRkcHTlNiN zxewD1$CL84cChdH$1gnvg)z?I->WT|04=~?~j`F77<0nA^;=L<`sbgdO_jnM2`LWHsvJn?1yzO37+V# zdpnv_qUcZe)SK;HdE*K}n|DG9GyOE)F81Wg#Cq8Zb>5wUuhYHAY0t~YvLY#N7nEg* zl0?yNrX4-A=k_6)EWtNl0mt!UJH1rU0U5Om*S!eksFkpbIV5a1;)g|qT)ie#fy3JO z!pRYMPyxL;ptSR_3l|#ZCv0xChJPA_xU^h@EldE#fDLY|lr6&lz;C@IKYvi>&VPCn zy|Z6L4(Utkg7>xUsqiun#B{of=7V*~Ud z14Vg9c4R^C-cn?6Lp}$=&MBvHnI&GRwzk5XWy75G7cV}g!WWl8+^0A?Nxn&l`wNJ} zlR(oa)91F9qRsW-r`A?FvuwXEPDQ??ldjJ=qCt4+g}D#boKo4o^CN zh13AziOQD1aO(3Ivs3*PPujA&j>u;Y$>#JO{jbX?TvGI&Ec8JDgkjLZR_RuIUaPM; zD}hDcwETgn-Ic4DbdLHw-7Qi!9sKDVn?;aBo=;cJ(zL?9NWum#3xFLT*Ab>anyubgjawOXbJ8^8XT4^2mY+h}K zon0kQhEd1P`5aJhndV?a6PuO!aaSxWBsMWDlf(vDFIKhV0KSGyzzq(2x)|Yz{PcU; zy(;J4wXya;jJ{edAi_ zQ!qk)`b1^iS-RZ2kTx|wv!J?ZX0fFJn}6s=uESrOHwOGnzm7>a4JlpfI{ysLFe^Q0 z>`%oc4UQHmU%#VkBHC+fCB&mAISdn(@%}`{ev=IV#N%`tOk3_Y;GGY2m0HLUQe^ILEjmtgE(P(IJCk%dF8mb1W4OnK6!QdZL*As@7n};5j_bS)f)r8G#7F}FO^TCYW z`Cw@}?a(ibMM&iQ;CN z$8+02#jN-^P|}fW@1@x;hcWwT4#)oP4SmoF-_=poJrC7Gyke>NkNlqW-y&{wCm~OH zTv%LYcZxlN#wXs)h->`YOAnP*%6QL{obW_mG-bp4c8m{OUvwq2;)&C86Zp58 zb~kTaby9^2kYN-5QSow11LtOBt~Q{rl$JA)5~(aFW#a{v2o4mF@H&OP6(-P{W;s%i z5DH>lsD5m(6vzLJ-t2C}J+B>S&P?W5O_?J0z{EnVT<=I~8omxQ4iQhy^K;LI`KdeF zm%zgV{3yH31j<%sy|vJ+pHamk{cgEx?Q#YO%P*Y7=W}a>yuF`4?`Ak=>j9VH1Bp?& zvUv$#Pg^M+Tf#)TS+A2ge9_;6hV;H5Fz9QL*_zMXNXa4q9DgOF`uB>;0;26|x-Tqt zShkK=&6>1$y6yCSz6y@NO#0xH_Wqr378nrg=Xm|He8X;)BBk@E@v6wXhN?pS_sLh- zPuc4zuf!G8pNdE*zFj2E+XLZqQyn-BRmVbdP}oLJA1&iCZf#D3d~k~!c^M;3e9aAPgWBnK6SOBh19F zUJ6eS-TZ8=p^_%-w}l}cPU?>r5_9rSD|aJ_6g?FE(L+|vA6rwY?2M@JcfZ$`F7o}# zf=FwJ>DhF6@Jb7M@6x;yGhNVCm!^G*c4zBMR6LQm;FAh3BrX`U=fLIPjCJkyTxdEq zKkat}&F6&Ctxf=x!HSMpx`xNx1cB4pf2q+0fU;?G3^CQHcVE?@hGJXWgrkL7b>yrv zB5y8mixyArH$=95>s+PN7dFPV6EdIHd&FJ(c}#HOa1^zB-iN-*FuR0nX&lQ)x80Rb z6A*JwDzo3zc;)1BJVFe?|5LHSVXT`!Ar;J%@`5flHxdvJGQQ_{G5fm?pCp{@xx^Z4 z^sfMNKflBCQRe8h->i3(H6Vr%{N`^GF!?ktR?hgB!_w_q|xw(Nf{*y!`>p)(@}`E#AL>|ACi@gG5S2;@ann!JpEG6)FQ}n{Yp-f!O~j-N)3D4?gnJRce8qP9^jmCq$}oi@I$V`(niuhp5Ku)DL`kl z$JDds@qx7~f*0GDr-&fYEC1Jec>M^~de<2)X1lnIx zb*F1U2SKrwC3)RsqYxXjW(H6VHj}xXfBAVNAzudUwx6Ej*fc3PSqI?|44^Z zM!D0?{jScVXikOyJ~bty2K|QhD3w`soim4ePNqDisH)@0>zO!NNIJp&8%{cBT&<@< zy~I6?zo2QDs&oY{-#YE1H#a)E8+q4m0wMlviHz{>^Nmit)IJM)e zDK@|ky|3mC(W*;EyYzKm61D?NkSPql$Zv`Qy3kcEx+md){?i9^Plmt-f=acQywVvv zMmzCMX$nDHFT2ROzx6$X)#bn{n5!`4(g%EmTTvvdg9V5)ht8W>A{z zO0k-~I@8XYgYRN@`X9ZA;Kx*v;wQmQ3JwOVFD&3Drbx%n1{}%$KIj zluEkwRX6x|kz;U+I0o-#Gv~@MO&=I^-m*YSDQ_nc4a!0*wtO4xmjEB<=&RBqGClhQ zB3@bycrIxagV`BX_gOVV>D=aCoj3F{Q8N;Z?*^{Pb?SVs0~J0jIz-HEcn=O%n$>bY z3ihRwG&*i@hvelu=xnAjv|yOCm^W=E4$a8zBI&8yQjRCq^kt^eZ0xZ_b?da4d$u!7 zJcCkP2?C;Qe>Iltn4v6~c0ysiIGElw%e-ZvQNcTvNhhBx+fXpOaU;M<9di79`O|JC z28dD0zb;AlPf|$ZkYZ+-BJbS5(GN8HMdeQjm_$kl+kNBlO6+sj51yuOiJB*0%ZmDQ z$a0_UQk0@FeN$35dpRShQ4m`^9cs05S{Y{~h*3%kwhDi?z(8Gt{+1*3m%`qHrHi=QaOook%n&sAbQ^7o#a85RRV`nX zvM_Tle1Ts^eLV2l4F6)U7hY~d_+-nYbtDZ_USnA{n2MRPT8gb7uXTRgji{D^d{AM# zwyXa)f~)f2p^^8oEb{V>j13V5$!CW#wnP5@T%YKF>#uU2y5GhEx*o~;S+|o@{O<-b z`_r8)8e}>KV}?^yGcQkwO6xrie@=+B57#;blrKh}4vMkeq*9{~HF_MU`SQCTG}B#; z;ng~*tp*oGzb(t0h!G%F9pvQJNg-L2^l` zFc9X9zIN>sp? zf@**`pnM=7#4gZ_vfXg$j_|>@tFTFw+=f0+7hV-WPBjB$&X7hv1`*o(HtD$E-%{3Z z)%h6b)(2@Cb)`H=jZ4z{F7Z})tz+@^VO!_Cbm-hcE11=xjG`lmNEJdE_2;@>Z{=l= zMOYobpJ&`S5{SJ>Wvi+i)92VAyGk+rjOAdQKrhEyv$WdO48iNd>hZ!ODWV+a2N{lE zEzs2$Qv$jmNw6lxhKQ3xFXUSPol{@*)32u4_`v4A3R*$Olf`F!J~Mor>=9$Kd$H_{ zrT);6?raGft(kK^mw23O%(tQmq7o?5$7_Nc2OZV4$i$|`o z_T!2q-f2Jh)g)Uq>sTK)c~)1G`ls&sF_}Trs?@J{kE=$H{>QJ9y%beP? p?|CCJ zoZ!xla#@MiI2(G-uGoNCJBls!44sVm2oF8kAoZ)?M#F3c1PrANX+s+$p;h}F?K$tV zfBN7(gKsLZM=ZEiXxI_-gu zwG#!8pugBX1h1pP_VQp0w1T}97=gC3*8>E&SE25MJR3~Kv~QBey#KHx1(f5uErKW3 zOEp9)M?5VWQN7e~Pc|0Hm739I;?2pHqncLZJsS6mD_m8W>!VWKORDyVRPQ^LXL3*5 zT;!oxePFCr1UNs={(>ca?k6oKU=kQep%_1AdjTcrr^F8gahin^pQf0;m?! ze-Vo%>|HIc@J<7PwUtdDom#}{g1$mt@asZGiJEPqJU&N1+ z^r5Y(A}poI*{8uqS?AV(RXER;tJtE(dX?<>lVo>Y;TcDG5SGYeGh9zStWCVd~ zAKbU6EH;rg)u?`CgSH?T-bEf>vgX!vXsi#NdC)mbM-@1>h|fBTQ~dJ`PfEvwcv1!u z^d7IEQl0^NHlY~z???4PTT^Ej5eERL86Q_fK_95DKHKdo1Ti)_+v(XU{)lY=MX@)J z8P90MD(XSiCo)E)ioa4JEx z&EU@aeD`y%^|V^hY5U2Wbk#iLaaCrv20r!j-upxc8WXiSKg)WG_%{vY!#^q}r`9yt zS|J0`V3;4TP#?DY(_O_Jd91SDk{pTPrUx|(;lhYn2;ycIX|sMyw;QL<$XMgMf@IW% z$7)hx|JlW9prq`=@+{iiEL!k@9tfnN8wmDs@g9w?HO~16J6Tz~M6rK0<#-R6lTDZi zq^@zN>-*#Mpaj={8Iia2QJODrthvq!Pz_0Av@ZSNW$ISUQjf>5hoCv!Io$Tigo@mP z(#W&NYL01MQGuM&gLt|I7@JL9#Hkxg)MCB-b0->*W>Nty8>?g$ZTugxyZXPa`iF_i zlODr~2!y;I%=6|vTP{}y0$An-frJeipaOTELv+4*;86-7QJU*;K6XY>^EdenTDG#N zk+S$Ff&myP12t6Yp?obfh&{Gei;kLEAKCytWBFHX^l=KUDZ~#t`|N+q)_tp^7~7_x zG++>DGFbqb7U7PUkP*YbhSE4vMdGYlb*(C>k}nAcV5`|8-ct)fROn$fv!=q{gr7x? z^R(4ZSr#hs@IDpLj)%5FgWGuSe|r@u%myJfJ_sU5BJ5U^FLr4`RM={u3@x|xi={xh zs86)bXPXATOty%ZRK7b2D!uNX0|FiB4}w1nh8p7*=-FcxVl}@O=sQ-Art(}S z?wF7+G7p?N-e~euJAVakqLOfG)^;XAwjs!!vnR)0vf#(po6nf_j8XO8oB;p>`(4gv z+3q1s%>c=H%hd1{XKp&Af+JN2>K)X}{C{vB)a?HqHSqs?_CH>I{{@}=KSw&DY@>Ao U4cJ7=&ZcL0+eEia+u_y!0G~;qH2?qr diff --git a/vorestation.dme b/vorestation.dme index f07338e9c52..7d0dde550bc 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1660,6 +1660,7 @@ #include "code\game\Rogue Star\_HELPERS\mobs.dm" #include "code\game\Rogue Star\catborgs\catborgs.dm" #include "code\game\Rogue Star\fluff\sari-outfit-fluff.dm" +#include "code\game\Rogue Star\weapons\bork-medigun.dm" #include "code\game\turfs\simulated.dm" #include "code\game\turfs\simulated_vr.dm" #include "code\game\turfs\turf.dm" From e6a046a16f1eee4db875288e1f833e0da4cb26a1 Mon Sep 17 00:00:00 2001 From: crossexonar Date: Tue, 1 Jul 2025 16:32:39 -0400 Subject: [PATCH 02/55] upgrade system added, woo! --- code/game/Rogue Star/weapons/bork-medigun.dm | 369 ++++++++++++------- 1 file changed, 229 insertions(+), 140 deletions(-) diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm index 067318e6ed1..55ae237b1b0 100644 --- a/code/game/Rogue Star/weapons/bork-medigun.dm +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -45,15 +45,19 @@ action_button_name = "Remove/Replace medigun" var/obj/item/device/bork_medigun/linked/medigun + var/obj/item/weapon/reagent_containers/glass/beaker/mybeaker = null var/obj/item/weapon/cell/bcell = null + var/obj/item/weapon/stock_parts/scanning_module/phasic/smodule = null var/brutevol = 0 var/toxvol = 0 var/burnvol = 0 - var/tankmax = 100 + var/tankmax = 60 var/chargecost = 25 var/bpcmo = 0 var/containsgun = 1 + var/maintenance bcell = /obj/item/weapon/cell/apc + mybeaker = /obj/item/weapon/reagent_containers/glass/beaker //backpack item /obj/item/device/medigun_backpack/cmo name = "Bork Medical Beam Backpack Unit CMO" @@ -69,10 +73,11 @@ w_class = ITEMSIZE_HUGE unacidable = TRUE action_button_name = "Remove/Replace medigun" - brutevol = 100 - toxvol = 100 - burnvol = 100 - tankmax = 100 + mybeaker = /obj/item/weapon/reagent_containers/glass/beaker/large + tankmax = 120 + brutevol = 120 + toxvol = 120 + burnvol = 120 chargecost = 25 bpcmo = 1 @@ -80,22 +85,33 @@ . = ..() if(Adjacent(user)) + if(maintenance) + . += "The Maintenance hatch is open." if(bcell) - . += "The Cell is [round(bcell.percent())]% charged." + . += "The [bcell.name] is [round(bcell.percent())]% charged." if(!bcell) . += "The Unit does not have a power source installed." - if(brutevol) - . += "Bruteheal tank has [brutevol] U remaining." - else - . += "Bruteheal tank is empty." - if(burnvol) - . += "Burnheal tank has [burnvol] U remaining." - else - . += "Burnheal tank is empty." - if(toxvol) - . += "Toxheal tank has [toxvol] U remaining." - else - . += "Toxheal tank is empty." + + if(smodule) + . += "The [src] has a [smodule.name] installed." + if(!smodule) + . += "The [src] is missing a phasic scanning module." + if(!mybeaker) + . += "The [src] is missing a beaker." + if(mybeaker) + . += "The [src] has a [mybeaker.name] installed." + if(brutevol) + . += "Bruteheal charge meter reads [round(100*brutevol/tankmax)]% remaining." + else + . += "Bruteheal charge meter reads empty." + if(burnvol) + . += "Burnheal charge meter reads [round(100*burnvol/tankmax)]% remaining." + else + . += "Burnheal charge meter reads empty." + if(toxvol) + . += "Toxheal charge meter reads [round(100*toxvol/tankmax)]% remaining." + else + . += "Toxheal charge meter reads empty." /obj/item/device/medigun_backpack/get_cell() return bcell @@ -145,7 +161,8 @@ medigun = new medigun(src, src) else medigun = new(src, src) - + if(ispath(mybeaker)) + mybeaker = new mybeaker(src) if(ispath(bcell)) bcell = new bcell(src) update_icon() @@ -182,27 +199,184 @@ /obj/item/device/medigun_backpack/attackby(obj/item/weapon/W, mob/user, params) + if(!maintenance && (istype(W, /obj/item/weapon/reagent_containers/glass/beaker) || istype(W, /obj/item/weapon/reagent_containers/glass/bottle))) + + playsound(src, 'sound/weapons/empty.ogg', 50, 1) + var/reagentwhitelist = list("bicaridine", "anti_toxin", "kelotane", "dermaline", "tricordrazine") + + for(var/G in W.reagents.reagent_list) + var/datum/reagent/R = G + var/modifier = 1 + var/totransfer = 0 + var/name = "" + if(R.id in reagentwhitelist) + switch(R.id) + if("bicaridine") + name = "bruteheal" + modifier = 4 + totransfer = tankmax - brutevol + if("anti_toxin") + name = "toxheal" + modifier = 4 + totransfer = tankmax - toxvol + if("kelotane") + name = "burnheal" + modifier = 4 + totransfer = tankmax - burnvol + if("dermaline") + name = "burnheal" + modifier = 8 + totransfer = tankmax - burnvol + if("tricordrazine") + name = "tricordrazine" + modifier = 1 + if((brutevol != tankmax) && (burnvol != tankmax) && (toxvol != tankmax)) + totransfer = 1 //tempcheck to get past the totransfer check + else + totransfer = 0 + if(totransfer <= 0) + to_chat(user, span("notice", "The [src] cannot accept anymore [name]!")) + totransfer = min(totransfer,W.reagents.get_reagent_amount(R.id) * modifier) + switch(R.id) + if("bicaridine") + brutevol += totransfer + if("anti_toxin") + toxvol += totransfer + if("kelotane") + burnvol += totransfer + if("dermaline") + burnvol += totransfer + if("tricordrazine") + var/maxamount = W.reagents.get_reagent_amount(R.id) + var/amountused + var/oldbrute = brutevol + var/oldburn = burnvol + var/oldtox = toxvol + + while(maxamount > 0) + if(brutevol >= tankmax && burnvol >= tankmax && toxvol >= tankmax) + break + maxamount -- + amountused++ + totransfer ++ + if(brutevol < tankmax) + brutevol ++ + if(burnvol < tankmax) + burnvol ++ + if(toxvol < tankmax) + toxvol ++ + var/readout = "You add [amountused] units of [R.name] to the [src]. \n The [src] Synthesizes " + var/readoutadditions = FALSE + if(oldbrute != brutevol) + readout += "[round(100*(brutevol - oldbrute)/tankmax)]% of bruteheal charge" + readoutadditions = TRUE + if(oldburn != burnvol) + if(readoutadditions) + readout += ", " + readout += "[round(100*(burnvol - oldburn)/tankmax)]% of burnheal charge" + readoutadditions = TRUE + if(oldtox != toxvol) + if(readoutadditions) + readout += ", " + readout += "[round(100*toxvol - oldtox)/tankmax]% of toxheal charge" + if(oldbrute != brutevol || oldburn != burnvol || oldtox != toxvol)to_chat(user, span("notice", "[readout].")) + if(totransfer > 0) + if(R.id != "tricordrazine") + to_chat(user, span("notice", "You add [totransfer / modifier] units of [R.name] to the [src]. \n The [src] Synthesizes [round(100*totransfer/tankmax)]% charge of [name].")) + W.reagents.remove_reagent(R.id, totransfer / modifier) + update_icon() if(W == medigun) - to_chat(user, "backpack clicked with gun") + //to_chat(user, "backpack clicked with gun") reattach_medigun(user) - else if(istype(W, /obj/item/weapon/cell)) - if(bcell) - to_chat(user, "\The [src] already has a cell.") + else if(W.is_screwdriver()) + if(!maintenance) + maintenance = 1 + to_chat(user, "You open the maintenance hatch on \the [src].") + if(!containsgun) + reattach_medigun(user) + return else - if(!user.unEquip(W)) + var/list/installedparts + installedparts = list("close hatch") + if(bcell) + installedparts.Add("cell") + if(smodule) + installedparts.Add("scanning module") + if(mybeaker) + installedparts.Add("beaker") + var/menuchoice = tgui_input_list(user, "Which Module would you like to remove?", "Parts and options:", installedparts) + + if(menuchoice == "close hatch") + maintenance = 0 + to_chat(user, "You close the maintenance hatch on \the [src].") return - W.forceMove(src) - bcell = W - to_chat(user, "You install a cell in \the [src].") - update_icon() + else if(menuchoice == "beaker") + var/confirmremove = tgui_alert(user,"Are you sure you want to Remove [mybeaker.name]? All Chems will be voided","Yes or No",list("Yes","No")) + if(confirmremove == "Yes") + mybeaker.forceMove(get_turf(src.loc)) + mybeaker = null + toxvol = 0 + brutevol = 0 + burnvol = 0 + tankmax = 0 + update_icon() + to_chat(user, "You remove the [mybeaker.name] from \the [src].") + return + else if(confirmremove == "No") + to_chat(user, "You decide not to remove the [mybeaker.name] from \the [src].") + return + else if(menuchoice == "cell") + bcell.update_icon() + bcell.forceMove(get_turf(src.loc)) + bcell = null + to_chat(user, "You remove the cell from \the [src].") + update_icon() + return + else if(menuchoice == "scanning module") + smodule.update_icon() + smodule.forceMove(get_turf(src.loc)) + smodule = null + to_chat(user, "You remove the [smodule] from \the [src].") + update_icon() + return + if(maintenance) + if(istype(W, /obj/item/weapon/cell)) + if(bcell) + to_chat(user, "\The [src] already has a cell.") + else + if(!user.unEquip(W)) + return + W.forceMove(src) + bcell = W + to_chat(user, "You install a cell in \the [src].") + update_icon() + else if(istype(W, /obj/item/weapon/stock_parts/scanning_module/phasic)) + if(smodule) + to_chat(user, "\The [src] already has a [W]].") + else + if(!user.unEquip(W)) + return + W.forceMove(src) + smodule = W + to_chat(user, "You install the [W] into \the [src].") + update_icon() + else if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker)) + if(mybeaker) + to_chat(user, "\The [src] already has a beaker.") + else + if(!user.unEquip(W)) + return + W.forceMove(src) + mybeaker = W + if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/bluespace)) + tankmax = 300 + else if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/large)) + tankmax = 120 + else + tankmax = 60 + to_chat(user, "You slot the [W] in \the [src].") + update_icon() - else if(W.is_screwdriver()) - if(bcell) - bcell.update_icon() - bcell.forceMove(get_turf(src.loc)) - bcell = null - to_chat(user, "You remove the cell from \the [src].") - update_icon() else return ..() @@ -241,18 +415,18 @@ /obj/item/device/bork_medigun/linked/forceMove(atom/destination) //Forcemove override, ugh - to_chat(world, "forcemove") - to_chat(world, "[destination]") + //to_chat(world, "forcemove") + //to_chat(world, "[destination]") if(destination == medigun_base_unit || destination == medigun_base_unit.loc || isturf(destination)) . = doMove(destination, 0, 0) if(isturf(destination)) for(var/atom/A as anything in destination) // If we can't scan the turf, see if we can scan anything on it, to help with aiming. if(istype(A,/obj/structure/closet )) break - to_chat(world, "isturf") + //to_chat(world, "isturf") if(ismob(medigun_base_unit.loc)) var/mob/user = medigun_base_unit.loc - to_chat(world, "[user] eats ass") + //to_chat(world, "[user] eats ass") medigun_base_unit.reattach_medigun(user) @@ -270,14 +444,17 @@ /obj/item/device/medigun_backpack/verb/toggle_medigun() set name = "Toggle medigun" set category = "Object" - var/mob/living/carbon/human/user = usr + if(maintenance) + to_chat(user, "Please close the maintenance hatch with a screwdriver first.") + return + if(!medigun) to_chat(user, "The medigun is missing!") return if(medigun.loc != src) - to_chat(user, "location not source") + //to_chat(user, "location not source") reattach_medigun(user) //Remove from their hands and back onto the medigun unit return @@ -290,7 +467,7 @@ containsgun = 0 icon_state = "mg-backpack-deployed" item_state = "mg-backpack-deployed-onmob" - to_chat(user, "Deploy") + //to_chat(user, "Deploy") update_icon() //success if(!bpcmo) medigun.update_twohanding() @@ -319,19 +496,19 @@ /obj/item/device/medigun_backpack/dropped(mob/user) ..() - to_chat(user, "Dropped backpack") + //to_chat(user, "Dropped backpack") reattach_medigun(user) //medigun attached to a base unit should never exist outside of their base unit or the mob equipping the base unit /obj/item/device/medigun_backpack/proc/reattach_medigun(mob/user) - to_chat(world, "Null") + //to_chat(world, "Null") //to_chat(user, "[user]") //to_chat(user, "[medigun.loc]") //to_chat(user, "[src]") if(containsgun == 0) - to_chat(world, "doesnt contain gun") + //to_chat(world, "doesnt contain gun") containsgun = 1 if(!medigun) - to_chat(world, "return") + //to_chat(world, "return") return if(bpcmo) icon_state = "mg-backpack_cmo" @@ -339,19 +516,19 @@ else icon_state = "mg-backpack" item_state = "mg-backpack-onmob" - to_chat(user, "just before medigun busy") + //to_chat(user, "just before medigun busy") if(medigun.busy) medigun.busy = 0 update_icon() user.update_inv_back() - to_chat(user, "just before ismob") + //to_chat(user, "just before ismob") if(ismob(medigun.loc)) - to_chat(user, "ismob") + //to_chat(user, "ismob") var/mob/M = medigun.loc if(M.drop_from_inventory(medigun, src)) to_chat(user, "\The [medigun] snaps back into the main unit.") else - to_chat(user, "!ismob") + //to_chat(user, "!ismob") medigun.forceMove(src) to_chat(user, "\The [medigun] snaps back into the main unit.") @@ -380,95 +557,7 @@ else return ..() -/obj/item/device/medigun_backpack/attackby(obj/item/weapon/W, mob/user as mob) - if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker) || istype(W, /obj/item/weapon/reagent_containers/glass/bottle)) - - playsound(src, 'sound/weapons/empty.ogg', 50, 1) - var/reagentwhitelist = list("bicaridine", "anti_toxin", "kelotane", "dermaline", "tricordrazine") - for(var/G in W.reagents.reagent_list) - var/datum/reagent/R = G - var/modifier = 1 - var/totransfer = 0 - var/name = "" - if(R.id in reagentwhitelist) - switch(R.id) - if("bicaridine") - name = "bruteheal" - modifier = 4 - totransfer = tankmax - brutevol - if("anti_toxin") - name = "toxheal" - modifier = 4 - totransfer = tankmax - toxvol - if("kelotane") - name = "burnheal" - modifier = 4 - totransfer = tankmax - burnvol - if("dermaline") - name = "burnheal" - modifier = 8 - totransfer = tankmax - burnvol - if("tricordrazine") - name = "tricordrazine" - modifier = 1 - if((brutevol != 100) && (burnvol != 100) && (toxvol != 100)) - totransfer = 1 //tempcheck to get past the totransfer check - else - totransfer = 0 - if(totransfer <= 0) - to_chat(user, span("notice", "The [name] tank is full!")) - totransfer = min(totransfer,W.reagents.get_reagent_amount(R.id) * modifier) - switch(R.id) - if("bicaridine") - brutevol += totransfer - if("anti_toxin") - toxvol += totransfer - if("kelotane") - burnvol += totransfer - if("dermaline") - burnvol += totransfer - if("tricordrazine") - var/maxamount = W.reagents.get_reagent_amount(R.id) - var/amountused - var/oldbrute = brutevol - var/oldburn = burnvol - var/oldtox = toxvol - - while(maxamount > 0) - if(brutevol >= 100 && burnvol >= 100 && toxvol >= 100) - break - maxamount -- - amountused++ - totransfer ++ - if(brutevol < 100) - brutevol ++ - if(burnvol < 100) - burnvol ++ - if(toxvol < 100) - toxvol ++ - var/readout = "You add [amountused] units of [R.name] to the tank. \n The [src] Synthesizes " - var/readoutadditions = FALSE - if(oldbrute != brutevol) - readout += "([brutevol - oldbrute]) of brute charge" - readoutadditions = TRUE - if(oldburn != burnvol) - if(readoutadditions) - readout += ", " - readout += "([burnvol - oldburn]) of burn charge" - readoutadditions = TRUE - if(oldtox != toxvol) - if(readoutadditions) - readout += ", " - readout += "([toxvol - oldtox]) of tox charge" - if(oldbrute != brutevol || oldburn != burnvol || oldtox != toxvol)to_chat(user, span("notice", "[readout].")) - if(totransfer > 0) - if(R.id != "tricordrazine") - to_chat(user, span("notice", "You add [totransfer / modifier] units of [R.name] to the tank. \n The [src] Synthesizes [totransfer] charge of [name].")) - W.reagents.remove_reagent(R.id, totransfer / modifier) - update_icon() - else - ..() /obj/item/device/bork_medigun/linked/proc/should_stop(var/mob/living/target, var/mob/living/user, var/active_hand) if(!target || !user || !active_hand || !istype(target) || !istype(user) || !busy) return TRUE @@ -485,7 +574,7 @@ return TRUE //if(get_dist(user, target) > beam_range) - if(!(target in view(beam_range, user))) + if(!(target in range(beam_range, user)) || (!(target in view(10, user)) && !medigun_base_unit.smodule)) to_chat(user, span("warning", "You are too far away from \the [target] to heal them, Or they are not in view. Get closer.")) return TRUE @@ -538,7 +627,7 @@ if(target == user) to_chat(user, span("warning", "Cant heal yourself.")) return - if(!(target in view(beam_range, user))) + if(!(target in range(beam_range, user)) || (!(target in view(10, user)) && !medigun_base_unit.smodule)) to_chat(user, span("warning", "You are too far away from \the [target] to heal them, Or they are not in view. Get closer.")) return current_target = target From 94f0afd77c7b85eb158c03447051b93a3bb8dd94 Mon Sep 17 00:00:00 2001 From: crossexonar Date: Tue, 1 Jul 2025 16:48:10 -0400 Subject: [PATCH 03/55] Smol changes --- code/game/Rogue Star/weapons/bork-medigun.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm index 55ae237b1b0..1503c4a33a3 100644 --- a/code/game/Rogue Star/weapons/bork-medigun.dm +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -90,16 +90,16 @@ if(bcell) . += "The [bcell.name] is [round(bcell.percent())]% charged." if(!bcell) - . += "The Unit does not have a power source installed." + . += "does not have a power source installed." if(smodule) - . += "The [src] has a [smodule.name] installed." + . += "has a [smodule.name] installed enabling the device to work through walls." if(!smodule) - . += "The [src] is missing a phasic scanning module." + . += "is missing a phasic scanning module." if(!mybeaker) - . += "The [src] is missing a beaker." + . += " is missing a beaker." if(mybeaker) - . += "The [src] has a [mybeaker.name] installed." + . += "has a [mybeaker.name] installed granting charge capacity of [tankmax] per type." if(brutevol) . += "Bruteheal charge meter reads [round(100*brutevol/tankmax)]% remaining." else From b7494811a945b2da0403004ac89091f0ac05066d Mon Sep 17 00:00:00 2001 From: crossexonar Date: Wed, 2 Jul 2025 12:40:12 -0400 Subject: [PATCH 04/55] More upgrade system nonsense --- code/game/Rogue Star/weapons/bork-medigun.dm | 239 +++++++++++++------ 1 file changed, 162 insertions(+), 77 deletions(-) diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm index 1503c4a33a3..11584869992 100644 --- a/code/game/Rogue Star/weapons/bork-medigun.dm +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -20,7 +20,7 @@ ) w_class = ITEMSIZE_HUGE force = 0 - var/beam_range = 4 // How many tiles away it can scan. Changing this also changes the box size. + var/beam_range = 3 // How many tiles away it can scan. Changing this also changes the box size. var/busy = FALSE // Set to true when scanning, to stop multiple scans. var/wielded = 0 var/current_target @@ -45,19 +45,20 @@ action_button_name = "Remove/Replace medigun" var/obj/item/device/bork_medigun/linked/medigun - var/obj/item/weapon/reagent_containers/glass/beaker/mybeaker = null - var/obj/item/weapon/cell/bcell = null - var/obj/item/weapon/stock_parts/scanning_module/phasic/smodule = null + var/obj/item/weapon/cell/bcell = /obj/item/weapon/cell/apc + var/obj/item/weapon/stock_parts/scanning_module/smodule = /obj/item/weapon/stock_parts/scanning_module + var/obj/item/weapon/stock_parts/manipulator/smanipulator = /obj/item/weapon/stock_parts/manipulator + var/obj/item/weapon/stock_parts/capacitor/scapacitor = /obj/item/weapon/stock_parts/capacitor + var/obj/item/weapon/stock_parts/micro_laser/slaser = /obj/item/weapon/stock_parts/micro_laser var/brutevol = 0 var/toxvol = 0 var/burnvol = 0 var/tankmax = 60 - var/chargecost = 25 + var/chargecost = 40 var/bpcmo = 0 var/containsgun = 1 var/maintenance - bcell = /obj/item/weapon/cell/apc - mybeaker = /obj/item/weapon/reagent_containers/glass/beaker + //backpack item /obj/item/device/medigun_backpack/cmo name = "Bork Medical Beam Backpack Unit CMO" @@ -73,12 +74,15 @@ w_class = ITEMSIZE_HUGE unacidable = TRUE action_button_name = "Remove/Replace medigun" - mybeaker = /obj/item/weapon/reagent_containers/glass/beaker/large - tankmax = 120 - brutevol = 120 - toxvol = 120 - burnvol = 120 - chargecost = 25 + scapacitor = /obj/item/weapon/stock_parts/capacitor/adv + smanipulator = /obj/item/weapon/stock_parts/manipulator/nano + smodule = /obj/item/weapon/stock_parts/scanning_module/adv + slaser = /obj/item/weapon/stock_parts/micro_laser/high + chargecost = 30 + tankmax = 100 + brutevol = 100 + toxvol = 100 + burnvol = 100 bpcmo = 1 /obj/item/device/medigun_backpack/examine(mob/user) @@ -90,28 +94,39 @@ if(bcell) . += "The [bcell.name] is [round(bcell.percent())]% charged." if(!bcell) - . += "does not have a power source installed." - + . += "It does not have a power source installed." if(smodule) - . += "has a [smodule.name] installed enabling the device to work through walls." + if(smodule.get_rating() >= 5) + . += "It has a [smodule.name] installed, device will function within [medigun.beam_range] tiles and through walls." + else + . += "It has a [smodule.name] installed, device will function within [medigun.beam_range] tiles." if(!smodule) - . += "is missing a phasic scanning module." - if(!mybeaker) - . += " is missing a beaker." - if(mybeaker) - . += "has a [mybeaker.name] installed granting charge capacity of [tankmax] per type." + . += "It is missing a scanning module." + + if(smanipulator) + . += "It has a [smanipulator.name] installed." + if(!smanipulator) + . += "It is missing a manipulator." + if(scapacitor) + if(chargecost > 0) + . += "It has a [scapacitor.name] installed, battery charge will now drain at [chargecost] per second, and grants a heal charge capacity of [tankmax] per type." + else if(chargecost == 0) + . += "It has a [scapacitor.name] installed, The battery will not drain at all, and grants a heal charge capacity of [tankmax] per type." if(brutevol) - . += "Bruteheal charge meter reads [round(100*brutevol/tankmax)]% remaining." + . += "The Bruteheal charge meter reads [round(100*brutevol/tankmax)]% remaining." else - . += "Bruteheal charge meter reads empty." + . += "The Bruteheal charge meter reads empty." if(burnvol) - . += "Burnheal charge meter reads [round(100*burnvol/tankmax)]% remaining." + . += "The Burnheal charge meter reads [round(100*burnvol/tankmax)]% remaining." else - . += "Burnheal charge meter reads empty." + . += "The Burnheal charge meter reads empty." if(toxvol) - . += "Toxheal charge meter reads [round(100*toxvol/tankmax)]% remaining." + . += "The Toxheal charge meter reads [round(100*toxvol/tankmax)]% remaining." else - . += "Toxheal charge meter reads empty." + . += "The Toxheal charge meter reads empty." + if(!scapacitor) + . += "It is missing a capacitor, you may not digitize chems." + /obj/item/device/medigun_backpack/get_cell() return bcell @@ -155,16 +170,24 @@ LAZYSET(item_state_slots, slot_l_hand_str, initial(item_state)) LAZYSET(item_state_slots, slot_r_hand_str, initial(item_state)) ..() -/obj/item/device/medigun_backpack/New() //starts without a cell for rnd +/obj/item/device/medigun_backpack/New() ..() if(ispath(medigun)) medigun = new medigun(src, src) else medigun = new(src, src) - if(ispath(mybeaker)) - mybeaker = new mybeaker(src) + if(bpcmo) + medigun.beam_range = 4 if(ispath(bcell)) bcell = new bcell(src) + if(ispath(smodule)) + smodule = new smodule(src) + if(ispath(smanipulator)) + smanipulator = new smanipulator(src) + if(ispath(scapacitor)) + scapacitor = new scapacitor(src) + if(ispath(slaser)) + slaser = new slaser(src) update_icon() /obj/item/device/medigun_backpack/Destroy() @@ -209,23 +232,24 @@ var/modifier = 1 var/totransfer = 0 var/name = "" + var maniptier = smanipulator.get_rating() if(R.id in reagentwhitelist) switch(R.id) if("bicaridine") name = "bruteheal" - modifier = 4 + modifier = 2*maniptier totransfer = tankmax - brutevol if("anti_toxin") name = "toxheal" - modifier = 4 + modifier = 2*maniptier totransfer = tankmax - toxvol if("kelotane") name = "burnheal" - modifier = 4 + modifier = 2*maniptier totransfer = tankmax - burnvol if("dermaline") name = "burnheal" - modifier = 8 + modifier = 4*maniptier totransfer = tankmax - burnvol if("tricordrazine") name = "tricordrazine" @@ -265,7 +289,7 @@ burnvol ++ if(toxvol < tankmax) toxvol ++ - var/readout = "You add [amountused] units of [R.name] to the [src]. \n The [src] Synthesizes " + var/readout = "You add [amountused] units of [R.name] to the [src]. \n The [src] digitizes " var/readoutadditions = FALSE if(oldbrute != brutevol) readout += "[round(100*(brutevol - oldbrute)/tankmax)]% of bruteheal charge" @@ -282,7 +306,7 @@ if(oldbrute != brutevol || oldburn != burnvol || oldtox != toxvol)to_chat(user, span("notice", "[readout].")) if(totransfer > 0) if(R.id != "tricordrazine") - to_chat(user, span("notice", "You add [totransfer / modifier] units of [R.name] to the [src]. \n The [src] Synthesizes [round(100*totransfer/tankmax)]% charge of [name].")) + to_chat(user, span("notice", "You add [totransfer / modifier] units of [R.name] to the [src]. \n The [src] digitizes [round(100*totransfer/tankmax)]% charge of [name].")) W.reagents.remove_reagent(R.id, totransfer / modifier) update_icon() if(W == medigun) @@ -302,29 +326,18 @@ installedparts.Add("cell") if(smodule) installedparts.Add("scanning module") - if(mybeaker) - installedparts.Add("beaker") + if(scapacitor) + installedparts.Add("capacitor") + if(smanipulator) + installedparts.Add("manipulator") + if(slaser) + installedparts.Add("laser") var/menuchoice = tgui_input_list(user, "Which Module would you like to remove?", "Parts and options:", installedparts) if(menuchoice == "close hatch") maintenance = 0 to_chat(user, "You close the maintenance hatch on \the [src].") return - else if(menuchoice == "beaker") - var/confirmremove = tgui_alert(user,"Are you sure you want to Remove [mybeaker.name]? All Chems will be voided","Yes or No",list("Yes","No")) - if(confirmremove == "Yes") - mybeaker.forceMove(get_turf(src.loc)) - mybeaker = null - toxvol = 0 - brutevol = 0 - burnvol = 0 - tankmax = 0 - update_icon() - to_chat(user, "You remove the [mybeaker.name] from \the [src].") - return - else if(confirmremove == "No") - to_chat(user, "You decide not to remove the [mybeaker.name] from \the [src].") - return else if(menuchoice == "cell") bcell.update_icon() bcell.forceMove(get_turf(src.loc)) @@ -339,6 +352,27 @@ to_chat(user, "You remove the [smodule] from \the [src].") update_icon() return + else if(menuchoice == "capacitor") + scapacitor.update_icon() + scapacitor.forceMove(get_turf(src.loc)) + scapacitor = null + to_chat(user, "You remove the [scapacitor] from \the [src].") + update_icon() + return + else if(menuchoice == "manipulator") + smanipulator.update_icon() + smanipulator.forceMove(get_turf(src.loc)) + smanipulator = null + to_chat(user, "You remove the [smanipulator] from \the [src].") + update_icon() + return + else if(menuchoice == "laser") + slaser.update_icon() + slaser.forceMove(get_turf(src.loc)) + slaser = null + to_chat(user, "You remove the [slaser] from \the [src].") + update_icon() + return if(maintenance) if(istype(W, /obj/item/weapon/cell)) if(bcell) @@ -350,7 +384,7 @@ bcell = W to_chat(user, "You install a cell in \the [src].") update_icon() - else if(istype(W, /obj/item/weapon/stock_parts/scanning_module/phasic)) + else if(istype(W, /obj/item/weapon/stock_parts/scanning_module)) if(smodule) to_chat(user, "\The [src] already has a [W]].") else @@ -359,22 +393,51 @@ W.forceMove(src) smodule = W to_chat(user, "You install the [W] into \the [src].") + medigun.beam_range = 3+smodule.get_rating() + update_icon() + else if(istype(W, /obj/item/weapon/stock_parts/manipulator)) + if(smanipulator) + to_chat(user, "\The [src] already has a [W]].") + else + if(!user.unEquip(W)) + return + W.forceMove(src) + smanipulator = W + to_chat(user, "You install the [W] into \the [src].") + + update_icon() + else if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if(slaser) + to_chat(user, "\The [src] already has a [W]].") + else + if(!user.unEquip(W)) + return + W.forceMove(src) + slaser = W + to_chat(user, "You install the [W] into \the [src].") + update_icon() - else if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker)) - if(mybeaker) - to_chat(user, "\The [src] already has a beaker.") + else if(istype(W, /obj/item/weapon/stock_parts/capacitor)) + if(scapacitor) + to_chat(user, "\The [src] already has a [W]].") else if(!user.unEquip(W)) return W.forceMove(src) - mybeaker = W - if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/bluespace)) - tankmax = 300 - else if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker/large)) - tankmax = 120 + scapacitor = W + var/scaptier = scapacitor.get_rating() + chargecost = 50-(10*scaptier) + if(scaptier >= 5) + tankmax = 500 // alien tech go brr else - tankmax = 60 - to_chat(user, "You slot the [W] in \the [src].") + tankmax = 50*scaptier + if(brutevol > tankmax) + brutevol = tankmax + if(burnvol > tankmax) + burnvol = tankmax + if(toxvol > tankmax) + toxvol = tankmax + to_chat(user, "You install the [W] into \the [src].") update_icon() else @@ -616,7 +679,21 @@ return //var/mob/living/L = target - + if(!medigun_base_unit.smanipulator) + to_chat(user, "\The [src] Blinks a red error light, Manipulator missing.") + return + if(!medigun_base_unit.scapacitor) + to_chat(user, "\The [src] Blinks a blue error light, capacitor missing.") + return + if(!medigun_base_unit.slaser) + to_chat(user, "\The [src] Blinks an orange error light, laser missing.") + return + if(!medigun_base_unit.smodule) + to_chat(user, "\The [src] Blinks a pink error light, scanning module missing.") + return + if(!checked_use(medigun_base_unit.chargecost)) + to_chat(user, "\The [src] doesn't have enough charge left to do that.") + return if(get_dist(target, user) > beam_range) to_chat(user, span("warning", "You are too far away from \the [target] to affect it. Get closer.")) return @@ -655,18 +732,26 @@ to_chat(user, "\The [src] doesn't have enough charge left to do that.") break H.add_modifier(/datum/modifier/medbeameffect, 1 SECONDS) - if(medigun_base_unit.brutevol > 0 && H.getBruteLoss()) - H.adjustBruteLoss(-1) - medigun_base_unit.brutevol -- - ishealing = 1 - if(medigun_base_unit.burnvol > 0 && H.getFireLoss()) - H.adjustFireLoss(-1) - medigun_base_unit.burnvol -- - ishealing = 1 - if(medigun_base_unit.toxvol > 0 && H.getToxLoss()) - H.adjustToxLoss(-1) - medigun_base_unit.toxvol -- - ishealing = 1 + var/lastier = medigun_base_unit.slaser.get_rating() + var/healmod = lastier + if(H.getBruteLoss()) + healmod = min(lastier,medigun_base_unit.brutevol,H.getBruteLoss()) + if(medigun_base_unit.brutevol >= healmod) + H.adjustBruteLoss(-healmod) + medigun_base_unit.brutevol -= healmod + ishealing = 1 + if(H.getFireLoss()) + healmod = min(lastier,medigun_base_unit.burnvol,H.getFireLoss()) + if(medigun_base_unit.burnvol >= healmod) + H.adjustFireLoss(-healmod) + medigun_base_unit.burnvol -= healmod + ishealing = 1 + if(H.getToxLoss()) + healmod = min(lastier,medigun_base_unit.toxvol,H.getToxLoss()) + if(medigun_base_unit.toxvol >= healmod) + H.adjustToxLoss(-healmod) + medigun_base_unit.toxvol -= healmod + ishealing = 1 if(medigun_base_unit.brutevol <= 0 || medigun_base_unit.burnvol <= 0 || medigun_base_unit.toxvol <= 0) medigun_base_unit.update_icon() if(ishealing != washealing) // Either we stopped or started healing this cycle From 0fa31ee55dd784c2fe95ee7144fd890984a0f3c7 Mon Sep 17 00:00:00 2001 From: crossexonar Date: Thu, 3 Jul 2025 13:33:17 -0400 Subject: [PATCH 05/55] More alien tier upgrade thingies --- code/game/Rogue Star/weapons/bork-medigun.dm | 73 ++++++++++++++++---- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm index 11584869992..e94cad0bcaa 100644 --- a/code/game/Rogue Star/weapons/bork-medigun.dm +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -58,6 +58,8 @@ var/bpcmo = 0 var/containsgun = 1 var/maintenance + var/smaniptier = 1 + var/regen = 0 //backpack item /obj/item/device/medigun_backpack/cmo @@ -104,9 +106,18 @@ . += "It is missing a scanning module." if(smanipulator) - . += "It has a [smanipulator.name] installed." + if(smaniptier < 5) + . += "It has a [smanipulator.name] installed, chem digitizing is now [(smaniptier/4)*100]% Efficient." + else + . += "It has a [smanipulator.name] installed, chem digitizing is now 100% Efficient and heal charges will slowly regenerate over time using base battery." if(!smanipulator) . += "It is missing a manipulator." + if(slaser) + . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle." + if(!slaser) + . += "It is missing a laser." + + if(scapacitor) if(chargecost > 0) . += "It has a [scapacitor.name] installed, battery charge will now drain at [chargecost] per second, and grants a heal charge capacity of [tankmax] per type." @@ -127,6 +138,24 @@ if(!scapacitor) . += "It is missing a capacitor, you may not digitize chems." +/obj/item/device/medigun_backpack/process() + if(smaniptier >= 5 && medigun.busy == 0) + regen = 0 + if(brutevol < tankmax) + if(checked_use(25)) + regen = 1 + brutevol ++ + if(burnvol < tankmax) + if(checked_use(25)) + regen = 1 + burnvol ++ + if(toxvol < tankmax) + if(checked_use(25)) + regen = 1 + toxvol ++ + if(regen == 1) + update_icon() + //to_chat(world, "Regenned.") /obj/item/device/medigun_backpack/get_cell() return bcell @@ -192,8 +221,13 @@ /obj/item/device/medigun_backpack/Destroy() . = ..() + STOP_PROCESSING(SSobj, src) QDEL_NULL(medigun) QDEL_NULL(bcell) + QDEL_NULL(smodule) + QDEL_NULL(smanipulator) + QDEL_NULL(scapacitor) + QDEL_NULL(slaser) @@ -232,24 +266,26 @@ var/modifier = 1 var/totransfer = 0 var/name = "" - var maniptier = smanipulator.get_rating() + var/maniptier = smanipulator.get_rating() + if(maniptier > 4) + maniptier = 4 if(R.id in reagentwhitelist) switch(R.id) if("bicaridine") name = "bruteheal" - modifier = 2*maniptier + modifier = maniptier totransfer = tankmax - brutevol if("anti_toxin") name = "toxheal" - modifier = 2*maniptier + modifier = maniptier totransfer = tankmax - toxvol if("kelotane") name = "burnheal" - modifier = 2*maniptier + modifier = maniptier totransfer = tankmax - burnvol if("dermaline") name = "burnheal" - modifier = 4*maniptier + modifier = 2*maniptier totransfer = tankmax - burnvol if("tricordrazine") name = "tricordrazine" @@ -302,7 +338,7 @@ if(oldtox != toxvol) if(readoutadditions) readout += ", " - readout += "[round(100*toxvol - oldtox)/tankmax]% of toxheal charge" + readout += "[round(100*(toxvol - oldtox)/tankmax)]% of toxheal charge" if(oldbrute != brutevol || oldburn != burnvol || oldtox != toxvol)to_chat(user, span("notice", "[readout].")) if(totransfer > 0) if(R.id != "tricordrazine") @@ -363,6 +399,8 @@ smanipulator.update_icon() smanipulator.forceMove(get_turf(src.loc)) smanipulator = null + smaniptier = 0 + STOP_PROCESSING(SSobj, src) to_chat(user, "You remove the [smanipulator] from \the [src].") update_icon() return @@ -403,6 +441,11 @@ return W.forceMove(src) smanipulator = W + smaniptier = smanipulator.get_rating() + if(smaniptier >= 5) + START_PROCESSING(SSobj, src) + else + STOP_PROCESSING(SSobj, src) to_chat(user, "You install the [W] into \the [src].") update_icon() @@ -428,7 +471,7 @@ var/scaptier = scapacitor.get_rating() chargecost = 50-(10*scaptier) if(scaptier >= 5) - tankmax = 500 // alien tech go brr + tankmax = 300 // alien tech go brr else tankmax = 50*scaptier if(brutevol > tankmax) @@ -608,6 +651,12 @@ /obj/item/device/bork_medigun/linked/checked_use(var/charge_amt) return (medigun_base_unit.bcell && medigun_base_unit.bcell.checked_use(charge_amt)) +/obj/item/device/medigun_backpack/proc/checked_use(var/charge_amt) + return 0 + +/obj/item/device/medigun_backpack/checked_use(var/charge_amt) + return (bcell && bcell.checked_use(charge_amt)) + /obj/item/device/bork_medigun/linked/attack_self(mob/living/user) if(!medigun_base_unit.bpcmo)update_twohanding() if(busy) @@ -725,7 +774,7 @@ var/ishealing = 0 while(!should_stop(H, user, active_hand)) //stoplag(15) - if(do_after(user,5,ignore_movement = 1)) + if(do_after(user,10,ignore_movement = 1)) var/washealing = ishealing // Did we heal last cycle ishealing = 0 // The default is 'we didn't heal this cycle' if(!checked_use(medigun_base_unit.chargecost)) @@ -735,19 +784,19 @@ var/lastier = medigun_base_unit.slaser.get_rating() var/healmod = lastier if(H.getBruteLoss()) - healmod = min(lastier,medigun_base_unit.brutevol,H.getBruteLoss()) + healmod = round(min(lastier,medigun_base_unit.brutevol,H.getBruteLoss())) if(medigun_base_unit.brutevol >= healmod) H.adjustBruteLoss(-healmod) medigun_base_unit.brutevol -= healmod ishealing = 1 if(H.getFireLoss()) - healmod = min(lastier,medigun_base_unit.burnvol,H.getFireLoss()) + healmod = round(min(lastier,medigun_base_unit.burnvol,H.getFireLoss())) if(medigun_base_unit.burnvol >= healmod) H.adjustFireLoss(-healmod) medigun_base_unit.burnvol -= healmod ishealing = 1 if(H.getToxLoss()) - healmod = min(lastier,medigun_base_unit.toxvol,H.getToxLoss()) + healmod = round(min(lastier,medigun_base_unit.toxvol,H.getToxLoss())) if(medigun_base_unit.toxvol >= healmod) H.adjustToxLoss(-healmod) medigun_base_unit.toxvol -= healmod From bfb30e54ea0c2b719650238a77055c2e3bcdfcdf Mon Sep 17 00:00:00 2001 From: crossexonar Date: Thu, 3 Jul 2025 22:28:19 -0400 Subject: [PATCH 06/55] Forgot to actually check the tier of the scanning module for the wallcheck OOPSIE --- code/game/Rogue Star/weapons/bork-medigun.dm | 32 ++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm index e94cad0bcaa..6001e7f6e35 100644 --- a/code/game/Rogue Star/weapons/bork-medigun.dm +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -113,7 +113,10 @@ if(!smanipulator) . += "It is missing a manipulator." if(slaser) - . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle." + if(slaser.get_rating() >= 5) + . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle, and will slowly bandage and salve wounds." + else + . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle." if(!slaser) . += "It is missing a laser." @@ -686,7 +689,7 @@ return TRUE //if(get_dist(user, target) > beam_range) - if(!(target in range(beam_range, user)) || (!(target in view(10, user)) && !medigun_base_unit.smodule)) + if(!(target in range(beam_range, user)) || (!(target in view(10, user)) && !(medigun_base_unit.smodule.get_rating() >= 5))) to_chat(user, span("warning", "You are too far away from \the [target] to heal them, Or they are not in view. Get closer.")) return TRUE @@ -803,6 +806,31 @@ ishealing = 1 if(medigun_base_unit.brutevol <= 0 || medigun_base_unit.burnvol <= 0 || medigun_base_unit.toxvol <= 0) medigun_base_unit.update_icon() + if(medigun_base_unit.slaser.get_rating() >= 5) + var/treated = 0 + for(var/obj/item/organ/external/E in H.organs) + var/obj/item/organ/external/O = E + for (var/datum/wound/W in O.wounds) + if (W.internal) + continue + if (W.bandaged && W.disinfected) + continue + if(!(O.is_bandaged()) && !(O.is_disinfected())) + if(medigun_base_unit.brutevol >= 1) + medigun_base_unit.brutevol -= 1 + W.bandage() + W.disinfect() + O.update_damages() + treated = 1 + if(!(O.is_salved())) + if(medigun_base_unit.burnvol >= 1) + medigun_base_unit.burnvol -= 1 + O.salve() + treated = 1 + if(treated) + break + if(treated) + break if(ishealing != washealing) // Either we stopped or started healing this cycle if(ishealing) target.filters += filter From e87e9f28248c5f324d0f3b5a0b91cd607e9a7b5d Mon Sep 17 00:00:00 2001 From: crossexonar Date: Sat, 5 Jul 2025 15:28:18 -0400 Subject: [PATCH 07/55] backup before I rewrite something im not happy with. --- code/game/Rogue Star/weapons/bork-medigun.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm index 6001e7f6e35..871f07a0503 100644 --- a/code/game/Rogue Star/weapons/bork-medigun.dm +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -54,7 +54,7 @@ var/toxvol = 0 var/burnvol = 0 var/tankmax = 60 - var/chargecost = 40 + var/chargecost = 50 var/bpcmo = 0 var/containsgun = 1 var/maintenance @@ -80,7 +80,7 @@ smanipulator = /obj/item/weapon/stock_parts/manipulator/nano smodule = /obj/item/weapon/stock_parts/scanning_module/adv slaser = /obj/item/weapon/stock_parts/micro_laser/high - chargecost = 30 + chargecost = 40 tankmax = 100 brutevol = 100 toxvol = 100 @@ -472,11 +472,11 @@ W.forceMove(src) scapacitor = W var/scaptier = scapacitor.get_rating() - chargecost = 50-(10*scaptier) + chargecost = 60-(10*scaptier) if(scaptier >= 5) - tankmax = 300 // alien tech go brr + tankmax = 150 // alien tech go brr else - tankmax = 50*scaptier + tankmax = 25*scaptier if(brutevol > tankmax) brutevol = tankmax if(burnvol > tankmax) From 45e951f8053d65c5ac64345df458d656736d98e7 Mon Sep 17 00:00:00 2001 From: crossexonar Date: Wed, 9 Jul 2025 15:28:31 -0400 Subject: [PATCH 08/55] TGUI makes my head hurt weh --- .../icons/itemicons/borkmedigun.dmi | Bin 10695 -> 11157 bytes code/game/Rogue Star/weapons/bork-medigun.dm | 480 ++++++++++++------ tgui/packages/tgui/interfaces/Medigun.js | 162 ++++++ tgui/public/tgui.bundle.js | 2 +- 4 files changed, 497 insertions(+), 147 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/Medigun.js diff --git a/code/game/Rogue Star/icons/itemicons/borkmedigun.dmi b/code/game/Rogue Star/icons/itemicons/borkmedigun.dmi index 1e2cff34fa95771ad24ba9cef759e561ffaec488..325bb96aa6e65e449504b59a1941845dc2b14187 100644 GIT binary patch literal 11157 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 e+B8=R1hwtm0>7SU24gL?G|F?Jm literal 10695 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 HtC0Tzfm!wa diff --git a/code/game/Rogue Star/weapons/bork-medigun.dm b/code/game/Rogue Star/weapons/bork-medigun.dm index 871f07a0503..9b48cb66f9f 100644 --- a/code/game/Rogue Star/weapons/bork-medigun.dm +++ b/code/game/Rogue Star/weapons/bork-medigun.dm @@ -46,20 +46,29 @@ var/obj/item/device/bork_medigun/linked/medigun var/obj/item/weapon/cell/bcell = /obj/item/weapon/cell/apc + var/obj/item/weapon/stock_parts/matter_bin/sbin = /obj/item/weapon/stock_parts/matter_bin var/obj/item/weapon/stock_parts/scanning_module/smodule = /obj/item/weapon/stock_parts/scanning_module var/obj/item/weapon/stock_parts/manipulator/smanipulator = /obj/item/weapon/stock_parts/manipulator var/obj/item/weapon/stock_parts/capacitor/scapacitor = /obj/item/weapon/stock_parts/capacitor var/obj/item/weapon/stock_parts/micro_laser/slaser = /obj/item/weapon/stock_parts/micro_laser + var/phoronvol = 0 + var/charging = 0 + var/brutecharge = 0 + var/toxcharge = 0 + var/burncharge = 0 var/brutevol = 0 var/toxvol = 0 var/burnvol = 0 - var/tankmax = 60 - var/chargecost = 50 + var/chemcap = 60 + var/tankmax = 30 + var/chargecost = 25 var/bpcmo = 0 var/containsgun = 1 var/maintenance var/smaniptier = 1 + var/sbintier = 1 var/regen = 0 + var/gridstatus = 0 //backpack item /obj/item/device/medigun_backpack/cmo @@ -80,16 +89,78 @@ smanipulator = /obj/item/weapon/stock_parts/manipulator/nano smodule = /obj/item/weapon/stock_parts/scanning_module/adv slaser = /obj/item/weapon/stock_parts/micro_laser/high - chargecost = 40 - tankmax = 100 - brutevol = 100 - toxvol = 100 - burnvol = 100 + chargecost = 20 + chemcap = 120 + tankmax = 60 + brutecharge = 40 + toxcharge = 40 + burncharge = 40 + brutevol = 60 + toxvol = 60 + burnvol = 60 bpcmo = 1 + + +/obj/item/device/medigun_backpack/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Medigun", name) // 510, 460 + ui.open() + +/obj/item/device/medigun_backpack/tgui_data(mob/user) + var/mob/living/carbon/human/H = medigun.current_target + var/patientname = "No Target" + var/patienthealth = 0 + var/patientbruteloss = 0 + var/patientfireloss = 0 + var/patienttoxloss = 0 + var/patientoxyloss = 0 + //var/minhealth = 0 + if(scapacitor.get_rating() < 5) + gridstatus = 3 + if(H) + patientname = H + patienthealth = max(0, (H.health+abs(config.health_threshold_dead))/(H.maxHealth+abs(config.health_threshold_dead))) + to_chat(world, "Bark [patienthealth] Bark") + patientbruteloss = H.getBruteLoss() + patientfireloss = H.getFireLoss() + patienttoxloss = H.getToxLoss() + patientoxyloss = H.getOxyLoss() + var/list/data = list( + "Generator" = charging, + "powerCellStatus" = bcell ? bcell.percent() : null, + "Gridstatus" = gridstatus, + "PhoronStatus" = sbin ? 100.0*(phoronvol/chemcap) : null, + "BrutehealCharge" = scapacitor ? 100.0*(brutecharge/tankmax) : null, + "BrutehealVol" = sbin ? brutevol : null, + "BurnhealCharge" = scapacitor ? 100.0*(burncharge/tankmax) : null, + "BurnhealVol" = sbin ? burnvol : null, + "ToxhealCharge" = scapacitor ? 100.0*(toxcharge/tankmax) : null, + "ToxhealVol" = sbin ? toxvol : null, + "patientname" = smodule ? patientname : null, + "patienthealth" = smodule ? 100 * patienthealth : null, + "patientbrute" = smodule ? patientbruteloss : null, + "patientburn" = smodule ? patientfireloss : null, + "patienttox" = smodule ? patienttoxloss : null, + "patientoxy" = smodule ? patientoxyloss : null + ) + return data + + +/obj/item/device/medigun_backpack/tgui_act(action, params) + if(..()) + return TRUE + + . = TRUE + switch(action) + if("gentoggle") + ui_action_click() + + /obj/item/device/medigun_backpack/examine(mob/user) . = ..() - + tgui_interact(user) if(Adjacent(user)) if(maintenance) . += "The Maintenance hatch is open." @@ -97,68 +168,124 @@ . += "The [bcell.name] is [round(bcell.percent())]% charged." if(!bcell) . += "It does not have a power source installed." - if(smodule) - if(smodule.get_rating() >= 5) - . += "It has a [smodule.name] installed, device will function within [medigun.beam_range] tiles and through walls." - else - . += "It has a [smodule.name] installed, device will function within [medigun.beam_range] tiles." - if(!smodule) - . += "It is missing a scanning module." + if(maintenance) + if(smodule) + if(smodule.get_rating() >= 5) + . += "It has a [smodule.name] installed, device will function within [medigun.beam_range] tiles and through walls." + else + . += "It has a [smodule.name] installed, device will function within [medigun.beam_range] tiles." + if(!smodule) + . += "It is missing a scanning module." - if(smanipulator) - if(smaniptier < 5) - . += "It has a [smanipulator.name] installed, chem digitizing is now [(smaniptier/4)*100]% Efficient." - else - . += "It has a [smanipulator.name] installed, chem digitizing is now 100% Efficient and heal charges will slowly regenerate over time using base battery." - if(!smanipulator) - . += "It is missing a manipulator." - if(slaser) - if(slaser.get_rating() >= 5) - . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle, and will slowly bandage and salve wounds." - else - . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle." - if(!slaser) - . += "It is missing a laser." - - - if(scapacitor) - if(chargecost > 0) - . += "It has a [scapacitor.name] installed, battery charge will now drain at [chargecost] per second, and grants a heal charge capacity of [tankmax] per type." - else if(chargecost == 0) - . += "It has a [scapacitor.name] installed, The battery will not drain at all, and grants a heal charge capacity of [tankmax] per type." - if(brutevol) - . += "The Bruteheal charge meter reads [round(100*brutevol/tankmax)]% remaining." - else - . += "The Bruteheal charge meter reads empty." - if(burnvol) - . += "The Burnheal charge meter reads [round(100*burnvol/tankmax)]% remaining." - else - . += "The Burnheal charge meter reads empty." - if(toxvol) - . += "The Toxheal charge meter reads [round(100*toxvol/tankmax)]% remaining." - else - . += "The Toxheal charge meter reads empty." - if(!scapacitor) - . += "It is missing a capacitor, you may not digitize chems." + if(smanipulator) + if(smaniptier >= 5) + . += "It has a [smanipulator.name] installed, chem digitizing is now 125% Efficient." + else + . += "It has a [smanipulator.name] installed, chem digitizing is now [(smaniptier/4)*100]% Efficient." + if(!smanipulator) + . += "It is missing a manipulator." + if(slaser) + if(slaser.get_rating() >= 5) + . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle, and will stop bleeding and pain while beam focused." + else + . += "It has a [slaser.name] installed and can heal [slaser.get_rating()] damage per cycle." + if(!slaser) + . += "It is missing a laser." + if(scapacitor) + var/captier = scapacitor.get_rating() + if(captier < 5) + . += "It has a [scapacitor.name] installed, battery charge will now drain at [chargecost] per second, and grants a heal charge capacity of [tankmax] per type." + else + . += "It has a [scapacitor.name] installed, battery charge will now drain at [chargecost] per second, the cell will recharge from the local power grid, it also grants a heal charge capacity of [tankmax] per type." + if(!scapacitor) + . += "It is missing a capacitor, you may not digitize chems." + if(sbin) + if(smodule.get_rating() >= 5) + . += "It has a [sbin.name] installed, can hold [chemcap] reserve chems, will slowly generate chems in exchange for power." + else + . += "It has a [sbin.name] installed, can hold [chemcap] reserve chems." + if(!sbin) + . += "It is missing a matter bin." + if(sbin && scapacitor) + . += "The Bruteheal charge meter reads, main:([brutecharge] / [tankmax]) Reserve: ([brutevol] / [chemcap])" + . += "The Burnheal charge meter reads, main:([burncharge] / [tankmax]) Reserve: ([burnvol] / [chemcap])" + . += "The Toxheal charge meter reads, main:([toxcharge] / [tankmax]) Reserve: ([toxvol] / [chemcap])" + . += "The Phoron tank meter reads: ([phoronvol] / [chemcap])" + + + +/obj/item/device/medigun_backpack/proc/apc_charge() + gridstatus = 0 + var/area/A = get_area(src) + if(!istype(A) || !A.powered(EQUIP)) + return FALSE + gridstatus = 1 + if(bcell && (bcell.charge < bcell.maxcharge)) + var/cur_charge = bcell.charge + var/delta = min(50, bcell.maxcharge-cur_charge) + bcell.give(delta) + A.use_power_oneoff(delta*100, EQUIP) + gridstatus = 2 + return TRUE /obj/item/device/medigun_backpack/process() - if(smaniptier >= 5 && medigun.busy == 0) + var/modifier + if(bcell.charge >= 10) regen = 0 - if(brutevol < tankmax) - if(checked_use(25)) + if(brutecharge < tankmax && brutevol > 0 && (bcell.checked_use(5))) + modifier = smaniptier * 2 + if(modifier > brutevol) + modifier = brutevol + if(modifier > (tankmax - brutecharge)) + modifier = tankmax - brutecharge + brutevol -= modifier + regen = 1 + brutecharge += modifier + if(burncharge < tankmax && burnvol > 0 && (bcell.checked_use(5))) + modifier = smaniptier * 2 + if(modifier > burnvol) + modifier = burnvol + if(modifier > (tankmax - burncharge)) + modifier = tankmax - burncharge + burnvol -= modifier + regen = 1 + burncharge += modifier + if(toxcharge < tankmax && toxvol > 0 && (bcell.checked_use(5))) + modifier = smaniptier * 2 + if(modifier > toxvol) + modifier = toxvol + if(modifier > (tankmax - toxcharge)) + modifier = tankmax - toxcharge + toxvol -= modifier + regen = 1 + toxcharge += modifier + //Alien tier + if(sbintier >= 5 && medigun.busy == 0 && (bcell.charge >= 10)) + if(brutevol < chemcap && (bcell.checked_use(10))) regen = 1 brutevol ++ - if(burnvol < tankmax) - if(checked_use(25)) + if(burnvol < chemcap && (bcell.checked_use(10))) regen = 1 burnvol ++ - if(toxvol < tankmax) - if(checked_use(25)) + if(toxvol < chemcap && (bcell.checked_use(10))) regen = 1 toxvol ++ if(regen == 1) update_icon() //to_chat(world, "Regenned.") + if(bcell && scapacitor.get_rating()>= 5 && charging == 0) + apc_charge() + if(bcell && charging) + if((bcell.amount_missing() >= 50)) + if(phoronvol > 0) + phoronvol -- + bcell.give(50) + update_icon() + else + if(ismob(loc)) + var/mob/user = loc + to_chat(user, span("notice", "The phoron generator sputters then stops.")) + charging = 0 /obj/item/device/medigun_backpack/get_cell() return bcell @@ -166,13 +293,23 @@ /obj/item/device/medigun_backpack/update_icon() . = ..() cut_overlays() - if(brutevol <= 0) + if((bcell.percent() <= 5 )) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "no_battery")) + else if((bcell.percent() <= 25 && bcell.percent() > 5)) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "low_battery")) + if(brutevol <= 0 && brutecharge > 0) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "red")) + else if(brutecharge <= 0 && brutevol <= 0) add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "redstrike-blink")) //to_chat(world, span("warning", "brute empty")) - if(toxvol <= 0) + if(toxvol <= 0 && toxcharge > 0) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "green")) + else if(toxcharge <= 0 && toxvol <= 0) add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "greenstrike-blink")) //to_chat(world, span("warning", "tox empty")) - if(burnvol <= 0) + if(burnvol <= 0 && burncharge > 0) + add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "orange")) + else if(burncharge <= 0 && burnvol <= 0) add_overlay(image('code/game/Rogue Star/icons/itemicons/borkmedigun.dmi', "orangestrike-blink")) //to_chat(world, span("warning", "burn empty")) @@ -212,8 +349,11 @@ medigun.beam_range = 4 if(ispath(bcell)) bcell = new bcell(src) + if(ispath(sbin)) + sbin = new sbin(src) if(ispath(smodule)) smodule = new smodule(src) + START_PROCESSING(SSobj, src) if(ispath(smanipulator)) smanipulator = new smanipulator(src) if(ispath(scapacitor)) @@ -222,6 +362,7 @@ slaser = new slaser(src) update_icon() + /obj/item/device/medigun_backpack/Destroy() . = ..() STOP_PROCESSING(SSobj, src) @@ -235,8 +376,15 @@ /obj/item/device/medigun_backpack/ui_action_click() - toggle_medigun() - + if(charging) + to_chat(usr, span("notice", "You disable the phoron generator.")) + charging = 0 + else + if(phoronvol > 0) + to_chat(usr, span("notice", "You enable the phoron generator.")) + charging = 1 + else + to_chat(usr, span("warning", "Not Enough Phoron stored.")) /obj/item/device/medigun_backpack/attack_hand(mob/user) if(loc == user) toggle_medigun() @@ -262,41 +410,42 @@ if(!maintenance && (istype(W, /obj/item/weapon/reagent_containers/glass/beaker) || istype(W, /obj/item/weapon/reagent_containers/glass/bottle))) playsound(src, 'sound/weapons/empty.ogg', 50, 1) - var/reagentwhitelist = list("bicaridine", "anti_toxin", "kelotane", "dermaline", "tricordrazine") + var/reagentwhitelist = list("bicaridine", "anti_toxin", "kelotane", "dermaline", "phoron")//, "tricordrazine") for(var/G in W.reagents.reagent_list) var/datum/reagent/R = G var/modifier = 1 var/totransfer = 0 var/name = "" - var/maniptier = smanipulator.get_rating() - if(maniptier > 4) - maniptier = 4 if(R.id in reagentwhitelist) switch(R.id) if("bicaridine") name = "bruteheal" - modifier = maniptier - totransfer = tankmax - brutevol + modifier = 4 + totransfer = chemcap - brutevol if("anti_toxin") name = "toxheal" - modifier = maniptier - totransfer = tankmax - toxvol + modifier = 4 + totransfer = chemcap - toxvol if("kelotane") name = "burnheal" - modifier = maniptier - totransfer = tankmax - burnvol + modifier = 4 + totransfer = chemcap - burnvol if("dermaline") name = "burnheal" - modifier = 2*maniptier - totransfer = tankmax - burnvol - if("tricordrazine") + modifier = 8 + totransfer = chemcap - burnvol + if("phoron") + name = "phoron" + modifier = 1 + totransfer = chemcap - phoronvol + /*if("tricordrazine") name = "tricordrazine" modifier = 1 - if((brutevol != tankmax) && (burnvol != tankmax) && (toxvol != tankmax)) + if((brutevol != chemcap) && (burnvol != chemcap) && (toxvol != chemcap)) totransfer = 1 //tempcheck to get past the totransfer check else - totransfer = 0 + totransfer = 0*/ if(totransfer <= 0) to_chat(user, span("notice", "The [src] cannot accept anymore [name]!")) totransfer = min(totransfer,W.reagents.get_reagent_amount(R.id) * modifier) @@ -309,7 +458,9 @@ burnvol += totransfer if("dermaline") burnvol += totransfer - if("tricordrazine") + if("phoron") + phoronvol += totransfer + /*if("tricordrazine") //Tricord too problematic var/maxamount = W.reagents.get_reagent_amount(R.id) var/amountused var/oldbrute = brutevol @@ -317,35 +468,35 @@ var/oldtox = toxvol while(maxamount > 0) - if(brutevol >= tankmax && burnvol >= tankmax && toxvol >= tankmax) + if(brutevol >= chemcap && burnvol >= chemcap && toxvol >= chemcap) break maxamount -- amountused++ totransfer ++ - if(brutevol < tankmax) + if(brutevol < chemcap) brutevol ++ - if(burnvol < tankmax) + if(burnvol < chemcap) burnvol ++ - if(toxvol < tankmax) + if(toxvol < chemcap) toxvol ++ - var/readout = "You add [amountused] units of [R.name] to the [src]. \n The [src] digitizes " + var/readout = "You add [amountused] units of [R.name] to the [src]. \n The [src] Stores " var/readoutadditions = FALSE if(oldbrute != brutevol) - readout += "[round(100*(brutevol - oldbrute)/tankmax)]% of bruteheal charge" + readout += "[round(brutevol - oldbrute)] U of bruteheal vol" readoutadditions = TRUE if(oldburn != burnvol) if(readoutadditions) readout += ", " - readout += "[round(100*(burnvol - oldburn)/tankmax)]% of burnheal charge" + readout += "[round(burnvol - oldburn)] U of burnheal vol" readoutadditions = TRUE if(oldtox != toxvol) if(readoutadditions) readout += ", " - readout += "[round(100*(toxvol - oldtox)/tankmax)]% of toxheal charge" - if(oldbrute != brutevol || oldburn != burnvol || oldtox != toxvol)to_chat(user, span("notice", "[readout].")) + readout += "[round(toxvol - oldtox)] U of toxheal vol" + if(oldbrute != brutevol || oldburn != burnvol || oldtox != toxvol)to_chat(user, span("notice", "[readout]."))*/ if(totransfer > 0) if(R.id != "tricordrazine") - to_chat(user, span("notice", "You add [totransfer / modifier] units of [R.name] to the [src]. \n The [src] digitizes [round(100*totransfer/tankmax)]% charge of [name].")) + to_chat(user, span("notice", "You add [totransfer / modifier] units of [R.name] to the [src]. \n The [src] stores [round(totransfer)] U of [name].")) W.reagents.remove_reagent(R.id, totransfer / modifier) update_icon() if(W == medigun) @@ -361,10 +512,12 @@ else var/list/installedparts installedparts = list("close hatch") - if(bcell) - installedparts.Add("cell") + //if(bcell) + // installedparts.Add("cell") if(smodule) installedparts.Add("scanning module") + if(sbin) + installedparts.Add("matter bin") if(scapacitor) installedparts.Add("capacitor") if(smanipulator) @@ -377,12 +530,21 @@ maintenance = 0 to_chat(user, "You close the maintenance hatch on \the [src].") return - else if(menuchoice == "cell") + /*else if(menuchoice == "cell") bcell.update_icon() bcell.forceMove(get_turf(src.loc)) bcell = null to_chat(user, "You remove the cell from \the [src].") update_icon() + return*/ + else if(menuchoice == "matter bin") + sbin.update_icon() + sbin.forceMove(get_turf(src.loc)) + sbin = null + sbintier = 0 + to_chat(user, "You remove the [sbin] from \the [src].") + update_icon() + STOP_PROCESSING(SSobj, src) return else if(menuchoice == "scanning module") smodule.update_icon() @@ -396,6 +558,7 @@ scapacitor.forceMove(get_turf(src.loc)) scapacitor = null to_chat(user, "You remove the [scapacitor] from \the [src].") + STOP_PROCESSING(SSobj, src) update_icon() return else if(menuchoice == "manipulator") @@ -415,7 +578,7 @@ update_icon() return if(maintenance) - if(istype(W, /obj/item/weapon/cell)) + /*if(istype(W, /obj/item/weapon/cell)) if(bcell) to_chat(user, "\The [src] already has a cell.") else @@ -424,10 +587,10 @@ W.forceMove(src) bcell = W to_chat(user, "You install a cell in \the [src].") - update_icon() - else if(istype(W, /obj/item/weapon/stock_parts/scanning_module)) + update_icon()*/ + if(istype(W, /obj/item/weapon/stock_parts/scanning_module)) if(smodule) - to_chat(user, "\The [src] already has a [W]].") + to_chat(user, "\The [src] already has a scanning module.") else if(!user.unEquip(W)) return @@ -438,23 +601,20 @@ update_icon() else if(istype(W, /obj/item/weapon/stock_parts/manipulator)) if(smanipulator) - to_chat(user, "\The [src] already has a [W]].") + to_chat(user, "\The [src] already has a manipulator.") else if(!user.unEquip(W)) return W.forceMove(src) smanipulator = W smaniptier = smanipulator.get_rating() - if(smaniptier >= 5) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) + if(sbin && scapacitor)START_PROCESSING(SSobj, src) to_chat(user, "You install the [W] into \the [src].") update_icon() else if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) if(slaser) - to_chat(user, "\The [src] already has a [W]].") + to_chat(user, "\The [src] already has a micro laser.") else if(!user.unEquip(W)) return @@ -465,24 +625,47 @@ update_icon() else if(istype(W, /obj/item/weapon/stock_parts/capacitor)) if(scapacitor) - to_chat(user, "\The [src] already has a [W]].") + to_chat(user, "\The [src] already has a capacitor.") else if(!user.unEquip(W)) return W.forceMove(src) scapacitor = W var/scaptier = scapacitor.get_rating() - chargecost = 60-(10*scaptier) + chargecost = 30-(5*scaptier) if(scaptier >= 5) - tankmax = 150 // alien tech go brr + tankmax = 150 + else + tankmax = 30*scaptier + if(brutecharge > tankmax) + brutecharge = tankmax + if(burncharge > tankmax) + burncharge = tankmax + if(toxcharge > tankmax) + toxcharge = tankmax + if(sbin && smanipulator)START_PROCESSING(SSobj, src) + to_chat(user, "You install the [W] into \the [src].") + update_icon() + else if(istype(W, /obj/item/weapon/stock_parts/matter_bin)) + if(sbin) + to_chat(user, "\The [src] already has a matter bin.") + else + if(!user.unEquip(W)) + return + W.forceMove(src) + sbin = W + sbintier = sbin.get_rating() + if(sbintier >= 5) + chemcap = 300 else - tankmax = 25*scaptier - if(brutevol > tankmax) - brutevol = tankmax - if(burnvol > tankmax) - burnvol = tankmax - if(toxvol > tankmax) - toxvol = tankmax + chemcap = 60*(sbintier) + if(brutecharge > chemcap) + brutecharge = chemcap + if(burncharge > chemcap) + burncharge = chemcap + if(toxcharge > chemcap) + toxcharge = chemcap + if(scapacitor && smanipulator)START_PROCESSING(SSobj, src) to_chat(user, "You install the [W] into \the [src].") update_icon() @@ -783,54 +966,59 @@ if(!checked_use(medigun_base_unit.chargecost)) to_chat(user, "\The [src] doesn't have enough charge left to do that.") break - H.add_modifier(/datum/modifier/medbeameffect, 1 SECONDS) var/lastier = medigun_base_unit.slaser.get_rating() + if(lastier >= 5) + H.add_modifier(/datum/modifier/medbeameffect, 2 SECONDS) + var/healmod = lastier if(H.getBruteLoss()) - healmod = round(min(lastier,medigun_base_unit.brutevol,H.getBruteLoss())) - if(medigun_base_unit.brutevol >= healmod) + healmod = round(min(lastier,medigun_base_unit.brutecharge,H.getBruteLoss())) + if(medigun_base_unit.brutecharge >= healmod) H.adjustBruteLoss(-healmod) - medigun_base_unit.brutevol -= healmod + medigun_base_unit.brutecharge -= healmod ishealing = 1 if(H.getFireLoss()) - healmod = round(min(lastier,medigun_base_unit.burnvol,H.getFireLoss())) - if(medigun_base_unit.burnvol >= healmod) + healmod = round(min(lastier,medigun_base_unit.burncharge,H.getFireLoss())) + if(medigun_base_unit.burncharge >= healmod) H.adjustFireLoss(-healmod) - medigun_base_unit.burnvol -= healmod + medigun_base_unit.burncharge -= healmod ishealing = 1 if(H.getToxLoss()) - healmod = round(min(lastier,medigun_base_unit.toxvol,H.getToxLoss())) - if(medigun_base_unit.toxvol >= healmod) + healmod = round(min(lastier,medigun_base_unit.toxcharge,H.getToxLoss())) + if(medigun_base_unit.toxcharge >= healmod) H.adjustToxLoss(-healmod) - medigun_base_unit.toxvol -= healmod + medigun_base_unit.toxcharge -= healmod ishealing = 1 - if(medigun_base_unit.brutevol <= 0 || medigun_base_unit.burnvol <= 0 || medigun_base_unit.toxvol <= 0) - medigun_base_unit.update_icon() - if(medigun_base_unit.slaser.get_rating() >= 5) - var/treated = 0 - for(var/obj/item/organ/external/E in H.organs) - var/obj/item/organ/external/O = E - for (var/datum/wound/W in O.wounds) - if (W.internal) - continue - if (W.bandaged && W.disinfected) - continue - if(!(O.is_bandaged()) && !(O.is_disinfected())) - if(medigun_base_unit.brutevol >= 1) - medigun_base_unit.brutevol -= 1 - W.bandage() - W.disinfect() - O.update_damages() - treated = 1 - if(!(O.is_salved())) - if(medigun_base_unit.burnvol >= 1) - medigun_base_unit.burnvol -= 1 - O.salve() - treated = 1 - if(treated) - break + var/treated = 0 + for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO)) + var/obj/item/organ/external/O = H.organs_by_name[name] + for(var/datum/wound/W in O.wounds) + if (W.internal) + continue + if (W.bandaged && W.disinfected) + continue + if (W.damage_type == BRUISE || W.damage_type == CUT || W.damage_type == PIERCE) + if(medigun_base_unit.brutecharge >= 1) + if(W.damage <= 1) + O.wounds -= W + medigun_base_unit.brutecharge -= 1 + else + W.damage -= healmod + medigun_base_unit.brutecharge -= healmod + O.update_damages() + treated = 1 + if (W.damage_type == BURN) + if(medigun_base_unit.burncharge >= 1) + if(W.damage <= 1) + O.wounds -= W + medigun_base_unit.burncharge -= 1 + treated = 1 if(treated) break + //if(medigun_base_unit.brutecharge <= 0 || medigun_base_unit.burncharge <= 0 || medigun_base_unit.toxcharge <= 0) + medigun_base_unit.update_icon() + //if(medigun_base_unit.slaser.get_rating() >= 5) + if(ishealing != washealing) // Either we stopped or started healing this cycle if(ishealing) target.filters += filter diff --git a/tgui/packages/tgui/interfaces/Medigun.js b/tgui/packages/tgui/interfaces/Medigun.js new file mode 100644 index 00000000000..980a2553177 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Medigun.js @@ -0,0 +1,162 @@ +import { Fragment } from 'inferno'; +import { useBackend } from '../backend'; +import { Button, LabeledList, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; + +export const Medigun = (props, context) => { + const { act, data } = useBackend(context); + + let body = ; + + return ( + + {body} + + ); +}; + +const powerStatusMap = { + 1: { + color: 'good', + GeneratorText: 'Generator Running', + }, + 0: { + color: 'bad', + GeneratorText: 'Generator Offline', + }, +}; + +const gridStatusMap = { + 3: { + color: 'bad', + WirelessText: '', + }, + 2: { + color: 'good', + WirelessText: 'Using Grid', + }, + 1: { + color: 'average', + WirelessText: 'Grid Available', + }, + 0: { + color: 'bad', + WirelessText: 'Off Grid', + }, +}; + +const MedigunContent = (props, context) => { + const { act, data } = useBackend(context); + const GeneratorStatus = powerStatusMap[data.Generator] || powerStatusMap[0]; + const WirelessStatus = gridStatusMap[data.Gridstatus] || gridStatusMap[0]; + const adjustedCellChange = data.powerCellStatus / 100; + const adjustedPhoronChange = data.PhoronStatus / 100; + const adjustedBruteChange = data.BrutehealCharge / 100; + const adjustedBurnChange = data.BurnhealCharge / 100; + const adjustedToxChange = data.ToxhealCharge / 100; + const brutevol = data.BrutehealVol; + const burnvol = data.BurnhealVol; + const toxvol = data.ToxhealVol; + const patientname = data.patientname; + const patienthealth = data.patienthealth / 100; + const patientbrute = data.patientbrute; + const patientburn = data.patientburn; + const patienttox = data.patienttox; + const patientoxy = data.patientoxy; + + return ( + +
+ + + + + + {data.Gridstatus !== 3 && ( + + {WirelessStatus.WirelessText} + + )} + + act('gentoggle')} + /> + }> + [ {GeneratorStatus.GeneratorText} ] + + + + + +
+
+ + + + + + + + + + + + {brutevol} + + + {burnvol} + + + {toxvol} + + +
+
+ + {patientname} + + {data.patientname !== 'No Target' && ( + + + + )} + {data.patientname !== 'No Target' && ( + + {patientbrute} + + )} + {data.patientname !== 'No Target' && ( + + {patientburn} + + )} + {data.patientname !== 'No Target' && ( + + {patienttox} + + )} + {data.patientname !== 'No Target' && ( + + {patientoxy} + + )} +
+
+ ); +}; diff --git a/tgui/public/tgui.bundle.js b/tgui/public/tgui.bundle.js index a23fb81b65f..f6594377b65 100644 --- a/tgui/public/tgui.bundle.js +++ b/tgui/public/tgui.bundle.js @@ -1 +1 @@ -!function(){var e={21926:function(e,t,n){"use strict";t.__esModule=!0,t.createPopper=void 0,t.popperGenerator=f;var o=m(n(48764)),r=m(n(68349)),a=m(n(3671)),i=m(n(55490)),c=(m(n(40755)),m(n(69282))),l=m(n(27672)),d=(m(n(30752)),m(n(12459)),m(n(27629)),m(n(54220))),s=m(n(75949));t.detectOverflow=s["default"];var u=n(79388);n(15954);function m(e){return e&&e.__esModule?e:{"default":e}}var p={placement:"bottom",modifiers:[],strategy:"absolute"};function h(){for(var e=arguments.length,t=new Array(e),n=0;n0&&(a=(0,r.round)(n.width)/l||1),c>0&&(i=(0,r.round)(n.height)/c||1)}return{width:n.width/a,height:n.height/i,top:n.top/i,right:n.right/a,bottom:n.bottom/i,left:n.left/a,x:n.left/a,y:n.top/i}};var o=n(79388),r=n(36291)},65647:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){var o="clippingParents"===t?function(e){var t=(0,i["default"])((0,m["default"])(e)),n=["absolute","fixed"].indexOf((0,d["default"])(e).position)>=0&&(0,s.isHTMLElement)(e)?(0,c["default"])(e):e;if(!(0,s.isElement)(n))return[];return t.filter((function(e){return(0,s.isElement)(e)&&(0,p["default"])(e,n)&&"body"!==(0,h["default"])(e)}))}(e):[].concat(t),r=[].concat(o,[n]),a=r[0],l=r.reduce((function(t,n){var o=N(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}),N(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(15954),r=b(n(8204)),a=b(n(40015)),i=b(n(3671)),c=b(n(55490)),l=b(n(25890)),d=b(n(40755)),s=n(79388),u=b(n(11100)),m=b(n(95136)),p=b(n(62215)),h=b(n(38569)),f=b(n(73060)),C=n(36291);function b(e){return e&&e.__esModule?e:{"default":e}}function N(e,t){return t===o.viewport?(0,f["default"])((0,r["default"])(e)):(0,s.isElement)(t)?function(e){var t=(0,u["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,f["default"])((0,a["default"])((0,l["default"])(e)))}},48764:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){void 0===n&&(n=!1);var u=(0,i.isHTMLElement)(t),m=(0,i.isHTMLElement)(t)&&function(e){var t=e.getBoundingClientRect(),n=(0,s.round)(t.width)/e.offsetWidth||1,o=(0,s.round)(t.height)/e.offsetHeight||1;return 1!==n||1!==o}(t),p=(0,l["default"])(t),h=(0,o["default"])(e,m),f={scrollLeft:0,scrollTop:0},C={x:0,y:0};(u||!u&&!n)&&(("body"!==(0,a["default"])(t)||(0,d["default"])(p))&&(f=(0,r["default"])(t)),(0,i.isHTMLElement)(t)?((C=(0,o["default"])(t,!0)).x+=t.clientLeft,C.y+=t.clientTop):p&&(C.x=(0,c["default"])(p)));return{x:h.left+f.scrollLeft-C.x,y:h.top+f.scrollTop-C.y,width:h.width,height:h.height}};var o=u(n(11100)),r=u(n(3514)),a=u(n(38569)),i=n(79388),c=u(n(36056)),l=u(n(25890)),d=u(n(57360)),s=n(36291);function u(e){return e&&e.__esModule?e:{"default":e}}},40755: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(96904))&&o.__esModule?o:{"default":o}},25890: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(79388)},40015: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),d=null==(t=e.ownerDocument)?void 0:t.body,s=(0,c.max)(n.scrollWidth,n.clientWidth,d?d.scrollWidth:0,d?d.clientWidth:0),u=(0,c.max)(n.scrollHeight,n.clientHeight,d?d.scrollHeight:0,d?d.clientHeight:0),m=-l.scrollLeft+(0,a["default"])(e),p=-l.scrollTop;"rtl"===(0,r["default"])(d||n).direction&&(m+=(0,c.max)(n.clientWidth,d?d.clientWidth:0)-s);return{width:s,height:u,x:m,y:p}};var o=l(n(25890)),r=l(n(40755)),a=l(n(36056)),i=l(n(69211)),c=n(36291);function l(e){return e&&e.__esModule?e:{"default":e}}},41829:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},68349: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(11100))&&o.__esModule?o:{"default":o}},38569:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e?(e.nodeName||"").toLowerCase():null}},3514: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(69211)),r=c(n(96904)),a=n(79388),i=c(n(41829));function c(e){return e&&e.__esModule?e:{"default":e}}},55490:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=s(e);for(;n&&(0,c["default"])(n)&&"static"===(0,a["default"])(n).position;)n=s(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);(0,i.isShadowRoot)(n)&&(n=n.host);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=d(n(96904)),r=d(n(38569)),a=d(n(40755)),i=n(79388),c=d(n(94437)),l=d(n(95136));function d(e){return e&&e.__esModule?e:{"default":e}}function s(e){return(0,i.isHTMLElement)(e)&&"fixed"!==(0,a["default"])(e).position?e.offsetParent:null}},95136: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(38569)),r=i(n(25890)),a=n(79388);function i(e){return e&&e.__esModule?e:{"default":e}}},43367: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(95136)),r=c(n(57360)),a=c(n(38569)),i=n(79388);function c(e){return e&&e.__esModule?e:{"default":e}}},8204: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,d=0,s=0;i&&(c=i.width,l=i.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(d=i.offsetLeft,s=i.offsetTop));return{width:c,height:l,x:d+(0,a["default"])(e),y:s}};var o=i(n(96904)),r=i(n(25890)),a=i(n(36056));function i(e){return e&&e.__esModule?e:{"default":e}}},96904: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}},69211: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(96904))&&o.__esModule?o:{"default":o}},36056: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(11100)),r=i(n(25890)),a=i(n(69211));function i(e){return e&&e.__esModule?e:{"default":e}}},79388: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(96904))&&o.__esModule?o:{"default":o}},57360: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(40755))&&o.__esModule?o:{"default":o}},94437: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(38569))&&o.__esModule?o:{"default":o}},3671: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),d=c===(null==(n=e.ownerDocument)?void 0:n.body),s=(0,a["default"])(c),u=d?[s].concat(s.visualViewport||[],(0,i["default"])(c)?c:[]):c,m=t.concat(u);return d?m:m.concat(l((0,r["default"])(u)))};var o=c(n(43367)),r=c(n(95136)),a=c(n(96904)),i=c(n(57360));function c(e){return e&&e.__esModule?e:{"default":e}}},15954:function(e,t){"use strict";t.__esModule=!0,t.write=t.viewport=t.variationPlacements=t.top=t.start=t.right=t.reference=t.read=t.popper=t.placements=t.modifierPhases=t.main=t.left=t.end=t.clippingParents=t.bottom=t.beforeWrite=t.beforeRead=t.beforeMain=t.basePlacements=t.auto=t.afterWrite=t.afterRead=t.afterMain=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 d=i.reduce((function(e,t){return e.concat([t+"-"+c,t+"-"+l])}),[]);t.variationPlacements=d;var s=[].concat(i,[a]).reduce((function(e,t){return e.concat([t,t+"-"+c,t+"-"+l])}),[]);t.placements=s;var u="beforeRead";t.beforeRead=u;var m="read";t.read=m;var p="afterRead";t.afterRead=p;var h="beforeMain";t.beforeMain=h;var f="main";t.main=f;var C="afterMain";t.afterMain=C;var b="beforeWrite";t.beforeWrite=b;var N="write";t.write=N;var g="afterWrite";t.afterWrite=g;var V=[u,m,p,h,f,C,b,N,g];t.modifierPhases=V},37809:function(e,t,n){"use strict";t.__esModule=!0;var o={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};t.popperGenerator=t.detectOverflow=t.createPopperLite=t.createPopperBase=t.createPopper=void 0;var r=n(15954);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(4207);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(21926);t.popperGenerator=i.popperGenerator,t.detectOverflow=i.detectOverflow,t.createPopperBase=i.createPopper;var c=n(17827);t.createPopper=c.createPopper;var l=n(47952);t.createPopperLite=l.createPopper},89290:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(38569))&&o.__esModule?o:{"default":o},a=n(79388);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},71313:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=m(n(27629)),r=m(n(68349)),a=m(n(62215)),i=m(n(55490)),c=m(n(78772)),l=n(54444),d=m(n(11277)),s=m(n(45674)),u=n(15954);n(79388);function m(e){return e&&e.__esModule?e:{"default":e}}var p=function(e,t){return e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e,(0,d["default"])("number"!=typeof e?e:(0,s["default"])(e,u.basePlacements))};var h={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,a=e.name,d=e.options,s=n.elements.arrow,m=n.modifiersData.popperOffsets,h=(0,o["default"])(n.placement),f=(0,c["default"])(h),C=[u.left,u.right].indexOf(h)>=0?"height":"width";if(s&&m){var b=p(d.padding,n),N=(0,r["default"])(s),g="y"===f?u.top:u.left,V="y"===f?u.bottom:u.right,v=n.rects.reference[C]+n.rects.reference[f]-m[f]-n.rects.popper[C],_=m[f]-n.rects.reference[f],y=(0,i["default"])(s),k=y?"y"===f?y.clientHeight||0:y.clientWidth||0:0,x=v/2-_/2,w=b[g],B=k-N[C]-b[V],L=k/2-N[C]/2+x,S=(0,l.within)(w,L,B),I=f;n.modifiersData[a]=((t={})[I]=S,t.centerOffset=S-L,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"]=h},54680:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.mapToStyles=p;var o=n(15954),r=u(n(55490)),a=u(n(96904)),i=u(n(25890)),c=u(n(40755)),l=u(n(27629)),d=u(n(31686)),s=n(36291);function u(e){return e&&e.__esModule?e:{"default":e}}var m={top:"auto",right:"auto",bottom:"auto",left:"auto"};function p(e){var t,n=e.popper,l=e.popperRect,d=e.placement,u=e.variation,p=e.offsets,h=e.position,f=e.gpuAcceleration,C=e.adaptive,b=e.roundOffsets,N=e.isFixed,g=p.x,V=void 0===g?0:g,v=p.y,_=void 0===v?0:v,y="function"==typeof b?b({x:V,y:_}):{x:V,y:_};V=y.x,_=y.y;var k=p.hasOwnProperty("x"),x=p.hasOwnProperty("y"),w=o.left,B=o.top,L=window;if(C){var S=(0,r["default"])(n),I="clientHeight",T="clientWidth";if(S===(0,a["default"])(n)&&(S=(0,i["default"])(n),"static"!==(0,c["default"])(S).position&&"absolute"===h&&(I="scrollHeight",T="scrollWidth")),d===o.top||(d===o.left||d===o.right)&&u===o.end)B=o.bottom,_-=(N&&S===L&&L.visualViewport?L.visualViewport.height:S[I])-l.height,_*=f?1:-1;if(d===o.left||(d===o.top||d===o.bottom)&&u===o.end)w=o.right,V-=(N&&S===L&&L.visualViewport?L.visualViewport.width:S[T])-l.width,V*=f?1:-1}var M,A=Object.assign({position:h},C&&m),E=!0===b?function(e){var t=e.x,n=e.y,o=window.devicePixelRatio||1;return{x:(0,s.round)(t*o)/o||0,y:(0,s.round)(n*o)/o||0}}({x:V,y:_}):{x:V,y:_};return V=E.x,_=E.y,f?Object.assign({},A,((M={})[B]=x?"0":"",M[w]=k?"0":"",M.transform=(L.devicePixelRatio||1)<=1?"translate("+V+"px, "+_+"px)":"translate3d("+V+"px, "+_+"px, 0)",M)):Object.assign({},A,((t={})[B]=x?_+"px":"",t[w]=k?V+"px":"",t.transform="",t))}var h={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,s=void 0===c||c,u={placement:(0,l["default"])(t.placement),variation:(0,d["default"])(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,p(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:s})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,p(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};t["default"]=h},53887:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(96904))&&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,d=void 0===l||l,s=(0,r["default"])(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return c&&u.forEach((function(e){e.addEventListener("scroll",n.update,a)})),d&&s.addEventListener("resize",n.update,a),function(){c&&u.forEach((function(e){e.removeEventListener("scroll",n.update,a)})),d&&s.removeEventListener("resize",n.update,a)}},data:{}};t["default"]=i},82566:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=s(n(31477)),r=s(n(27629)),a=s(n(44214)),i=s(n(75949)),c=s(n(2894)),l=n(15954),d=s(n(31686));function s(e){return e&&e.__esModule?e:{"default":e}}var u={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,s=e.name;if(!t.modifiersData[s]._skip){for(var u=n.mainAxis,m=void 0===u||u,p=n.altAxis,h=void 0===p||p,f=n.fallbackPlacements,C=n.padding,b=n.boundary,N=n.rootBoundary,g=n.altBoundary,V=n.flipVariations,v=void 0===V||V,_=n.allowedAutoPlacements,y=t.options.placement,k=(0,r["default"])(y),x=f||(k===y||!v?[(0,o["default"])(y)]: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)]}(y)),w=[y].concat(x).reduce((function(e,n){return e.concat((0,r["default"])(n)===l.auto?(0,c["default"])(t,{placement:n,boundary:b,rootBoundary:N,padding:C,flipVariations:v,allowedAutoPlacements:_}):n)}),[]),B=t.rects.reference,L=t.rects.popper,S=new Map,I=!0,T=w[0],M=0;M=0,F=O?"width":"height",D=(0,i["default"])(t,{placement:A,boundary:b,rootBoundary:N,altBoundary:g,padding:C}),R=O?P?l.right:l.left:P?l.bottom:l.top;B[F]>L[F]&&(R=(0,o["default"])(R));var j=(0,o["default"])(R),W=[];if(m&&W.push(D[E]<=0),h&&W.push(D[R]<=0,D[j]<=0),W.every((function(e){return e}))){T=A,I=!1;break}S.set(A,W)}if(I)for(var z=function(e){var t=w.find((function(t){var n=S.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return T=t,"break"},U=v?3:1;U>0;U--){if("break"===z(U))break}t.placement!==T&&(t.modifiersData[s]._skip=!0,t.placement=T,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};t["default"]=u},27353:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=n(15954),a=(o=n(75949))&&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,d=(0,a["default"])(t,{elementContext:"reference"}),s=(0,a["default"])(t,{altBoundary:!0}),u=i(d,o),m=i(s,r,l),p=c(u),h=c(m);t.modifiersData[n]={referenceClippingOffsets:u,popperEscapeOffsets:m,isReferenceHidden:p,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":h})}};t["default"]=l},4207: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=m(n(89290));t.applyStyles=o["default"];var r=m(n(71313));t.arrow=r["default"];var a=m(n(54680));t.computeStyles=a["default"];var i=m(n(53887));t.eventListeners=i["default"];var c=m(n(82566));t.flip=c["default"];var l=m(n(27353));t.hide=l["default"];var d=m(n(99873));t.offset=d["default"];var s=m(n(83662));t.popperOffsets=s["default"];var u=m(n(21031));function m(e){return e&&e.__esModule?e:{"default":e}}t.preventOverflow=u["default"]},99873:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.distanceAndSkiddingToXY=i;var o,r=(o=n(27629))&&o.__esModule?o:{"default":o},a=n(15954);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],d=c[1];return l=l||0,d=(d||0)*i,[a.left,a.right].indexOf(o)>=0?{x:d,y:l}:{x:l,y:d}}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}),{}),d=l[t.placement],s=d.x,u=d.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=s,t.modifiersData.popperOffsets.y+=u),t.modifiersData[o]=l}};t["default"]=c},83662:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(2002))&&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},21031:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(15954),r=h(n(27629)),a=h(n(78772)),i=h(n(16696)),c=n(54444),l=h(n(68349)),d=h(n(55490)),s=h(n(75949)),u=h(n(31686)),m=h(n(22710)),p=n(36291);function h(e){return e&&e.__esModule?e:{"default":e}}var f={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,h=e.name,f=n.mainAxis,C=void 0===f||f,b=n.altAxis,N=void 0!==b&&b,g=n.boundary,V=n.rootBoundary,v=n.altBoundary,_=n.padding,y=n.tether,k=void 0===y||y,x=n.tetherOffset,w=void 0===x?0:x,B=(0,s["default"])(t,{boundary:g,rootBoundary:V,padding:_,altBoundary:v}),L=(0,r["default"])(t.placement),S=(0,u["default"])(t.placement),I=!S,T=(0,a["default"])(L),M=(0,i["default"])(T),A=t.modifiersData.popperOffsets,E=t.rects.reference,P=t.rects.popper,O="function"==typeof w?w(Object.assign({},t.rects,{placement:t.placement})):w,F="number"==typeof O?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),D=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,R={x:0,y:0};if(A){if(C){var j,W="y"===T?o.top:o.left,z="y"===T?o.bottom:o.right,U="y"===T?"height":"width",H=A[T],G=H+B[W],q=H-B[z],K=k?-P[U]/2:0,Y=S===o.start?E[U]:P[U],$=S===o.start?-P[U]:-E[U],X=t.elements.arrow,Q=k&&X?(0,l["default"])(X):{width:0,height:0},J=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:(0,m["default"])(),Z=J[W],ee=J[z],te=(0,c.within)(0,E[U],Q[U]),ne=I?E[U]/2-K-te-Z-F.mainAxis:Y-te-Z-F.mainAxis,oe=I?-E[U]/2+K+te+ee+F.mainAxis:$+te+ee+F.mainAxis,re=t.elements.arrow&&(0,d["default"])(t.elements.arrow),ae=re?"y"===T?re.clientTop||0:re.clientLeft||0:0,ie=null!=(j=null==D?void 0:D[T])?j:0,ce=H+ne-ie-ae,le=H+oe-ie,de=(0,c.within)(k?(0,p.min)(G,ce):G,H,k?(0,p.max)(q,le):q);A[T]=de,R[T]=de-H}if(N){var se,ue="x"===T?o.top:o.left,me="x"===T?o.bottom:o.right,pe=A[M],he="y"===M?"height":"width",fe=pe+B[ue],Ce=pe-B[me],be=-1!==[o.top,o.left].indexOf(L),Ne=null!=(se=null==D?void 0:D[M])?se:0,ge=be?fe:pe-E[he]-P[he]-Ne+F.altAxis,Ve=be?pe+E[he]+P[he]-Ne-F.altAxis:Ce,ve=k&&be?(0,c.withinMaxClamp)(ge,pe,Ve):(0,c.within)(k?ge:fe,pe,k?Ve:Ce);A[M]=ve,R[M]=ve-pe}t.modifiersData[h]=R}},requiresIfExists:["offset"]};t["default"]=f},47952:function(e,t,n){"use strict";t.__esModule=!0,t.defaultModifiers=t.createPopper=void 0;var o=n(21926);t.popperGenerator=o.popperGenerator,t.detectOverflow=o.detectOverflow;var r=l(n(53887)),a=l(n(83662)),i=l(n(54680)),c=l(n(89290));function l(e){return e&&e.__esModule?e:{"default":e}}var d=[r["default"],a["default"],i["default"],c["default"]];t.defaultModifiers=d;var s=(0,o.popperGenerator)({defaultModifiers:d});t.createPopper=s},17827: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(21926);t.popperGenerator=r.popperGenerator,t.detectOverflow=r.detectOverflow;var a=C(n(53887)),i=C(n(83662)),c=C(n(54680)),l=C(n(89290)),d=C(n(99873)),s=C(n(82566)),u=C(n(21031)),m=C(n(71313)),p=C(n(27353)),h=n(47952);t.createPopperLite=h.createPopper;var f=n(4207);function C(e){return e&&e.__esModule?e:{"default":e}}Object.keys(f).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===f[e]||(t[e]=f[e]))}));var b=[a["default"],i["default"],c["default"],l["default"],d["default"],s["default"],u["default"],m["default"],p["default"]];t.defaultModifiers=b;var N=(0,r.popperGenerator)({defaultModifiers:b});t.createPopperLite=t.createPopper=N},2894: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,d=n.rootBoundary,s=n.padding,u=n.flipVariations,m=n.allowedAutoPlacements,p=void 0===m?r.placements:m,h=(0,o["default"])(c),f=h?u?r.variationPlacements:r.variationPlacements.filter((function(e){return(0,o["default"])(e)===h})):r.basePlacements,C=f.filter((function(e){return p.indexOf(e)>=0}));0===C.length&&(C=f);var b=C.reduce((function(t,n){return t[n]=(0,a["default"])(e,{placement:n,boundary:l,rootBoundary:d,padding:s})[(0,i["default"])(n)],t}),{});return Object.keys(b).sort((function(e,t){return b[e]-b[t]}))};var o=c(n(31686)),r=n(15954),a=c(n(75949)),i=c(n(27629));function c(e){return e&&e.__esModule?e:{"default":e}}},2002:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=e.reference,c=e.element,l=e.placement,d=l?(0,o["default"])(l):null,s=l?(0,r["default"])(l):null,u=n.x+n.width/2-c.width/2,m=n.y+n.height/2-c.height/2;switch(d){case i.top:t={x:u,y:n.y-c.height};break;case i.bottom:t={x:u,y:n.y+n.height};break;case i.right:t={x:n.x+n.width,y:m};break;case i.left:t={x:n.x-c.width,y:m};break;default:t={x:n.x,y:n.y}}var p=d?(0,a["default"])(d):null;if(null!=p){var h="y"===p?"height":"width";switch(s){case i.start:t[p]=t[p]-(n[h]/2-c[h]/2);break;case i.end:t[p]=t[p]+(n[h]/2-c[h]/2)}}return t};var o=c(n(27629)),r=c(n(31686)),a=c(n(78772)),i=n(15954);function c(e){return e&&e.__esModule?e:{"default":e}}},27672: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}}},75949:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,m=n.placement,p=void 0===m?e.placement:m,h=n.boundary,f=void 0===h?l.clippingParents:h,C=n.rootBoundary,b=void 0===C?l.viewport:C,N=n.elementContext,g=void 0===N?l.popper:N,V=n.altBoundary,v=void 0!==V&&V,_=n.padding,y=void 0===_?0:_,k=(0,s["default"])("number"!=typeof y?y:(0,u["default"])(y,l.basePlacements)),x=g===l.popper?l.reference:l.popper,w=e.rects.popper,B=e.elements[v?x:g],L=(0,o["default"])((0,d.isElement)(B)?B:B.contextElement||(0,r["default"])(e.elements.popper),f,b),S=(0,a["default"])(e.elements.reference),I=(0,i["default"])({reference:S,element:w,strategy:"absolute",placement:p}),T=(0,c["default"])(Object.assign({},w,I)),M=g===l.popper?T:S,A={top:L.top-M.top+k.top,bottom:M.bottom-L.bottom+k.bottom,left:L.left-M.left+k.left,right:M.right-L.right+k.right},E=e.modifiersData.offset;if(g===l.popper&&E){var P=E[p];Object.keys(A).forEach((function(e){var t=[l.right,l.bottom].indexOf(e)>=0?1:-1,n=[l.top,l.bottom].indexOf(e)>=0?"y":"x";A[e]+=P[n]*t}))}return A};var o=m(n(65647)),r=m(n(25890)),a=m(n(11100)),i=m(n(2002)),c=m(n(73060)),l=n(15954),d=n(79388),s=m(n(11277)),u=m(n(45674));function m(e){return e&&e.__esModule?e:{"default":e}}},45674:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}},80885: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"}},31477: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"}},44214: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"}},31686:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[1]}},36291: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},54220: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]}))}},11277: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(22710))&&o.__esModule?o:{"default":o}},69282: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(15954)},73060: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})}},12459: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}))}},30752:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){e.forEach((function(t){[].concat(Object.keys(t),a).filter((function(e,t,n){return n.indexOf(e)===t})).forEach((function(n){switch(n){case"name":t.name;break;case"enabled":t.enabled;break;case"phase":r.modifierPhases.indexOf(t.phase);break;case"fn":t.fn;break;case"effect":null!=t.effect&&t.effect;break;case"requires":null!=t.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(80885))&&o.__esModule;var o,r=n(15954);var a=["name","enabled","phase","fn","effect","requires","options"]},54444:function(e,t,n){"use strict";t.__esModule=!0,t.within=r,t.withinMaxClamp=function(e,t,n){var o=r(e,t,n);return o>n?n:o};var o=n(36291);function r(e,t,n){return(0,o.max)(e,(0,o.min)(t,n))}},7696:function(e,t,n){"use strict";var o=n(45744),r=n(56279),a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not a function")}},99079:function(e,t,n){"use strict";var o=n(49332),r=n(56279),a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not a constructor")}},3760:function(e,t,n){"use strict";var o=n(45744),r=String,a=TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw a("Can't set "+r(e)+" as a prototype")}},48144:function(e,t,n){"use strict";var o=n(43741),r=n(48525),a=n(92723).f,i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a(c,i,{configurable:!0,value:r(null)}),e.exports=function(e){c[i][e]=!0}},21679:function(e,t,n){"use strict";var o=n(59529).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},41706:function(e,t,n){"use strict";var o=n(76469),r=TypeError;e.exports=function(e,t){if(o(t,e))return e;throw r("Incorrect invocation")}},65522:function(e,t,n){"use strict";var o=n(5484),r=String,a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not an object")}},65167:function(e){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},26974:function(e,t,n){"use strict";var o=n(39125);e.exports=o((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},92574:function(e,t,n){"use strict";var o,r,a,i=n(65167),c=n(77849),l=n(61770),d=n(45744),s=n(5484),u=n(77807),m=n(10374),p=n(56279),h=n(87229),f=n(73e3),C=n(92723).f,b=n(76469),N=n(56997),g=n(44958),V=n(43741),v=n(8220),_=n(48797),y=_.enforce,k=_.get,x=l.Int8Array,w=x&&x.prototype,B=l.Uint8ClampedArray,L=B&&B.prototype,S=x&&N(x),I=w&&N(w),T=Object.prototype,M=l.TypeError,A=V("toStringTag"),E=v("TYPED_ARRAY_TAG"),P="TypedArrayConstructor",O=i&&!!g&&"Opera"!==m(l.opera),F=!1,D={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},R={BigInt64Array:8,BigUint64Array:8},j=function(e){if(!s(e))return!1;var t=m(e);return"DataView"===t||u(D,t)||u(R,t)},W=function(e){if(!s(e))return!1;var t=m(e);return u(D,t)||u(R,t)};for(o in D)(a=(r=l[o])&&r.prototype)?y(a).TypedArrayConstructor=r:O=!1;for(o in R)(a=(r=l[o])&&r.prototype)&&(y(a).TypedArrayConstructor=r);if((!O||!d(S)||S===Function.prototype)&&(S=function(){throw M("Incorrect invocation")},O))for(o in D)l[o]&&g(l[o],S);if((!O||!I||I===T)&&(I=S.prototype,O))for(o in D)l[o]&&g(l[o].prototype,I);if(O&&N(L)!==I&&g(L,I),c&&!u(I,A))for(o in F=!0,C(I,A,{get:function(){return s(this)?this[E]:undefined}}),D)l[o]&&h(l[o],E,o);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:O,TYPED_ARRAY_TAG:F&&E,aTypedArray:function(e){if(W(e))return e;throw M("Target is not a typed array")},aTypedArrayConstructor:function(e){if(d(e)&&(!g||b(S,e)))return e;throw M(p(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n,o){if(c){if(n)for(var r in D){var a=l[r];if(a&&u(a.prototype,e))try{delete a.prototype[e]}catch(i){try{a.prototype[e]=t}catch(d){}}}I[e]&&!n||f(I,e,n?t:O&&w[e]||t,o)}},exportTypedArrayStaticMethod:function(e,t,n){var o,r;if(c){if(g){if(n)for(o in D)if((r=l[o])&&u(r,e))try{delete r[e]}catch(a){}if(S[e]&&!n)return;try{return f(S,e,n?t:O&&S[e]||t)}catch(a){}}for(o in D)!(r=l[o])||r[e]&&!n||f(r,e,t)}},getTypedArrayConstructor:function z(e){var t=N(e);if(s(t)){var n=k(t);return n&&u(n,P)?n.TypedArrayConstructor:z(t)}},isView:j,isTypedArray:W,TypedArray:S,TypedArrayPrototype:I}},10377:function(e,t,n){"use strict";var o=n(61770),r=n(90655),a=n(77849),i=n(65167),c=n(82429),l=n(87229),d=n(60495),s=n(39125),u=n(41706),m=n(94868),p=n(87543),h=n(76124),f=n(29209),C=n(56997),b=n(44958),N=n(94600).f,g=n(92723).f,V=n(8093),v=n(74337),_=n(93182),y=n(48797),k=c.PROPER,x=c.CONFIGURABLE,w=y.get,B=y.set,L="ArrayBuffer",S="DataView",I="Wrong index",T=o.ArrayBuffer,M=T,A=M&&M.prototype,E=o.DataView,P=E&&E.prototype,O=Object.prototype,F=o.Array,D=o.RangeError,R=r(V),j=r([].reverse),W=f.pack,z=f.unpack,U=function(e){return[255&e]},H=function(e){return[255&e,e>>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},q=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},K=function(e){return W(e,23,4)},Y=function(e){return W(e,52,8)},$=function(e,t){g(e.prototype,t,{get:function(){return w(this)[t]}})},X=function(e,t,n,o){var r=h(n),a=w(e);if(r+t>a.byteLength)throw D(I);var i=w(a.buffer).bytes,c=r+a.byteOffset,l=v(i,c,c+t);return o?l:j(l)},Q=function(e,t,n,o,r,a){var i=h(n),c=w(e);if(i+t>c.byteLength)throw D(I);for(var l=w(c.buffer).bytes,d=i+c.byteOffset,s=o(+r),u=0;ute;)(Z=ee[te++])in M||l(M,Z,T[Z]);A.constructor=M}b&&C(P)!==O&&b(P,O);var ne=new E(new M(2)),oe=r(P.setInt8);ne.setInt8(0,2147483648),ne.setInt8(1,2147483649),!ne.getInt8(0)&&ne.getInt8(1)||d(P,{setInt8:function(e,t){oe(this,e,t<<24>>24)},setUint8:function(e,t){oe(this,e,t<<24>>24)}},{unsafe:!0})}else A=(M=function(e){u(this,A);var t=h(e);B(this,{bytes:R(F(t),0),byteLength:t}),a||(this.byteLength=t)}).prototype,P=(E=function(e,t,n){u(this,P),u(e,A);var o=w(e).byteLength,r=m(t);if(r<0||r>o)throw D("Wrong offset");if(r+(n=n===undefined?o-r:p(n))>o)throw D("Wrong length");B(this,{buffer:e,byteLength:n,byteOffset:r}),a||(this.buffer=e,this.byteLength=n,this.byteOffset=r)}).prototype,a&&($(M,"byteLength"),$(E,"buffer"),$(E,"byteLength"),$(E,"byteOffset")),d(P,{getInt8:function(e){return X(this,1,e)[0]<<24>>24},getUint8:function(e){return X(this,1,e)[0]},getInt16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return q(X(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return q(X(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return z(X(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return z(X(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){Q(this,1,e,U,t)},setUint8:function(e,t){Q(this,1,e,U,t)},setInt16:function(e,t){Q(this,2,e,H,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){Q(this,2,e,H,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){Q(this,4,e,G,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){Q(this,4,e,G,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){Q(this,4,e,K,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){Q(this,8,e,Y,t,arguments.length>2?arguments[2]:undefined)}});_(M,L),_(E,S),e.exports={ArrayBuffer:M,DataView:E}},21497:function(e,t,n){"use strict";var o=n(73502),r=n(312),a=n(10950),i=n(33099),c=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),l=a(n),d=r(e,l),s=r(t,l),u=arguments.length>2?arguments[2]:undefined,m=c((u===undefined?l:r(u,l))-s,l-d),p=1;for(s0;)s in n?n[d]=n[s]:i(n,d),d+=p,s+=p;return n}},8093:function(e,t,n){"use strict";var o=n(73502),r=n(312),a=n(10950);e.exports=function(e){for(var t=o(this),n=a(t),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,d=l===undefined?n:r(l,n);d>c;)t[c++]=e;return t}},29074:function(e,t,n){"use strict";var o=n(36249).forEach,r=n(74640)("forEach");e.exports=r?[].forEach:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}},15993:function(e,t,n){"use strict";var o=n(10950);e.exports=function(e,t){for(var n=0,r=o(t),a=new e(r);r>n;)a[n]=t[n++];return a}},49981:function(e,t,n){"use strict";var o=n(9341),r=n(76348),a=n(73502),i=n(63635),c=n(94535),l=n(49332),d=n(10950),s=n(61154),u=n(93247),m=n(52522),p=Array;e.exports=function(e){var t=a(e),n=l(this),h=arguments.length,f=h>1?arguments[1]:undefined,C=f!==undefined;C&&(f=o(f,h>2?arguments[2]:undefined));var b,N,g,V,v,_,y=m(t),k=0;if(!y||this===p&&c(y))for(b=d(t),N=n?new this(b):p(b);b>k;k++)_=C?f(t[k],k):t[k],s(N,k,_);else for(v=(V=u(t,y)).next,N=n?new this:[];!(g=r(v,V)).done;k++)_=C?i(V,f,[g.value,k],!0):g.value,s(N,k,_);return N.length=k,N}},89344:function(e,t,n){"use strict";var o=n(4254),r=n(312),a=n(10950),i=function(e){return function(t,n,i){var c,l=o(t),d=a(l),s=r(i,d);if(e&&n!=n){for(;d>s;)if((c=l[s++])!=c)return!0}else for(;d>s;s++)if((e||s in l)&&l[s]===n)return e||s||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},36249:function(e,t,n){"use strict";var o=n(9341),r=n(90655),a=n(83609),i=n(73502),c=n(10950),l=n(64711),d=r([].push),s=function(e){var t=1==e,n=2==e,r=3==e,s=4==e,u=6==e,m=7==e,p=5==e||u;return function(h,f,C,b){for(var N,g,V=i(h),v=a(V),_=o(f,C),y=c(v),k=0,x=b||l,w=t?x(h,y):n||m?x(h,0):undefined;y>k;k++)if((p||k in v)&&(g=_(N=v[k],k,V),e))if(t)w[k]=g;else if(g)switch(e){case 3:return!0;case 5:return N;case 6:return k;case 2:d(w,N)}else switch(e){case 4:return!1;case 7:d(w,N)}return u?-1:r||s?s:w}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}},93881:function(e,t,n){"use strict";var o=n(10261),r=n(4254),a=n(94868),i=n(10950),c=n(74640),l=Math.min,d=[].lastIndexOf,s=!!d&&1/[1].lastIndexOf(1,-0)<0,u=c("lastIndexOf"),m=s||!u;e.exports=m?function(e){if(s)return o(d,this,arguments)||0;var t=r(this),n=i(t),c=n-1;for(arguments.length>1&&(c=l(c,a(arguments[1]))),c<0&&(c=n+c);c>=0;c--)if(c in t&&t[c]===e)return c||0;return-1}:d},10112:function(e,t,n){"use strict";var o=n(39125),r=n(43741),a=n(64279),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}))}},74640:function(e,t,n){"use strict";var o=n(39125);e.exports=function(e,t){var n=[][e];return!!n&&o((function(){n.call(null,t||function(){return 1},1)}))}},21038:function(e,t,n){"use strict";var o=n(7696),r=n(73502),a=n(83609),i=n(10950),c=TypeError,l=function(e){return function(t,n,l,d){o(n);var s=r(t),u=a(s),m=i(s),p=e?m-1:0,h=e?-1:1;if(l<2)for(;;){if(p in u){d=u[p],p+=h;break}if(p+=h,e?p<0:m<=p)throw c("Reduce of empty array with no initial value")}for(;e?p>=0:m>p;p+=h)p in u&&(d=n(d,u[p],p,s));return d}};e.exports={left:l(!1),right:l(!0)}},74337:function(e,t,n){"use strict";var o=n(312),r=n(10950),a=n(61154),i=Array,c=Math.max;e.exports=function(e,t,n){for(var l=r(e),d=o(t,l),s=o(n===undefined?l:n,l),u=i(c(s-d,0)),m=0;d0;)e[o]=e[--o];o!==a++&&(e[o]=n)}return e},i=function(e,t,n,o){for(var r=t.length,a=n.length,i=0,c=0;i1?arguments[1]:undefined);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!N(this,e)}}),a(p,n?{get:function(e){var t=N(this,e);return t&&t.value},set:function(e,t){return b(this,0===e?0:e,t)}}:{add:function(e){return b(this,e=0===e?0:e,e)}}),u&&o(p,"size",{get:function(){return C(this).size}}),s},setStrong:function(e,t,n){var o=t+" Iterator",r=f(t),a=f(o);d(e,t,(function(e,t){h(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),s(t)}}},81995:function(e,t,n){"use strict";var o=n(90655),r=n(60495),a=n(49632).getWeakData,i=n(65522),c=n(5484),l=n(41706),d=n(47916),s=n(36249),u=n(77807),m=n(48797),p=m.set,h=m.getterFor,f=s.find,C=s.findIndex,b=o([].splice),N=0,g=function(e){return e.frozen||(e.frozen=new V)},V=function(){this.entries=[]},v=function(e,t){return f(e.entries,(function(e){return e[0]===t}))};V.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=C(this.entries,(function(t){return t[0]===e}));return~t&&b(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,o){var s=e((function(e,r){l(e,m),p(e,{type:t,id:N++,frozen:undefined}),r!=undefined&&d(r,e[o],{that:e,AS_ENTRIES:n})})),m=s.prototype,f=h(t),C=function(e,t,n){var o=f(e),r=a(i(t),!0);return!0===r?g(o).set(t,n):r[o.id]=n,e};return r(m,{"delete":function(e){var t=f(this);if(!c(e))return!1;var n=a(e);return!0===n?g(t)["delete"](e):n&&u(n,t.id)&&delete n[t.id]},has:function(e){var t=f(this);if(!c(e))return!1;var n=a(e);return!0===n?g(t).has(e):n&&u(n,t.id)}}),r(m,n?{get:function(e){var t=f(this);if(c(e)){var n=a(e);return!0===n?g(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return C(this,e,t)}}:{add:function(e){return C(this,e,!0)}}),s}}},18291:function(e,t,n){"use strict";var o=n(59450),r=n(61770),a=n(90655),i=n(16851),c=n(73e3),l=n(49632),d=n(47916),s=n(41706),u=n(45744),m=n(5484),p=n(39125),h=n(98994),f=n(93182),C=n(75121);e.exports=function(e,t,n){var b=-1!==e.indexOf("Map"),N=-1!==e.indexOf("Weak"),g=b?"set":"add",V=r[e],v=V&&V.prototype,_=V,y={},k=function(e){var t=a(v[e]);c(v,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(N&&!m(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return N&&!m(e)?undefined:t(this,0===e?0:e)}:"has"==e?function(e){return!(N&&!m(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})};if(i(e,!u(V)||!(N||v.forEach&&!p((function(){(new V).entries().next()})))))_=n.getConstructor(t,e,b,g),l.enable();else if(i(e,!0)){var x=new _,w=x[g](N?{}:-0,1)!=x,B=p((function(){x.has(1)})),L=h((function(e){new V(e)})),S=!N&&p((function(){for(var e=new V,t=5;t--;)e[g](t,t);return!e.has(-0)}));L||((_=t((function(e,t){s(e,v);var n=C(new V,e,_);return t!=undefined&&d(t,n[g],{that:n,AS_ENTRIES:b}),n}))).prototype=v,v.constructor=_),(B||S)&&(k("delete"),k("has"),b&&k("get")),(S||w)&&k(g),N&&v.clear&&delete v.clear}return y[e]=_,o({global:!0,constructor:!0,forced:_!=V},y),f(_,e),N||n.setStrong(_,e,b),_}},35155:function(e,t,n){"use strict";var o=n(77807),r=n(75379),a=n(12488),i=n(92723);e.exports=function(e,t,n){for(var c=r(t),l=i.f,d=a.f,s=0;s"+l+""}},92413:function(e,t,n){"use strict";var o=n(80936).IteratorPrototype,r=n(48525),a=n(20471),i=n(93182),c=n(53481),l=function(){return this};e.exports=function(e,t,n,d){var s=t+" Iterator";return e.prototype=r(o,{next:a(+!d,n)}),i(e,s,!1,!0),c[s]=l,e}},87229:function(e,t,n){"use strict";var o=n(77849),r=n(92723),a=n(20471);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},20471:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},61154:function(e,t,n){"use strict";var o=n(23986),r=n(92723),a=n(20471);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},36849:function(e,t,n){"use strict";var o=n(90655),r=n(39125),a=n(79408).start,i=RangeError,c=Math.abs,l=Date.prototype,d=l.toISOString,s=o(l.getTime),u=o(l.getUTCDate),m=o(l.getUTCFullYear),p=o(l.getUTCHours),h=o(l.getUTCMilliseconds),f=o(l.getUTCMinutes),C=o(l.getUTCMonth),b=o(l.getUTCSeconds);e.exports=r((function(){return"0385-07-25T07:06:39.999Z"!=d.call(new Date(-50000000000001))}))||!r((function(){d.call(new Date(NaN))}))?function(){if(!isFinite(s(this)))throw i("Invalid time value");var e=this,t=m(e),n=h(e),o=t<0?"-":t>9999?"+":"";return o+a(c(t),o?6:4,0)+"-"+a(C(e)+1,2,0)+"-"+a(u(e),2,0)+"T"+a(p(e),2,0)+":"+a(f(e),2,0)+":"+a(b(e),2,0)+"."+a(n,3,0)+"Z"}:d},81990:function(e,t,n){"use strict";var o=n(65522),r=n(2118),a=TypeError;e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw a("Incorrect hint");return r(this,e)}},66384:function(e,t,n){"use strict";var o=n(28859),r=n(92723);e.exports=function(e,t,n){return n.get&&o(n.get,t,{getter:!0}),n.set&&o(n.set,t,{setter:!0}),r.f(e,t,n)}},73e3:function(e,t,n){"use strict";var o=n(45744),r=n(92723),a=n(28859),i=n(58962);e.exports=function(e,t,n,c){c||(c={});var l=c.enumerable,d=c.name!==undefined?c.name:t;return o(n)&&a(n,d,c),c.global?l?e[t]=n:i(t,n):(c.unsafe?e[t]&&(l=!0):delete e[t],l?e[t]=n:r.f(e,t,{value:n,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})),e}},60495:function(e,t,n){"use strict";var o=n(73e3);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},58962:function(e,t,n){"use strict";var o=n(61770),r=Object.defineProperty;e.exports=function(e,t){try{r(o,e,{value:t,configurable:!0,writable:!0})}catch(n){o[e]=t}return t}},11335:function(e,t,n){"use strict";var o=n(59450),r=n(76348),a=n(37249),i=n(82429),c=n(45744),l=n(92413),d=n(56997),s=n(44958),u=n(93182),m=n(87229),p=n(73e3),h=n(43741),f=n(53481),C=n(80936),b=i.PROPER,N=i.CONFIGURABLE,g=C.IteratorPrototype,V=C.BUGGY_SAFARI_ITERATORS,v=h("iterator"),_="keys",y="values",k="entries",x=function(){return this};e.exports=function(e,t,n,i,h,C,w){l(n,t,i);var B,L,S,I=function(e){if(e===h&&P)return P;if(!V&&e in A)return A[e];switch(e){case _:case y:case k:return function(){return new n(this,e)}}return function(){return new n(this)}},T=t+" Iterator",M=!1,A=e.prototype,E=A[v]||A["@@iterator"]||h&&A[h],P=!V&&E||I(h),O="Array"==t&&A.entries||E;if(O&&(B=d(O.call(new e)))!==Object.prototype&&B.next&&(a||d(B)===g||(s?s(B,g):c(B[v])||p(B,v,x)),u(B,T,!0,!0),a&&(f[T]=x)),b&&h==y&&E&&E.name!==y&&(!a&&N?m(A,"name",y):(M=!0,P=function(){return r(E,this)})),h)if(L={values:I(y),keys:C?P:I(_),entries:I(k)},w)for(S in L)(V||M||!(S in A))&&p(A,S,L[S]);else o({target:t,proto:!0,forced:V||M},L);return a&&!w||A[v]===P||p(A,v,P,{name:h}),f[t]=P,L}},89604:function(e,t,n){"use strict";var o=n(62660),r=n(77807),a=n(68438),i=n(92723).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},33099:function(e,t,n){"use strict";var o=n(56279),r=TypeError;e.exports=function(e,t){if(!delete e[t])throw r("Cannot delete property "+o(t)+" of "+o(e))}},77849:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},50842:function(e,t,n){"use strict";var o=n(61770),r=n(5484),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},97989:function(e){"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},13811:function(e,t,n){"use strict";var o=n(42630).match(/firefox\/(\d+)/i);e.exports=!!o&&+o[1]},15904:function(e){"use strict";e.exports="object"==typeof window&&"object"!=typeof Deno},86936:function(e,t,n){"use strict";var o=n(42630);e.exports=/MSIE|Trident/.test(o)},48715:function(e,t,n){"use strict";var o=n(42630),r=n(61770);e.exports=/ipad|iphone|ipod/i.test(o)&&r.Pebble!==undefined},25515:function(e,t,n){"use strict";var o=n(42630);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(o)},67745:function(e,t,n){"use strict";var o=n(61496),r=n(61770);e.exports="process"==o(r.process)},35016:function(e,t,n){"use strict";var o=n(42630);e.exports=/web0s(?!.*chrome)/i.test(o)},42630:function(e,t,n){"use strict";var o=n(54965);e.exports=o("navigator","userAgent")||""},64279:function(e,t,n){"use strict";var o,r,a=n(61770),i=n(42630),c=a.process,l=a.Deno,d=c&&c.versions||l&&l.version,s=d&&d.v8;s&&(r=(o=s.split("."))[0]>0&&o[0]<4?1:+(o[0]+o[1])),!r&&i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=+o[1]),e.exports=r},86778:function(e,t,n){"use strict";var o=n(42630).match(/AppleWebKit\/(\d+)\./);e.exports=!!o&&+o[1]},59096:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},59450:function(e,t,n){"use strict";var o=n(61770),r=n(12488).f,a=n(87229),i=n(73e3),c=n(58962),l=n(35155),d=n(16851);e.exports=function(e,t){var n,s,u,m,p,h=e.target,f=e.global,C=e.stat;if(n=f?o:C?o[h]||c(h,{}):(o[h]||{}).prototype)for(s in t){if(m=t[s],u=e.dontCallGetSet?(p=r(n,s))&&p.value:n[s],!d(f?s:h+(C?".":"#")+s,e.forced)&&u!==undefined){if(typeof m==typeof u)continue;l(m,u)}(e.sham||u&&u.sham)&&a(m,"sham",!0),i(n,s,m,e)}}},39125:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},6531:function(e,t,n){"use strict";n(50044);var o=n(90655),r=n(73e3),a=n(50174),i=n(39125),c=n(43741),l=n(87229),d=c("species"),s=RegExp.prototype;e.exports=function(e,t,n,u){var m=c(e),p=!i((function(){var t={};return t[m]=function(){return 7},7!=""[e](t)})),h=p&&!i((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[d]=function(){return n},n.flags="",n[m]=/./[m]),n.exec=function(){return t=!0,null},n[m](""),!t}));if(!p||!h||n){var f=o(/./[m]),C=t(m,""[e],(function(e,t,n,r,i){var c=o(e),l=t.exec;return l===a||l===s.exec?p&&!i?{done:!0,value:f(t,n,r)}:{done:!0,value:c(n,t,r)}:{done:!1}}));r(String.prototype,e,C[0]),r(s,m,C[1])}u&&l(s[m],"sham",!0)}},23507:function(e,t,n){"use strict";var o=n(98037),r=n(10950),a=n(97989),i=n(9341);e.exports=function c(e,t,n,l,d,s,u,m){for(var p,h=d,f=0,C=!!u&&i(u,m);f0&&o(p)?h=c(e,t,p,r(p),h,s-1)-1:(a(h+1),e[h]=p),h++),f++;return h}},57724:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},10261:function(e,t,n){"use strict";var o=n(14687),r=Function.prototype,a=r.apply,i=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?i.bind(a):function(){return i.apply(a,arguments)})},9341:function(e,t,n){"use strict";var o=n(90655),r=n(7696),a=n(14687),i=o(o.bind);e.exports=function(e,t){return r(e),t===undefined?e:a?i(e,t):function(){return e.apply(t,arguments)}}},14687:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},38349:function(e,t,n){"use strict";var o=n(90655),r=n(7696),a=n(5484),i=n(77807),c=n(53898),l=n(14687),d=Function,s=o([].concat),u=o([].join),m={},p=function(e,t,n){if(!i(m,t)){for(var o=[],r=0;r]*>)/g,s=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,o,u,m){var p=n+e.length,h=o.length,f=s;return u!==undefined&&(u=r(u),f=d),c(m,f,(function(r,c){var d;switch(i(c,0)){case"$":return"$";case"&":return e;case"`":return l(t,0,n);case"'":return l(t,p);case"<":d=u[l(c,1,-1)];break;default:var s=+c;if(0===s)return r;if(s>h){var m=a(s/10);return 0===m?r:m<=h?o[m-1]===undefined?i(c,1):o[m-1]+i(c,1):r}d=o[s-1]}return d===undefined?"":d}))}},61770: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")()},77807:function(e,t,n){"use strict";var o=n(90655),r=n(73502),a=o({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(r(e),t)}},31645:function(e){"use strict";e.exports={}},66791:function(e,t,n){"use strict";var o=n(61770);e.exports=function(e,t){var n=o.console;n&&n.error&&(1==arguments.length?n.error(e):n.error(e,t))}},29093:function(e,t,n){"use strict";var o=n(54965);e.exports=o("document","documentElement")},17041:function(e,t,n){"use strict";var o=n(77849),r=n(39125),a=n(50842);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},29209:function(e){"use strict";var t=Array,n=Math.abs,o=Math.pow,r=Math.floor,a=Math.log,i=Math.LN2;e.exports={pack:function(e,c,l){var d,s,u,m=t(l),p=8*l-c-1,h=(1<>1,C=23===c?o(2,-24)-o(2,-77):0,b=e<0||0===e&&1/e<0?1:0,N=0;for((e=n(e))!=e||e===Infinity?(s=e!=e?1:0,d=h):(d=r(a(e)/i),e*(u=o(2,-d))<1&&(d--,u*=2),(e+=d+f>=1?C/u:C*o(2,1-f))*u>=2&&(d++,u/=2),d+f>=h?(s=0,d=h):d+f>=1?(s=(e*u-1)*o(2,c),d+=f):(s=e*o(2,f-1)*o(2,c),d=0));c>=8;)m[N++]=255&s,s/=256,c-=8;for(d=d<0;)m[N++]=255&d,d/=256,p-=8;return m[--N]|=128*b,m},unpack:function(e,t){var n,r=e.length,a=8*r-t-1,i=(1<>1,l=a-7,d=r-1,s=e[d--],u=127&s;for(s>>=7;l>0;)u=256*u+e[d--],l-=8;for(n=u&(1<<-l)-1,u>>=-l,l+=t;l>0;)n=256*n+e[d--],l-=8;if(0===u)u=1-c;else{if(u===i)return n?NaN:s?-Infinity:Infinity;n+=o(2,t),u-=c}return(s?-1:1)*n*o(2,u-t)}}},83609:function(e,t,n){"use strict";var o=n(90655),r=n(39125),a=n(61496),i=Object,c=o("".split);e.exports=r((function(){return!i("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?c(e,""):i(e)}:i},75121:function(e,t,n){"use strict";var o=n(45744),r=n(5484),a=n(44958);e.exports=function(e,t,n){var i,c;return a&&o(i=t.constructor)&&i!==n&&r(c=i.prototype)&&c!==n.prototype&&a(e,c),e}},44790:function(e,t,n){"use strict";var o=n(90655),r=n(45744),a=n(42878),i=o(Function.toString);r(a.inspectSource)||(a.inspectSource=function(e){return i(e)}),e.exports=a.inspectSource},49632:function(e,t,n){"use strict";var o=n(59450),r=n(90655),a=n(31645),i=n(5484),c=n(77807),l=n(92723).f,d=n(94600),s=n(25586),u=n(65067),m=n(8220),p=n(57724),h=!1,f=m("meta"),C=0,b=function(e){l(e,f,{value:{objectID:"O"+C++,weakData:{}}})},N=e.exports={enable:function(){N.enable=function(){},h=!0;var e=d.f,t=r([].splice),n={};n[f]=1,e(n).length&&(d.f=function(n){for(var o=e(n),r=0,a=o.length;rN;N++)if((V=S(e[N]))&&d(f,V))return V;return new h(!1)}C=s(e,b)}for(v=C.next;!(_=r(v,C)).done;){try{V=S(_.value)}catch(I){m(C,"throw",I)}if("object"==typeof V&&V&&d(f,V))return V}return new h(!1)}},80261:function(e,t,n){"use strict";var o=n(76348),r=n(65522),a=n(36750);e.exports=function(e,t,n){var i,c;r(e);try{if(!(i=a(e,"return"))){if("throw"===t)throw n;return n}i=o(i,e)}catch(l){c=!0,i=l}if("throw"===t)throw n;if(c)throw i;return r(i),n}},80936:function(e,t,n){"use strict";var o,r,a,i=n(39125),c=n(45744),l=n(48525),d=n(56997),s=n(73e3),u=n(43741),m=n(37249),p=u("iterator"),h=!1;[].keys&&("next"in(a=[].keys())?(r=d(d(a)))!==Object.prototype&&(o=r):h=!0),o==undefined||i((function(){var e={};return o[p].call(e)!==e}))?o={}:m&&(o=l(o)),c(o[p])||s(o,p,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:h}},53481:function(e){"use strict";e.exports={}},10950:function(e,t,n){"use strict";var o=n(87543);e.exports=function(e){return o(e.length)}},28859:function(e,t,n){"use strict";var o=n(39125),r=n(45744),a=n(77807),i=n(77849),c=n(82429).CONFIGURABLE,l=n(44790),d=n(48797),s=d.enforce,u=d.get,m=Object.defineProperty,p=i&&!o((function(){return 8!==m((function(){}),"length",{value:8}).length})),h=String(String).split("String"),f=e.exports=function(e,t,n){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||c&&e.name!==t)&&m(e,"name",{value:t,configurable:!0}),p&&n&&a(n,"arity")&&e.length!==n.arity&&m(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?i&&m(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=undefined)}catch(r){}var o=s(e);return a(o,"source")||(o.source=h.join("string"==typeof t?t:"")),e};Function.prototype.toString=f((function(){return r(this)&&u(this).source||l(this)}),"toString")},73346: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){var t=+e;return 0==t?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:t},92647:function(e,t,n){"use strict";var o=n(61303),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),d=a(2,-126);e.exports=Math.fround||function(e){var t,n,a=+e,s=r(a),u=o(a);return sl||n!=n?u*Infinity:u*n}},12153:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},28010:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var n=+e;return n>-1e-8&&n<1e-8?n-n*n/2:t(1+n)}},61303:function(e){"use strict";e.exports=Math.sign||function(e){var t=+e;return 0==t||t!=t?t:t<0?-1:1}},9275:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var o=+e;return(o>0?n:t)(o)}},34063:function(e,t,n){"use strict";var o,r,a,i,c,l,d,s,u=n(61770),m=n(9341),p=n(12488).f,h=n(61777).set,f=n(25515),C=n(48715),b=n(35016),N=n(67745),g=u.MutationObserver||u.WebKitMutationObserver,V=u.document,v=u.process,_=u.Promise,y=p(u,"queueMicrotask"),k=y&&y.value;k||(o=function(){var e,t;for(N&&(e=v.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||N||b||!g||!V?!C&&_&&_.resolve?((d=_.resolve(undefined)).constructor=_,s=m(d.then,d),i=function(){s(o)}):N?i=function(){v.nextTick(o)}:(h=m(h,u),i=function(){h(o)}):(c=!0,l=V.createTextNode(""),new g(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c})),e.exports=k||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},58822:function(e,t,n){"use strict";var o=n(67581);e.exports=o&&!!Symbol["for"]&&!!Symbol.keyFor},67581:function(e,t,n){"use strict";var o=n(64279),r=n(39125);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&o&&o<41}))},37494:function(e,t,n){"use strict";var o=n(61770),r=n(45744),a=n(44790),i=o.WeakMap;e.exports=r(i)&&/native code/.test(a(i))},16002:function(e,t,n){"use strict";var o=n(7696),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)}},96794:function(e,t,n){"use strict";var o=n(71857),r=TypeError;e.exports=function(e){if(o(e))throw r("The method doesn't accept regular expressions");return e}},46329:function(e,t,n){"use strict";var o=n(61770).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},90119:function(e,t,n){"use strict";var o=n(61770),r=n(39125),a=n(90655),i=n(95372),c=n(56404).trim,l=n(93966),d=a("".charAt),s=o.parseFloat,u=o.Symbol,m=u&&u.iterator,p=1/s(l+"-0")!=-Infinity||m&&!r((function(){s(Object(m))}));e.exports=p?function(e){var t=c(i(e)),n=s(t);return 0===n&&"-"==d(t,0)?-0:n}:s},80280:function(e,t,n){"use strict";var o=n(61770),r=n(39125),a=n(90655),i=n(95372),c=n(56404).trim,l=n(93966),d=o.parseInt,s=o.Symbol,u=s&&s.iterator,m=/^[+-]?0x/i,p=a(m.exec),h=8!==d(l+"08")||22!==d(l+"0x16")||u&&!r((function(){d(Object(u))}));e.exports=h?function(e,t){var n=c(i(e));return d(n,t>>>0||(p(m,n)?16:10))}:d},35350:function(e,t,n){"use strict";var o=n(77849),r=n(90655),a=n(76348),i=n(39125),c=n(21417),l=n(41543),d=n(89328),s=n(73502),u=n(83609),m=Object.assign,p=Object.defineProperty,h=r([].concat);e.exports=!m||i((function(){if(o&&1!==m({b:1},m(p({},"a",{enumerable:!0,get:function(){p(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!=m({},e)[n]||c(m({},t)).join("")!=r}))?function(e,t){for(var n=s(e),r=arguments.length,i=1,m=l.f,p=d.f;r>i;)for(var f,C=u(arguments[i++]),b=m?h(c(C),m(C)):c(C),N=b.length,g=0;N>g;)f=b[g++],o&&!a(p,C,f)||(n[f]=C[f]);return n}:m},48525:function(e,t,n){"use strict";var o,r=n(65522),a=n(86328),i=n(59096),c=n(31645),l=n(29093),d=n(50842),s=n(95541),u=s("IE_PROTO"),m=function(){},p=function(e){return"