diff --git a/code/citadel/dogborgstuff.dm b/code/citadel/dogborgstuff.dm index 1323d7d412..ee67fe96a8 100644 --- a/code/citadel/dogborgstuff.dm +++ b/code/citadel/dogborgstuff.dm @@ -111,10 +111,10 @@ var/list/env_gases = environment.gases environment.assert_gases(arglist(GLOB.hardcoded_gases)) - var/o2_concentration = env_gases["o2"][MOLES]/total_moles - var/n2_concentration = env_gases["n2"][MOLES]/total_moles - var/co2_concentration = env_gases["co2"][MOLES]/total_moles - var/plasma_concentration = env_gases["plasma"][MOLES]/total_moles + var/o2_concentration = env_gases[/datum/gas/oxygen][MOLES]/total_moles + var/n2_concentration = env_gases[/datum/gas/nitrogen][MOLES]/total_moles + var/co2_concentration = env_gases[/datum/gas/carbon_dioxide][MOLES]/total_moles + var/plasma_concentration = env_gases[/datum/gas/plasma][MOLES]/total_moles environment.garbage_collect() if(abs(n2_concentration - N2STANDARD) < 20) @@ -321,8 +321,8 @@ //Sleeper /obj/item/device/dogborg/sleeper - name = "Medbelly" - desc = "Equipment for medical hound. A mounted sleeper that stabilizes patients and can inject reagents in the borg's reserves." + name = "hound sleeper" + desc = "nothing should see this." icon = 'icons/mob/dogborg.dmi' icon_state = "sleeper" w_class = WEIGHT_CLASS_TINY @@ -330,12 +330,38 @@ var/mob/living/silicon/robot/hound = null var/inject_amount = 10 var/min_health = -100 - var/cleaning = 0 + var/cleaning = FALSE + var/cleaning_cycles = 10 var/patient_laststat = null - var/mob_energy = 30000 //Energy gained from digesting mobs (including PCs) - var/list/injection_chems = list("antitoxin", "morphine", "salbutamol", "bicaridine", "kelotane"), + var/list/injection_chems = list("antitoxin", "epinephrine", "morphine", "salbutamol", "bicaridine", "kelotane") var/eject_port = "ingestion" - var/list/items_preserved = list() + var/escape_in_progress = FALSE + var/message_cooldown + var/breakout_time = 300 + var/list/items_preserved = list( + /obj/item/hand_tele, + /obj/item/card/id, + /obj/item/device/pda, + /obj/item/device/aicard, + /obj/item/gun, + /obj/item/pinpointer, + /obj/item/clothing/shoes/magboots, + /obj/item/clothing/head/helmet/space, + /obj/item/clothing/suit/space, + /obj/item/reagent_containers/hypospray/CMO, + /obj/item/tank/jetpack/oxygen/captain, + /obj/item/clothing/accessory/medal/gold/captain, + /obj/item/clothing/suit/armor, + /obj/item/documents, + /obj/item/nuke_core, + /obj/item/nuke_core_container, + /obj/item/areaeditor/blueprints, + /obj/item/documents/syndicate, + /obj/item/disk/nuclear, + /obj/item/bombcore, + /obj/item/grenade + ) + var/list/important_items = list( /obj/item/hand_tele, /obj/item/card/id/captains_spare, @@ -356,10 +382,12 @@ /obj/item/documents/syndicate, /obj/item/disk/nuclear, /obj/item/bombcore, - /obj/item/grenade) + /obj/item/grenade + ) /obj/item/device/dogborg/sleeper/New() ..() + update_icon() flags_1 |= NOBLUDGEON_1 //No more attack messages /obj/item/device/dogborg/sleeper/Exit(atom/movable/O) @@ -371,16 +399,13 @@ return if(!ishuman(target)) return - if(!target.devourable) - to_chat(user, "This person is incompatible with our equipment.") - return if(target.buckled) to_chat(user, "The user is buckled and can not be put into your [src.name].") return if(patient) to_chat(user, "Your [src.name] is already occupied.") return - user.visible_message("[hound.name] is ingesting [target.name] into their [src.name].", "You start ingesting [target] into your [src]...") + user.visible_message("[hound.name] is carefully inserting [target.name] into their [src.name].", "You start placing [target] into your [src]...") if(!patient && ishuman(target) && !target.buckled && do_after (user, 50, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. @@ -389,18 +414,42 @@ if(patient) return //If you try to eat two people at once, you can only eat one. else //If you don't have someone in you, proceed. + if(!isslimeperson(target) && ("toxin" in injection_chems)) + injection_chems -= "toxin" + injection_chems += "antitoxin" + if(isslimeperson(target) && !("toxin" in injection_chems)) + injection_chems -= "antitoxin" + injection_chems += "toxin" target.forceMove(src) target.reset_perspective(src) - update_patient() + update_gut() START_PROCESSING(SSobj, src) - user.visible_message("[hound.name]'s medical pod lights up as [target.name] slips inside into their [src.name].", "Your medical pod lights up as [target] slips into your [src]. Life support functions engaged.") + user.visible_message("[hound.name]'s medical pod lights up and expands as [target.name] slips inside into their [src.name].", "Your medical pod lights up as [target] slips into your [src]. Life support functions engaged.") message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])") playsound(hound, 'sound/effects/bin_close.ogg', 100, 1) +/obj/item/device/dogborg/sleeper/container_resist(mob/living/user) + hound = loc + user.changeNext_move(CLICK_CD_BREAKOUT) + user.last_special = world.time + CLICK_CD_BREAKOUT + if(user.a_intent == INTENT_HELP) + return + user.visible_message("You see [user] kicking against the expanded material of [hound.name]'s gut!", \ + "You struggle inside [src], kicking the release with your foot... (this will take about [DisplayTimeText(breakout_time)].)", \ + "You hear a thump from [hound.name].") + if(do_after(user, breakout_time, target = src)) + if(!user || user.stat != CONSCIOUS || user.loc != src ) + return + user.visible_message("[user] successfully broke out of [hound.name]!", \ + "You successfully break out of [hound.name]!") + go_out() + /obj/item/device/dogborg/sleeper/proc/go_out(var/target) hound = src.loc + testing("go_out activated") + hound.setClickCooldown(50) if(length(contents) > 0) - hound.visible_message("[hound.name] empties out their contents via their [eject_port] port.", "You empty your contents via your [eject_port] port.") + hound.visible_message("[hound.name] empties out their contents via their release port.", "You empty your contents via your release port.") if(target) if(ishuman(target)) var/mob/living/carbon/human/person = target @@ -419,199 +468,103 @@ var/obj/T = C T.loc = hound.loc items_preserved.Cut() - cleaning = 0 + update_gut() + cleaning = FALSE playsound(loc, 'sound/effects/splat.ogg', 50, 1) - update_patient() + else //You clicked eject with nothing in you, let's just reset stuff to be sure. items_preserved.Cut() - cleaning = 0 - update_patient() - -/obj/item/device/dogborg/sleeper/proc/drain(var/amt = 3) //Slightly reduced cost (before, it was always injecting inaprov) - if (amt > 0) - hound.cell.give(amt) - else - hound.cell.use(amt) + cleaning = FALSE + hound.visible_message("[hound.name] belches, torso flexing.") + update_gut() /obj/item/device/dogborg/sleeper/attack_self(mob/user) if(..()) return - sleeperUI(user) + ui_interact(user) -/obj/item/device/dogborg/sleeper/proc/sleeperUI(mob/user) - var/dat - dat += "

Injector

" +/obj/item/device/dogborg/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - if(patient && !(patient.stat & DEAD)) - dat += "Inject Epinephrine" - else - dat += "Inject Epinephrine" - if(patient && patient.health > min_health) - for(var/re in injection_chems) - var/datum/reagent/C = GLOB.chemical_reagents_list[re] - if(C) - dat += "
Inject [C.name]" - else - for(var/re in injection_chems) - var/datum/reagent/C = GLOB.chemical_reagents_list[re] - if(C) - dat += "
Inject [C.name]" + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "dogborg_sleeper", name, 375, 550, master_ui, state) + ui.open() - dat += "

Sleeper Status

" - dat += "Refresh" - dat += "Eject All" - dat += "Eject port: [eject_port]" - if(!cleaning) - dat += "Self-Clean" - else - dat += "Self-Clean" +/obj/item/device/dogborg/sleeper/ui_data() + var/list/data = list() + data["occupied"] = patient ? 1 : 0 - dat += "
" - - //Cleaning and there are still un-preserved items if(cleaning && length(contents - items_preserved)) - dat += "Self-cleaning mode. [length(contents - items_preserved)] object(s) remaining.
" + data["items"] = "Self-cleaning mode active: [length(contents - items_preserved)] object(s) remaining." + data["cleaning"] = cleaning + if(injection_chems != null) + data["chem"] = list() + for(var/chem in injection_chems) + var/datum/reagent/R = GLOB.chemical_reagents_list[chem] + data["chem"] += list(list("name" = R.name, "id" = R.id)) - //There are no items to be processed other than un-preserved items - else if(cleaning && length(items_preserved)) - dat += "Self-cleaning done. Eject remaining objects now.
" + data["occupant"] = list() + var/mob/living/mob_occupant = patient + if(mob_occupant) + data["occupant"]["name"] = mob_occupant.name + switch(mob_occupant.stat) + if(CONSCIOUS) + data["occupant"]["stat"] = "Conscious" + data["occupant"]["statstate"] = "good" + if(SOFT_CRIT) + data["occupant"]["stat"] = "Conscious" + data["occupant"]["statstate"] = "average" + if(UNCONSCIOUS) + data["occupant"]["stat"] = "Unconscious" + data["occupant"]["statstate"] = "average" + if(DEAD) + data["occupant"]["stat"] = "Dead" + data["occupant"]["statstate"] = "bad" + data["occupant"]["health"] = mob_occupant.health + data["occupant"]["maxHealth"] = mob_occupant.maxHealth + data["occupant"]["minHealth"] = HEALTH_THRESHOLD_DEAD + data["occupant"]["bruteLoss"] = mob_occupant.getBruteLoss() + data["occupant"]["oxyLoss"] = mob_occupant.getOxyLoss() + data["occupant"]["toxLoss"] = mob_occupant.getToxLoss() + data["occupant"]["fireLoss"] = mob_occupant.getFireLoss() + data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss() + data["occupant"]["brainLoss"] = mob_occupant.getBrainLoss() + data["occupant"]["reagents"] = list() + if(mob_occupant.reagents.reagent_list.len) + for(var/datum/reagent/R in mob_occupant.reagents.reagent_list) + data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume)) + return data - //Preserved items count when the list is populated - if(length(items_preserved)) - dat += "[length(items_preserved)] uncleanable object(s).
" - - if(!patient) - dat += "Sleeper Unoccupied" - else - dat += "[patient.name] => " - - switch(patient.stat) - if(0) - dat += "Conscious" - if(1) - dat += "Unconscious" - else - dat += "DEAD" - - var/healthcolor = (patient.health > 0 ? "color:white;" : "color:red;") - var/brutecolor = (patient.getBruteLoss() < 60 ? "color:gray;" : "color:red;") - var/o2color = (patient.getOxyLoss() < 60 ? "color:gray;" : "color:red;") - var/toxcolor = (patient.getToxLoss() < 60 ? "color:gray;" : "color:red;") - var/burncolor = (patient.getFireLoss() < 60 ? "color:gray;" : "color:red;") - - dat += "\t-Overall Health %: [round(patient.health)]
" - dat += "\t-Brute Damage %: [patient.getBruteLoss()]
" - dat += "\t-Respiratory Damage %: [patient.getOxyLoss()]
" - dat += "\t-Toxin Content %: [patient.getToxLoss()]
" - dat += "\t-Burn Severity %: [patient.getFireLoss()]
" - - if(patient.getBrainLoss()) - dat += "
Significant brain damage detected.

" - if(patient.getCloneLoss()) - dat += "
Patient may be improperly cloned.

" - if(patient.reagents.reagent_list.len) - for(var/datum/reagent/R in patient.reagents.reagent_list) - dat += "
[R.name]:
[round(R.volume, 0.1)] units

" - dat += "
" - - var/datum/browser/popup = new(user, "sleeper", "Sleeper Console", 520, 540) //Set up the popup browser window - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.set_content(dat) - popup.open() - return - - -/obj/item/device/dogborg/sleeper/Topic(href, href_list) - if(..() || usr == patient) - return - usr.set_machine(src) - if(href_list["refresh"]) - update_patient() - src.updateUsrDialog() - sleeperUI(usr) - return - if(href_list["eject"]) - go_out() - sleeperUI(usr) - return - if(href_list["clean"]) - if(!cleaning) - var/confirm = alert(usr, "You are about to engage self-cleaning mode. This will fill your [src] with caustic enzymes to remove any objects or biomatter, and convert them into energy. Are you sure?", "Confirmation", "Self-Clean", "Cancel") - if(confirm == "Self-Clean") - if(cleaning) - return - else - cleaning = 1 - drain(500) - START_PROCESSING(SSobj, src) - sleeperUI(usr) - if(patient) - to_chat(patient, "[hound.name]'s [src.name] fills with caustic enzymes around you!") - return - if(cleaning) - sleeperUI(usr) - return - if(href_list["port"]) - switch(eject_port) - if("ingestion") - eject_port = "disposal" - if("disposal") - eject_port = "ingestion" - sleeperUI(usr) +/obj/item/device/dogborg/sleeper/ui_act(action, params) + if(..()) return - if(patient && !(patient.stat & DEAD)) - if(href_list["inject"] == "epinephrine" || patient.health > min_health) - inject_chem(usr, href_list["inject"]) - else - to_chat(usr, "ERROR: Subject is not in stable condition for injections.") - else - to_chat(usr,"ERROR: Subject cannot metabolise chemicals.") - - src.updateUsrDialog() - sleeperUI(usr) //Needs a callback to boop the page to refresh. - return - -/obj/item/device/dogborg/sleeper/proc/inject_chem(mob/user, chem) - if(patient && patient.reagents) - if(chem in injection_chems + "epinephrine") - if(hound.cell.charge < 800) //This is so borgs don't kill themselves with it. - to_chat(hound, "You don't have enough power to synthesize fluids.") + switch(action) + if("eject") + go_out() + . = TRUE + if("inject") + var/chem = params["chem"] + if(!patient) return - else if(patient.reagents.get_reagent_amount(chem) + 10 >= 20) //Preventing people from accidentally killing themselves by trying to inject too many chemicals! - to_chat(hound, "Your stomach is currently too full of fluids to secrete more fluids of this kind.") - else if(patient.reagents.get_reagent_amount(chem) + 10 <= 20) //No overdoses for you - patient.reagents.add_reagent(chem, inject_amount) - drain(750) //-750 charge per injection - var/units = round(patient.reagents.get_reagent_amount(chem)) - to_chat(hound, "Injecting [units] unit\s of [injection_chems[chem]] into occupant.") //If they were immersed, the reagents wouldn't leave with them. - -/obj/item/device/dogborg/sleeper/process() - - if(cleaning) //We're cleaning, return early after calling this as we don't care about the patient. - src.clean_cycle() - return - - if(patient) //We're caring for the patient. Medical emergency! Or endo scene. - update_patient() - if(patient.health < 0) - patient.adjustOxyLoss(-1) //Heal some oxygen damage if they're in critical condition - patient.updatehealth() - patient.AdjustStun(-80) - patient.AdjustKnockdown(-80) - patient.AdjustUnconscious(-80) - src.drain() - if((patient.reagents.get_reagent_amount("epinephrine") < 5) && (patient.health < patient.maxHealth)) //Stop pumping full HP people full of drugs. Don't heal people you're digesting, meanie. - patient.reagents.add_reagent("epinephrine", 5) - return - - if(!patient && !cleaning) //We think we're done working. - if(!update_patient()) //One last try to find someone - STOP_PROCESSING(SSobj, src) - return - -/obj/item/device/dogborg/sleeper/proc/update_patient() + inject_chem(chem) + . = TRUE + if("cleaning") + testing("cleaning attempted") + if(!contents) + testing("cleaning has no contents") + to_chat(src, "Your [src] is already cleaned.") + return + if(patient) + to_chat(patient, "[hound.name]'s [src.name] fills with caustic enzymes around you!") + testing("clean_cycle activated") + to_chat(src, "Cleaning process enabled.") + clean_cycle() + . = TRUE +/obj/item/device/dogborg/sleeper/proc/update_gut() + testing("update_gut proc fired") //Well, we HAD one, what happened to them? if(patient in contents) if(patient_laststat != patient.stat) @@ -661,7 +614,7 @@ //Gurgleborg process /obj/item/device/dogborg/sleeper/proc/clean_cycle() - + testing("clean_cycle activated") //Sanity? Maybe not required. More like if indigestible person OOC escapes. for(var/I in items_preserved) if(!(I in contents)) @@ -669,24 +622,10 @@ var/list/touchable_items = contents - items_preserved - //Belly is entirely empty - if(!length(contents)) - to_chat(hound, "Your [src.name] is now clean. Ending self-cleaning cycle.") - cleaning = 0 - update_patient() - return - - //sound effects - for(var/mob/living/M in contents) - if(prob(20)) - M.stop_sound_channel(CHANNEL_PRED) - playsound(get_turf(hound),"digest_pred",75,0,-6,0,channel=CHANNEL_PRED) - M.stop_sound_channel(CHANNEL_PRED) - M.playsound_local("digest_prey",60) - - //If the timing is right, and there are items to be touched - if(SSmobs.times_fired%6==1 && length(touchable_items)) - + if(cleaning_cycles) + testing("clean_cycle being used") + cleaning_cycles-- + cleaning = TRUE //Burn all the mobs or add them to the exclusion list for(var/mob/living/carbon/human/T in (touchable_items)) if((T.status_flags & GODMODE) || !T.digestable) @@ -694,7 +633,29 @@ else T.adjustBruteLoss(2) T.adjustFireLoss(3) - src.update_patient() + update_gut() + addtimer(CALLBACK(src, .proc/clean_cycle), 50) + else + testing("clean_cycle resetted") + cleaning_cycles = initial(cleaning_cycles) + cleaning = FALSE + update_gut() + to_chat(hound, "Your [src.name] chimes it ends its self-cleaning cycle.")//Belly is entirely empty + + if(!length(contents)) + to_chat(hound, "Your [src.name] is now clean. Ending self-cleaning cycle.") + cleaning = FALSE + update_gut() + return + + //sound effects + for(var/mob/living/M in contents) + if(prob(50)) + M.stop_sound_channel(CHANNEL_PRED) + playsound(get_turf(hound),"digest_pred",75,0,-6,0,channel=CHANNEL_PRED) + M.stop_sound_channel(CHANNEL_PRED) + M.playsound_local("digest_prey",60) + //Pick a random item to deal with (if there are any) var/atom/target = pick(touchable_items) @@ -704,17 +665,17 @@ var/mob/living/carbon/human/T = target //Mob is now dead - if(T.stat & DEAD && T.digestable) + if(T.stat == DEAD && T.digestable) message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])") to_chat(hound,"You feel your belly slowly churn around [T], breaking them down into a soft slurry to be used as power for your systems.") to_chat(T,"You feel [hound]'s belly slowly churn around your form, breaking you down into a soft slurry to be used as power for [hound]'s systems.") - src.drain(-30000) //Fueeeeellll + src.hound.cell.give(30000) //Fueeeeellll T.stop_sound_channel(CHANNEL_PRED) playsound(get_turf(hound),"death_pred",50,0,-6,0,channel=CHANNEL_PRED) T.stop_sound_channel(CHANNEL_PRED) T.playsound_local("death_prey",60) qdel(T) - src.update_patient() + src.update_gut() //Handle the target being anything but a /mob/living/carbon/human else @@ -727,38 +688,40 @@ //If the object is not one to preserve else - //Special case for PDAs as they are dumb. TODO fix Del on PDAs to be less dumb. - if (istype(T, /obj/item/device/pda)) - var/obj/item/device/pda/PDA = T - if (PDA.id) - PDA.id.forceMove(src) - PDA.id = null - qdel(T) + qdel(T) + src.update_gut() + src.hound.cell.give(10) + return - //Special case for IDs to make them digested - //else if (istype(T, /obj/item/card/id)) - //var/obj/item/card/id/ID = T - //ID.digest() //Need the digest proc, first. - - //Anything not perserved, PDA, or ID - else - //Spill(T) //Needs the spill proc to be added - qdel(T) - src.update_patient() - src.hound.cell.give(30) //10 charge? that was such a practically nonexistent number it hardly gave any purpose for this bit :v *cranks up* +/obj/item/device/dogborg/sleeper/proc/inject_chem(chem) + testing("inject chem triggered, checking power") + if(hound.cell.charge <= 800) //This is so borgs don't kill themselves with it. Remember, 750 charge used every injection. + to_chat(hound, "You don't have enough power to synthesize fluids.") return + testing("Has power, checking for overdose") + if(patient.reagents.get_reagent_amount(chem) + 10 >= 20) //Preventing people from accidentally killing themselves by trying to inject too many chemicals! + to_chat(hound, "Your stomach is currently too full of fluids to secrete more fluids of this kind.") + return + testing("isn't overdosing, attempting to add_reagent") + patient.reagents.add_reagent(chem, 10) + testing("add_reagent") + src.hound.cell.use(750) //-750 charge per injection + testing("draining power") + var/units = round(patient.reagents.get_reagent_amount(chem)) + to_chat(hound, "Injecting [units] unit\s of [chem] into occupant.") //If they were immersed, the reagents wouldn't leave with them. - -/obj/item/device/dogborg/sleeper/container_resist() - if(prob(8)) - go_out() +/obj/item/device/dogborg/sleeper/medihound //Medihound sleeper + name = "Mobile Sleeper" + desc = "Equipment for medical hound. A mounted sleeper that stabilizes patients and can inject reagents in the borg's reserves." + icon = 'icons/mob/dogborg.dmi' + icon_state = "sleeper" /obj/item/device/dogborg/sleeper/K9 //The K9 portabrig name = "Mobile Brig" desc = "Equipment for a K9 unit. A mounted portable-brig that holds criminals." icon = 'icons/mob/dogborg.dmi' icon_state = "sleeperb" - inject_amount = 10 + inject_amount = 0 min_health = -100 injection_chems = null //So they don't have all the same chems as the medihound! @@ -791,7 +754,7 @@ return //If they moved away, you can't eat them. brigman.forceMove(src) brigman.reset_perspective(src) - update_patient() + update_gut() START_PROCESSING(SSobj, src) user.visible_message("[hound.name]'s mobile brig clunks in series as [brigman] slips inside.", "Your mobile brig groans lightly as [brigman] slips inside.") playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) // Really don't need ERP sound effects for robots @@ -803,9 +766,9 @@ desc = "A mounted garbage compactor unit with fuel processor." icon = 'icons/mob/dogborg.dmi' icon_state = "compactor" - inject_amount = 10 + inject_amount = 0 min_health = -100 - injection_chems = null //So they don't have all the same chems as the medihound! + injection_chems = null var/max_item_count = 48 /obj/item/storage/attackby(obj/item/device/dogborg/sleeper/compactor, mob/user, proximity) //GIT CIRCUMVENTED YO! @@ -828,7 +791,7 @@ if(target_obj.type in important_items) to_chat(user,"\The [target] registers an error code to your [src.name]") return - if(target_obj.w_class > WEIGHT_CLASS_SMALL) + if(target_obj.w_class > WEIGHT_CLASS_NORMAL) to_chat(user,"\The [target] is too large to fit into your [src.name]") return user.visible_message("[hound.name] is ingesting [target.name] into their [src.name].", "You start ingesting [target] into your [src.name]...") @@ -860,7 +823,7 @@ return //If they moved away, you can't eat them. trashman.forceMove(src) trashman.reset_perspective(src) - update_patient() + update_gut() START_PROCESSING(SSobj, src) user.visible_message("[hound.name]'s garbage processor groans lightly as [trashman] slips inside.", "Your garbage compactor groans lightly as [trashman] slips inside.") playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) @@ -917,6 +880,7 @@ return if(cell.charge <= 500) + to_chat(src,"Insufficent reserves for jump actuators!") return else diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e2a257e0ce..a17dbd6f75 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -59,6 +59,8 @@ return ONE_ATMOSPHERE if(ismob(loc)) return ONE_ATMOSPHERE + if(istype(loc, /obj/item/device/dogborg/sleeper)) + return ONE_ATMOSPHERE else return pressure @@ -133,6 +135,12 @@ /mob/living/carbon/human/proc/get_thermal_protection() var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures + + if(istype(loc, /obj/item/device/dogborg/sleeper)) + return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + if(ismob(loc)) + return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + if(wear_suit) if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT) thermal_protection += (wear_suit.max_heat_protection_temperature*0.7) @@ -244,7 +252,9 @@ if(dna && (RESISTCOLD in dna.species.species_traits)) return 1 - + + if(istype(loc, /obj/item/device/dogborg/sleeper)) + return 1 //freezing to death in sleepers ruins fun. if(ismob(loc)) return 1 //because lazy and being inside somemone insulates you from space diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 6df7717327..e3d179b3ff 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -387,9 +387,9 @@ /obj/item/device/analyzer/nose, /obj/item/soap/tongue, /obj/item/device/healthanalyzer, - /obj/item/device/dogborg/sleeper, + /obj/item/device/dogborg/sleeper/medihound, /obj/item/twohanded/shockpaddles/hound, - /obj/item/reagent_containers/borghypo, + /obj/item/stack/medical/gauze/cyborg, /obj/item/device/sensor_device) emag_modules = list(/obj/item/dogborg/pounce) ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical, diff --git a/code/modules/vore/eating/belly_vr.dm b/code/modules/vore/eating/belly_vr.dm index 4262d9fecd..986e6aad5a 100644 --- a/code/modules/vore/eating/belly_vr.dm +++ b/code/modules/vore/eating/belly_vr.dm @@ -137,6 +137,7 @@ M.forceMove(owner.loc) // Move the belly contents into the same location as belly's owner. M << sound(null, repeat = 0, wait = 0, volume = 80, channel = CHANNEL_PREYLOOP) src.internal_contents.Remove(M) // Remove from the belly contents + var/datum/belly/B = check_belly(owner) if(B) B.internal_contents.Add(M) @@ -394,6 +395,19 @@ if(!silent) for(var/mob/hearer in range(1,owner)) hearer << sound(target.vore_sound,volume=80) +/* +//Handles creation of temporary 'vore chest' upon digestion +/datum/belly/proc/slimy_mass(var/obj/item/content, var/mob/living/M) + if(!content in internal_contents) + return + internal_contents += new /obj/structure/closet/crate/vore(src) + internal_contents.Remove(content) + M.transferItemToLoc(content, /obj/structure/closet/crate/vore) + if(!M.transferItemToLoc(W)) + qdel(W) + +/datum/belly/proc/regurgitate_items(var/obj/structure/closet/crate/vore/C) + */ // Belly copies and then returns the copy // Needs to be updated for any var changes diff --git a/code/modules/vore/eating/voreitems.dm b/code/modules/vore/eating/voreitems.dm new file mode 100644 index 0000000000..1215605eac --- /dev/null +++ b/code/modules/vore/eating/voreitems.dm @@ -0,0 +1,22 @@ +/obj/item/restraints/handcuffs/cable/vorecuffs + name = "vorecuffs" + desc = "Because Poojawa is at a loss for actually making people stop being muppets during vore." + icon_state = "vorecuffs" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + materials = list() + breakouttime = 20 //Deciseconds = 2s + trashtype = /obj/item/restraints/handcuffs/cable/vorecuffs/used + +/obj/item/restraints/handcuffs/cable/vorecuffs/used + desc = "You don't see this coder related vore trick." + icon_state = "vorecuffs_used" + item_state = "vorecuffs" + +/obj/item/restraints/handcuffs/cable/vorecuffs/used/attack() + return + +/obj/structure/closet/crate/vore + name = "Slimy ooze" + desc = "A mass of ooze, with something within" + icon_state = "vore_ooze" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 47232862f4..abe6393744 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,17 +1,17 @@ -require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(i)return i(o,!0);var p=Error("Cannot find module '"+o+"'");throw p.code="MODULE_NOT_FOUND",p}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?p[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-u,o-s),f=1;for(s>u&&u+l>s&&(f=-1,u+=l-1,s+=l-1);l-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,u=r(s>1?o[1]:void 0,n),p=s>2?o[2]:void 0,c=void 0===p?n:r(p,n);c>u;)e[u++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,u=a(e),p=r(u.length),c=i(o,p);if(t&&n!=n){for(;p>c;)if(s=u[c++],s!=s)return!0}else for(;p>c;c++)if((t||c in u)&&u[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,u=3==t,p=4==t,c=6==t,l=5==t||c;return function(f,d,h){for(var m,v,g=i(f),b=r(g),y=a(d,h,3),x=o(b.length),_=0,w=e?s(f,x):n?s(f,0):void 0;x>_;_++)if((l||_ in b)&&(m=b[_],v=y(m,_,g),t))if(e)w[_]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(p)return!1;return c?-1:u||p?p:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),u=t(18),p=t(27),c=t(42),l=t(44),f=t(82)("id"),d=t(30),h=t(38),m=t(65),v=t(19),g=Object.isExtensible||h,b=v?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";r(t,f,++y)}return"O"+t[f]},_=function(t,e){var n,a=x(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&p(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return u(this[b])}}),c},def:function(t,e,n){var a,r,i=_(t,e);return i?i.v=n:(t._l=i={i:r=x(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:_,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),u=t(27),p=t(8),c=t(30),l=t(82)("weak"),f=Object.isExtensible||o,d=p(5),h=p(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&u(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return f(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),u=t(69),p=t(38),c=t(24),l=t(43),f=t(66);e.exports=function(t,e,n,d,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,x={},_=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!p(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,E=k[b](m?{}:-0,1)!=k,S=c(function(){k.has(1)}),C=l(function(t){new g(t)});C||(g=e(function(e,n){u(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),x[t]=g,r(r.G+r.W+r.F*(g!=v),x),m||d.setStrong(g,t,h),g}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),u="prototype",p=function(t,e,n){var c,l,f,d,h=t&p.F,m=t&p.G,v=t&p.S,g=t&p.P,b=t&p.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[u],x=m?r:r[e]||(r[e]={}),_=x[u]||(x[u]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,f=(l?y:n)[c],d=b&&l?s(f,a):g&&"function"==typeof f?s(Function.call,f):f,y&&!l&&o(y,c,f),x[c]!=f&&i(x,c,d),g&&_[c]!=f&&(_[c]=f)};a.core=r,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,e.exports=p},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var u=s(t),p=""[t];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,u,p)),a(RegExp.prototype,u,2==e?function(t,e){return p.call(t,this,e)}:function(t){return p.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),u=t(84);e.exports=function(t,e,n,p){var c,l,f,d=u(t),h=a(n,p,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(i(d))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(f=d.call(t);!(l=f.next()).done;)r(f,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),u=t(45),p=t(41),c=t(66),l=t(46).getProto,f=t(83)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,x,_){p(n,e,b);var w,k,E=function(t){if(!d&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",C=y==v,P=!1,A=t.prototype,O=A[f]||A[h]||y&&A[y],T=O||E(y);if(O){var R=l(T.call(new t));c(R,S,!0),!a&&s(A,h)&&o(R,f,g),C&&O.name!==v&&(P=!0,T=function(){return O.call(this)})}if(a&&!_||!d&&!P&&A[f]||o(A,f,T),u[e]=T,u[S]=g,y)if(w={values:C?T:E(v),keys:x?T:E(m),entries:C?E("entries"):T},_)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(d||P),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,u=0;s>u;)if(i[n=o[u++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,u=o.MutationObserver||o.WebKitMutationObserver,p=o.process,c=o.Promise,l="process"==t(11)(p),f=function(){var t,e,n;for(l&&(t=p.domain)&&(p.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){p.nextTick(f)};else if(u){var d=1,h=document.createTextNode("");new u(f).observe(h,{characterData:!0}),i=function(){h.data=d=-d}}else i=c&&c.resolve?function(){c.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&p.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,u=1,p=a.getKeys,c=a.getSymbols,l=a.isEnum;s>u;)for(var f,d=i(o[u++]),h=c?p(d).concat(c(d)):p(d),m=h.length,v=0;m>v;)l.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),u=s.length,p=0,c=[];u>p;)i.call(o,n=s[p++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var a,i=this,o=arguments,p=o.length,c=0,l=0;if(!u&&!p)return r(t,n,i);if(a=n.slice(),u)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;p>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",u=a(n),p=s.length;return 0>u||u>=p?t?"":void 0:(i=s.charCodeAt(u),55296>i||i>56319||u+1===p||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",u=s.length,p=void 0===n?" ":n+"",c=a(e);if(u>=c)return s;""==p&&(p=" ");var l=c-u,f=r.call(p,Math.ceil(l/p.length));return f.length>l&&(f=f.slice(0,l)),o?f+s:s+f}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r  ᠎              \u2028\u2029\ufeff",s="["+o+"]",u="​…",p=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(f),a(a.P+a.F*i(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(p,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),u=t(32),p=t(20),c=t(29),l=c.process,f=c.setImmediate,d=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},d=function(t){delete v[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in p("script")?function(t){u.appendChild(p("script"))[g]=function(){u.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),u=t(32),p=t(20),c=t(30),l=t(11),f=t(33),d=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),x=t(76),_=t(79),w=t(34),k=t(82)("__proto__"),E=t(8),S=t(7)(!1),C=Object.prototype,P=Array.prototype,A=P.slice,O=P.join,T=r.setDesc,R=r.getDesc,j=r.setDescs,M={};o||(a=!d(function(){return 7!=T(p("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return R(t,e)}catch(n){}return c(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=j=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:j});var L="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),D=L.concat("length","prototype"),N=L.length,F=function(){var t,e=p("iframe"),n=N,a=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("