From d9e691f393b53814dde04a6f2b680f1c78f2d994 Mon Sep 17 00:00:00 2001 From: XDTM Date: Mon, 20 Aug 2018 13:46:04 +0200 Subject: [PATCH] [Ready] [Reviewed] Nanites 2 (#37922) * Adds programmable nanites to robotics * Oh yeah i might want to actually PR the files * nanite injectors, nanite printer, nanite analyzer * We're back * remove some reagent stuff * more removal * those too * cool icons! * might pass travis now * lotsa code * tgui fixes/misc fixes * WE'RE FUNCTIONAL BOYS * some ui stuff * Misc fixes, cloud update, access nanites * activation check * stuff * preparing for new chamber sprite * Physical backups, sensor nanite programs * techweb sensor nanites * fix * include * fix again * revert * blinding nanites * minor change * minor tweaks * makes minor shocks interfere with nanites * fix * split trigger file into the others, for consistency * cleanup, added mindshield nanites to techwebs * include n all * how'd that even happen * Fixed HUD, readded missing remote icon, added nanite scanner, health analyzers can now detect nanites, added stealth program * cost tweaks * better term * new icon! by MrDoomBringer * icons/tweaks * tgui build * boards * fix * fixes implants not updating mindshield status * move implant hud to living * new remote sprite * scanner sprite * biotype checks * some nerfs * new open chamber sprite * Fixes mindshield implants not updating the HUD, fixes uninstalling always removing the first program, adds 25% and 75% health sensors * correction * nerfs antistun nanites * fixes scanners and minor tweaks * fixes revs with mindshield * oh yeah haha * Fixes wonky techweb * Moves pyro program to weapon node * Adds defib program and some investigate logging * mistype * fix * fix2 * save your files before committing * emps can desync from cloud * pretty outdated * Cloud backups are now tied to the cloud consoles; you can no longer build a new console to access existing backups. * UI fix * more fix * okay fix for real * tested and working * Extra Settings rework, sensor nanites vastly better * non-unique glitches * Public chamber, extra settings rework, new sensors, speech program * Mute and mind control nanites * mind control into hazard * better description * fixes * fixes relay nanites * fixes TK access * mind control costs less * UI update * removed pointless code bit * tgui build * compiles * dammit * paralysis keeps victim upright * Adds sounds to consoles * some feedback for some subtle effects * new chem lore * Viral nanite customization * fix * tgui build * Added mitosis nanites * removes glitched nanites from techwebs * Added flesh eating nanites, poison nanites, hallucination nanites * , * #traviscoding * Adds memory leak, renames nanite roam node to nanite smart * Voice sensor + some techweb desc tweaks * hallucination and Hear() fix * changes signal registering to the new method * 75% done, i think * should be all * more fix * more changes * okay should be fine now * ninja * inheritance * i don't care about originality! * line endings * line endings 2 * maybe * fixes program installation * new review * line endings? * line endings?? * line endings??? * wait do i even use this * fixes public nanite chamber cloud id * maint overlay for chambers * args doesn't work well here * antiabuse checks * compile tho * fixes locked remotes * disk renaming * skull echo nanites * self scan program * Condenses a lot of sensors into a few generic but customizable versions * fixes machinery runtimes. Hacky, but a proper fix would likely require a refactor of machinery typing. * forgot to save * empty * metastation nanite lab * Removes duplicate APC * fix for nanite chamber * Raise max programs * UI Tweaks, aggr. replication rebalance, minor fixes * let's not do that again * Fixes nanites meta merge conflict * Merge conflict v2 * fuck this HDD is slow * What the fuck did you just fucking say about me, you little leaf? I'll have you know I graduated top of my class in the Lawyer School, and I've been involved in numerous secret DMCA raids. I am trained in law violations warfare and you are nothing to me but just another target. I will wipe you the fuck out with precision the likes of which has never been seen before on BYOND, mark my fucking words. You think you can get away with changing the code? Think again, fucker. As we speak I am contacting my secret network of attorneys in the Fox and your IP is being traced right now so you better prepare for an outstanding warrant, maggot. The storm that wipes out the pathetic little thing you call your leaked code. You're fucking done, kid. I can file for an injunction anywhere, anytime, and I can take legal actions in over seven hundred ways, and that's just with my bare hands. Not only am I extensively trained in unarmed combat, but I have access to the entire arsenal of the Florida Statute and I will use it to its full extent to wipe your miserable ass off the face of Canada, you little shit. If only you could have known what unholy retribution your little "clever" action was about to bring down upon you, maybe you would have held your fucking tongue. But you couldn't, you didn't, and now you're paying the price, you goddamn idiot. I will send you to spend time in a Florida State Penitentiary if you ever decide to travel from Canada to the U.S. You're fucking done, kiddo. * Adds virus symptoms that interact with nanites * Fixes spreading nanites being more infective the more protection the victims have * Review plus public chamber tweak * . = ..() * ball * cloud * . = ..() * always press save all before committing * missed a couple --- _maps/map_files/MetaStation/MetaStation.dmm | 522 ++++++++---------- code/__DEFINES/atom_hud.dm | 4 +- code/__DEFINES/components.dm | 36 +- code/__DEFINES/logging.dm | 1 + code/__DEFINES/machines.dm | 3 +- code/__DEFINES/nanites.dm | 11 + code/__DEFINES/traits.dm | 1 + .../subsystem/processing/nanites.dm | 21 + code/datums/components/nanites.dm | 314 +++++++++++ .../diseases/advance/symptoms/nanites.dm | 63 +++ code/game/area/Space_Station_13_areas.dm | 4 + code/game/data_huds.dm | 28 +- code/game/gamemodes/clock_cult/clock_cult.dm | 6 +- code/game/gamemodes/cult/cult.dm | 2 +- code/game/machinery/_machinery.dm | 2 +- code/game/machinery/computer/crew.dm | 15 +- code/game/machinery/constructable_frame.dm | 5 +- code/game/machinery/doors/passworddoor.dm | 1 + code/game/machinery/hologram.dm | 1 + .../machinery/porta_turret/portable_turret.dm | 2 +- code/game/mecha/mecha.dm | 1 + .../circuitboards/computer_circuitboards.dm | 8 + .../circuitboards/machine_circuitboards.dm | 41 ++ code/game/objects/items/defib.dm | 1 + .../objects/items/devices/radio/intercom.dm | 1 + .../game/objects/items/devices/radio/radio.dm | 1 + code/game/objects/items/devices/scanners.dm | 28 + .../objects/items/devices/taperecorder.dm | 1 + code/game/objects/items/eightball.dm | 1 + .../items/implants/implant_mindshield.dm | 8 + .../objects/items/implants/implantchair.dm | 2 +- code/game/objects/items/religion.dm | 2 +- code/game/objects/items/storage/boxes.dm | 8 + code/game/objects/items/stunbaton.dm | 1 + code/game/objects/items/teleprod.dm | 3 + code/game/say.dm | 2 +- code/modules/admin/admin_investigate.dm | 2 +- code/modules/admin/antag_panel.dm | 20 +- .../abductor/equipment/abduction_gear.dm | 1 + .../clockcult/clock_mobs/_eminence.dm | 1 + .../antagonists/revolution/revolution.dm | 2 +- code/modules/assembly/voice.dm | 1 + code/modules/flufftext/Hallucination.dm | 29 +- .../integrated_electronics/subtypes/input.dm | 1 + code/modules/jobs/access.dm | 3 +- code/modules/mob/dead/observer/say.dm | 1 + code/modules/mob/death.dm | 1 + .../mob/living/carbon/carbon_defines.dm | 2 +- .../modules/mob/living/carbon/damage_procs.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_defines.dm | 2 +- .../mob/living/carbon/human/species.dm | 4 + .../carbon/human/species_types/dullahan.dm | 1 + .../carbon/human/species_types/jellypeople.dm | 2 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- code/modules/mob/living/carbon/say.dm | 4 +- code/modules/mob/living/death.dm | 2 + code/modules/mob/living/living.dm | 2 + code/modules/mob/living/living_defense.dm | 1 + code/modules/mob/living/living_defines.dm | 2 +- code/modules/mob/living/say.dm | 1 + .../mob/living/silicon/ai/freelook/eye.dm | 1 + .../mob/living/simple_animal/parrot.dm | 2 +- .../mob/living/simple_animal/slime/say.dm | 2 +- code/modules/mob/mob_helpers.dm | 7 - .../projectiles/projectile/energy/stun.dm | 1 + .../chemistry/reagents/medicine_reagents.dm | 22 +- .../chemistry/reagents/other_reagents.dm | 4 +- .../reagents/reagent_containers/hypospray.dm | 6 +- .../research/designs/comp_board_designs.dm | 16 + .../research/designs/electronics_designs.dm | 35 ++ .../research/designs/machine_designs.dm | 32 ++ .../research/designs/nanite_designs.dm | 477 ++++++++++++++++ .../research/nanites/nanite_chamber.dm | 227 ++++++++ .../nanites/nanite_chamber_computer.dm | 158 ++++++ .../nanites/nanite_cloud_controller.dm | 196 +++++++ .../research/nanites/nanite_hijacker.dm | 151 +++++ .../research/nanites/nanite_misc_items.dm | 9 + .../research/nanites/nanite_program_hub.dm | 118 ++++ .../research/nanites/nanite_programmer.dm | 140 +++++ .../research/nanites/nanite_programs.dm | 254 +++++++++ .../nanites/nanite_programs/buffing.dm | 130 +++++ .../nanites/nanite_programs/healing.dm | 250 +++++++++ .../research/nanites/nanite_programs/rogue.dm | 119 ++++ .../nanites/nanite_programs/sensor.dm | 392 +++++++++++++ .../nanites/nanite_programs/suppression.dm | 311 +++++++++++ .../nanites/nanite_programs/utility.dm | 265 +++++++++ .../nanites/nanite_programs/weapon.dm | 200 +++++++ .../modules/research/nanites/nanite_remote.dm | 172 ++++++ .../modules/research/nanites/program_disks.dm | 133 +++++ .../research/nanites/public_chamber.dm | 174 ++++++ code/modules/research/techweb/all_nodes.dm | 85 +++ code/modules/surgery/advanced/brainwashing.dm | 2 +- icons/mob/hud.dmi | Bin 14401 -> 14773 bytes icons/obj/computer.dmi | Bin 111737 -> 114704 bytes icons/obj/device.dmi | Bin 41473 -> 43091 bytes icons/obj/machines/nanite_chamber.dmi | Bin 0 -> 14572 bytes icons/obj/machines/research.dmi | Bin 22627 -> 28393 bytes tgstation.dme | 22 + tgui/assets/tgui.js | 40 +- .../interfaces/nanite_chamber_control.ract | 109 ++++ tgui/src/interfaces/nanite_cloud_control.ract | 104 ++++ tgui/src/interfaces/nanite_program_hub.ract | 49 ++ tgui/src/interfaces/nanite_programmer.ract | 54 ++ tgui/src/interfaces/nanite_remote.ract | 36 ++ 105 files changed, 5353 insertions(+), 396 deletions(-) create mode 100644 code/__DEFINES/nanites.dm create mode 100644 code/controllers/subsystem/processing/nanites.dm create mode 100644 code/datums/components/nanites.dm create mode 100644 code/datums/diseases/advance/symptoms/nanites.dm create mode 100644 code/modules/research/designs/nanite_designs.dm create mode 100644 code/modules/research/nanites/nanite_chamber.dm create mode 100644 code/modules/research/nanites/nanite_chamber_computer.dm create mode 100644 code/modules/research/nanites/nanite_cloud_controller.dm create mode 100644 code/modules/research/nanites/nanite_hijacker.dm create mode 100644 code/modules/research/nanites/nanite_misc_items.dm create mode 100644 code/modules/research/nanites/nanite_program_hub.dm create mode 100644 code/modules/research/nanites/nanite_programmer.dm create mode 100644 code/modules/research/nanites/nanite_programs.dm create mode 100644 code/modules/research/nanites/nanite_programs/buffing.dm create mode 100644 code/modules/research/nanites/nanite_programs/healing.dm create mode 100644 code/modules/research/nanites/nanite_programs/rogue.dm create mode 100644 code/modules/research/nanites/nanite_programs/sensor.dm create mode 100644 code/modules/research/nanites/nanite_programs/suppression.dm create mode 100644 code/modules/research/nanites/nanite_programs/utility.dm create mode 100644 code/modules/research/nanites/nanite_programs/weapon.dm create mode 100644 code/modules/research/nanites/nanite_remote.dm create mode 100644 code/modules/research/nanites/program_disks.dm create mode 100644 code/modules/research/nanites/public_chamber.dm create mode 100644 icons/obj/machines/nanite_chamber.dmi create mode 100644 tgui/src/interfaces/nanite_chamber_control.ract create mode 100644 tgui/src/interfaces/nanite_cloud_control.ract create mode 100644 tgui/src/interfaces/nanite_program_hub.ract create mode 100644 tgui/src/interfaces/nanite_programmer.ract create mode 100644 tgui/src/interfaces/nanite_remote.ract diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index ea63518be3f..a8068d5660b 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -34542,6 +34542,16 @@ }, /turf/open/floor/plasteel, /area/engine/storage_shared) +"bvj" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "bvk" = ( /obj/machinery/door/poddoor/preopen{ id = "atmos"; @@ -57558,12 +57568,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, /turf/open/floor/plating, /area/maintenance/aft) "csT" = ( @@ -57933,12 +57943,13 @@ /area/maintenance/aft) "ctL" = ( /turf/closed/wall/r_wall, -/area/science/misc_lab/range) +/area/science/nanite) "ctM" = ( /obj/machinery/door/airlock/maintenance{ - name = "Research Testing Range Maintenance"; + name = "Nanite Laboratory Maintenance"; req_one_access_txt = "7;47;29" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/aft) "ctN" = ( @@ -58427,29 +58438,25 @@ /turf/open/floor/plating, /area/maintenance/aft) "cuF" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/obj/machinery/computer/nanite_cloud_controller, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cuG" = ( -/turf/open/floor/engine{ - dir = 9; - icon_state = "floor" - }, -/area/science/misc_lab/range) -"cuH" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /obj/effect/turf_decal/stripes/line{ - dir = 5 + dir = 8 }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) +"cuH" = ( +/obj/machinery/nanite_programmer, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cuI" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -58890,35 +58897,37 @@ /turf/open/floor/plating, /area/maintenance/aft) "cvJ" = ( -/obj/structure/sign/warning/nosmoking{ - pixel_x = -29 +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/turf/open/floor/engine{ - dir = 9; - icon_state = "floor" - }, -/area/science/misc_lab/range) +/obj/machinery/power/apc/auto_name/west, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cvK" = ( -/obj/machinery/magnetic_module, -/obj/effect/landmark/blobstart, -/obj/structure/target_stake, -/obj/effect/turf_decal/bot{ - dir = 9 +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/turf/open/floor/plasteel{ - dir = 9 +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/area/science/misc_lab/range) -"cvL" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "researchrangeshutters"; - name = "blast door" +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/turf/open/floor/plating, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cvM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/camera{ + c_tag = "Research Division Hallway - Mech Bay"; + dir = 4; + network = list("ss13","rd") + }, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -59387,27 +59396,20 @@ /turf/open/floor/circuit/green, /area/science/robotics/mechbay) "cwK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/obj/machinery/nanite_program_hub, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cwL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/obj/structure/table, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cwM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/camera{ - c_tag = "Research Division Hallway - Mech Bay"; - dir = 4; - network = list("ss13","rd") - }, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel/white/side{ dir = 6 @@ -59848,21 +59850,18 @@ /turf/open/floor/circuit/green, /area/science/robotics/mechbay) "cxH" = ( -/turf/open/floor/plating, -/area/science/misc_lab/range) +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cxI" = ( -/obj/machinery/camera{ - c_tag = "Research Testing Range"; - dir = 8; - network = list("ss13","rd"); - pixel_y = -22 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/turf/open/floor/plating, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cxJ" = ( /obj/item/radio/intercom{ freerange = 0; @@ -60182,18 +60181,25 @@ /turf/open/floor/circuit, /area/science/robotics/mechbay) "cyt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/science/misc_lab/range) +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cyu" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/science/misc_lab/range) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cyv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel/white, /area/science/research) @@ -60201,9 +60207,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/research) "cyx" = ( @@ -60584,58 +60588,39 @@ /turf/open/floor/circuit, /area/science/robotics/mechbay) "czl" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 1 +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 +/obj/item/radio/intercom{ + freerange = 0; + frequency = 1459; + name = "Station Intercom (General)"; + pixel_x = -29 }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 +/obj/machinery/camera{ + c_tag = "Research Division - Nanite Lab"; + dir = 4; + network = list("ss13","rd") }, -/obj/item/paper/guides/jobs/security/range{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) "czm" = ( -/obj/machinery/door/window/westleft{ - base_state = "right"; - dir = 1; - icon_state = "right"; - name = "door" - }, -/turf/open/floor/engine{ - dir = 9; - icon_state = "floor" - }, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) "czn" = ( -/obj/structure/table/reinforced, -/obj/machinery/magnetic_controller{ - autolink = 1; - pixel_y = 3 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/clothing/ears/earmuffs, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/obj/machinery/nanite_chamber, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "czo" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, /turf/open/floor/plasteel/whitepurple/corner{ dir = 8 }, @@ -61124,66 +61109,29 @@ /turf/open/floor/plasteel, /area/science/robotics/mechbay) "cAp" = ( -/obj/structure/rack, -/obj/item/target, -/obj/item/target, -/obj/item/target/alien, -/obj/item/target/alien, -/obj/item/target/clown, -/obj/item/target/clown, -/obj/item/target/syndicate, -/obj/item/target/syndicate, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/item/nanite_scanner, /obj/machinery/light_switch{ - pixel_x = -25 + pixel_x = -23 }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cAq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cAr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/computer/nanite_chamber_control{ + icon_state = "computer"; + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) -"cAs" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Research Testing Range"; - req_one_access_txt = "7;47;29" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/purple, -/area/science/misc_lab/range) +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cAt" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whitepurple/side{ dir = 8 }, @@ -61195,9 +61143,6 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, /turf/open/floor/plasteel/white, /area/science/research) "cAv" = ( @@ -61543,89 +61488,23 @@ /area/science/robotics/mechbay) "cBj" = ( /obj/structure/table, -/obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; - name = "Station Intercom (General)"; - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/item/clothing/glasses/science, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/obj/item/nanite_remote, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cBk" = ( /obj/structure/table, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "researchrangeshutters"; - name = "Blast Door Control"; - pixel_y = -24 - }, +/obj/item/storage/box/disks_nanite, /obj/machinery/light, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cBl" = ( -/obj/item/gun/energy/laser/practice, -/obj/machinery/power/apc{ - dir = 2; - name = "Research Firing Range APC"; - areastring = "/area/science/misc_lab/range"; - pixel_y = -28 - }, /obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/yellow, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab/range) -"cBm" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "researchrangeshutters"; - name = "blast door" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/science/misc_lab/range) -"cBn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/whitepurple/corner{ - dir = 1 - }, -/area/science/research) -"cBo" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/research) +/obj/item/folder/white, +/obj/item/pen, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "cBp" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/whitepurple/corner{ dir = 4 }, @@ -75776,6 +75655,9 @@ dir = 4 }, /area/science/circuit) +"fEQ" = ( +/turf/closed/wall, +/area/science/nanite) "fFM" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -75800,6 +75682,13 @@ }, /turf/open/floor/plasteel, /area/engine/break_room) +"gjC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/science/research) "gkj" = ( /turf/open/floor/plasteel/purple/side{ dir = 1 @@ -75844,6 +75733,13 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"gtr" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/science/nanite) "gEk" = ( /obj/structure/cable/yellow{ icon_state = "2-8" @@ -75951,6 +75847,19 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/science/circuit) +"iyU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "izu" = ( /obj/machinery/autolathe{ name = "public autolathe" @@ -76185,6 +76094,13 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"lUr" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/science/nanite) "lWY" = ( /obj/machinery/door/airlock/hatch{ name = "Telecomms Server Room" @@ -76198,6 +76114,17 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/server) +"lYP" = ( +/obj/machinery/door/airlock/research{ + name = "Nanite Laboratory"; + req_one_access_txt = "7;47;29" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/science/nanite) "mjJ" = ( /obj/machinery/nuclearbomb/beer{ pixel_x = 2; @@ -76506,6 +76433,16 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"qom" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/white, +/area/science/research) "qqg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -76679,6 +76616,13 @@ dir = 8 }, /area/science/circuit) +"sAO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "sFv" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -76957,6 +76901,16 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"xqU" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/science/nanite) "xse" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance"; @@ -106521,7 +106475,7 @@ cyt czl cAp cBj -cCq +cDi cDf cEm cFh @@ -106772,13 +106726,13 @@ csS ctM cuG cvK -cuG -cxH +iyU +xqU cyu czm cAq cBk -cCq +cDi cDg cEn cFi @@ -107028,14 +106982,14 @@ cgo cLB ctL cuH -cuG +bvj cwL cxI -cyu +sAO czn cAr cBl -cCq +cDi cQD cEo cFj @@ -107284,15 +107238,15 @@ cqD cgo csU ctL -ctL -cvL -ctL -ctL -ctL -cvL -cAs -cBm -cCq +fEQ +fEQ +lUr +lYP +gtr +fEQ +fEQ +fEQ +cDi cDi cDi cDi @@ -107544,11 +107498,11 @@ ctN cuI cvM cwM -caw +gjC cyv czo cAt -cBn +coi cCr cDj caw @@ -107801,11 +107755,11 @@ ctO cuJ cvN dDy -cwN +qom cyw czp cAu -cBo +cwN crL cwN dDy diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index d690dcd6274..4fd16697714 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -21,8 +21,10 @@ #define GLAND_HUD "17"//Gland indicators for abductors #define SENTIENT_DISEASE_HUD "18" #define AI_DETECT_HUD "19" +#define NANITE_HUD "20" +#define DIAG_NANITE_FULL_HUD "21" //for antag huds. these are used at the /mob level -#define ANTAG_HUD "20" +#define ANTAG_HUD "22" //by default everything in the hud_list of an atom is an image //a value in hud_list with one of these will change that behavior diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index ecd068eff81..c955814b2c5 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -106,16 +106,19 @@ #define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_BUMP "movable_bump" //from base of atom/movable/Bump(): (/atom) #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) -#define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) -#define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) -#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) +#define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) +#define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) +#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) #define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw" //from base of atom/movable/throw_at(): (list/args) #define COMPONENT_CANCEL_THROW 1 #define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) #define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z) +#define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) #define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) -// /mob Signals +// /mob signals +#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed) +#define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj #define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (magic, holy, protection_sources) #define COMPONENT_BLOCK_MAGIC 1 #define COMSIG_MOB_HUD_CREATED "mob_hud_created" //from base of mob/create_mob_hud(): () @@ -124,6 +127,8 @@ #define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living) #define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living) #define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living) +#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage) +#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: () // /mob/living/carbon signals #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity)) @@ -178,6 +183,10 @@ #define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker) #define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" //Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted) +// /datum/species signals +#define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species) +#define COMSIG_SPECIES_LOSS "species_loss" //from datum/species/on_species_loss(): (datum/species/lost_species) + /*******Component Specific Signals*******/ //Janitor #define COMSIG_TURF_IS_WET "check_turf_wet" //(): Returns bitflags of wet values. @@ -194,6 +203,23 @@ //NTnet #define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" //called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata)) +//Nanites +#define COMSIG_HAS_NANITES "has_nanites" //() returns TRUE if nanites are found +#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs" //(list/nanite_programs) - makes the input list a copy the nanites' program list +#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume" //(amount) Sets current nanite volume to the given amount +#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust" //(amount) Adjusts nanite volume by the given amount +#define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume" //(amount) Sets maximum nanite volume to the given amount +#define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud" //(amount(0-100)) Sets cloud ID to the given amount +#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety" //(amount) Sets safety threshold to the given amount +#define COMSIG_NANITE_SET_REGEN "nanite_set_regen" //(amount) Sets regeneration rate to the given amount +#define COMSIG_NANITE_SIGNAL "nanite_signal" //(code(1-9999)) Called when sending a nanite signal to a mob. +#define COMSIG_NANITE_SCAN "nanite_scan" //(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected +#define COMSIG_NANITE_UI_DATA "nanite_ui_data" //(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs +#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program" //(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component + #define COMPONENT_PROGRAM_INSTALLED 1 //Installation successful + #define COMPONENT_PROGRAM_NOT_INSTALLED 2 //Installation failed, but there are still nanites +#define COMSIG_NANITE_SYNC "nanite_sync" //(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component + // /datum/component/storage signals #define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool. #define COMSIG_TRY_STORAGE_INSERT "storage_try_insert" //(obj/item/inserting, mob/user, silent, force) - returns bool @@ -224,4 +250,4 @@ //Ouch my toes! #define CALTROP_BYPASS_SHOES 1 -#define CALTROP_IGNORE_WALKERS 2 +#define CALTROP_IGNORE_WALKERS 2 \ No newline at end of file diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index 1d57122068c..e3f662dc3fd 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -14,6 +14,7 @@ #define INVESTIGATE_HALLUCINATIONS "hallucinations" #define INVESTIGATE_RADIATION "radiation" #define INVESTIGATE_EXONET "exonet" +#define INVESTIGATE_NANITES "nanites" #define INVESTIGATE_CIRCUIT "circuit" // Logging types for log_message() diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index be763454734..bbbb612b449 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -29,7 +29,8 @@ #define BIOGENERATOR (1<<5) //Uses biomass #define LIMBGROWER (1<<6) //Uses synthetic flesh #define SMELTER (1<<7) //uses various minerals -//Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable. +#define NANITE_COMPILER (1<<8) //Prints nanite disks +//Note: More than one of these can be added to a design but imprinter and lathe designs are incompatable. //Modular computer/NTNet defines diff --git a/code/__DEFINES/nanites.dm b/code/__DEFINES/nanites.dm new file mode 100644 index 00000000000..45455a81c28 --- /dev/null +++ b/code/__DEFINES/nanites.dm @@ -0,0 +1,11 @@ +#define NANITE_TIMER_DEACTIVATE 1 +#define NANITE_TIMER_SELFDELETE 2 +#define NANITE_TIMER_TRIGGER 3 +#define NANITE_TIMER_RESET 4 + +#define NANITE_SYNC_DELAY 300 + +#define NANITE_SHOCK_IMMUNE 1 +#define NANITE_EMP_IMMUNE 2 + +#define NANITE_PROGRAM_LIMIT 20 \ No newline at end of file diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index b994d9cc84e..46b3d5bea20 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -49,6 +49,7 @@ #define TRAIT_NODEATH "nodeath" #define TRAIT_NOHARDCRIT "nohardcrit" #define TRAIT_NOSOFTCRIT "nosoftcrit" +#define TRAIT_MINDSHIELD "mindshield" #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" diff --git a/code/controllers/subsystem/processing/nanites.dm b/code/controllers/subsystem/processing/nanites.dm new file mode 100644 index 00000000000..69bd5781deb --- /dev/null +++ b/code/controllers/subsystem/processing/nanites.dm @@ -0,0 +1,21 @@ +PROCESSING_SUBSYSTEM_DEF(nanites) + name = "Nanites" + flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT + wait = 10 + + var/list/datum/nanite_cloud_backup/cloud_backups = list() + var/list/mob/living/nanite_monitored_mobs = list() + var/list/datum/nanite_program/relay/nanite_relays = list() + +/datum/controller/subsystem/processing/nanites/proc/check_hardware(datum/nanite_cloud_backup/backup) + if(QDELETED(backup.storage) || (backup.storage.stat & (NOPOWER|BROKEN))) + return FALSE + return TRUE + +/datum/controller/subsystem/processing/nanites/proc/get_cloud_backup(cloud_id, force = FALSE) + for(var/I in cloud_backups) + var/datum/nanite_cloud_backup/backup = I + if(!force && !check_hardware(backup)) + return + if(backup.cloud_id == cloud_id) + return backup \ No newline at end of file diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm new file mode 100644 index 00000000000..e50e8bb3ce4 --- /dev/null +++ b/code/datums/components/nanites.dm @@ -0,0 +1,314 @@ +/datum/component/nanites + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + + var/mob/living/host_mob + var/nanite_volume = 100 //amount of nanites in the system, used as fuel for nanite programs + var/max_nanites = 500 //maximum amount of nanites in the system + var/regen_rate = 0.5 //nanites generated per second + var/safety_threshold = 50 //how low nanites will get before they stop processing/triggering + var/cloud_id = 0 //0 if not connected to the cloud, 1-100 to set a determined cloud backup to draw from + var/next_sync = 0 + var/list/datum/nanite_program/programs = list() + var/max_programs = NANITE_PROGRAM_LIMIT + + var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans, and does not display the program list on nanite scans + +/datum/component/nanites/Initialize(amount = 100, cloud = 0) + if(!isliving(parent) && !istype(parent, /datum/nanite_cloud_backup)) + return COMPONENT_INCOMPATIBLE + + nanite_volume = amount + cloud_id = cloud + + //Nanites without hosts are non-interactive through normal means + if(isliving(parent)) + host_mob = parent + + if(!(MOB_ORGANIC in host_mob.mob_biotypes) && !(MOB_UNDEAD in host_mob.mob_biotypes)) //Shouldn't happen, but this avoids HUD runtimes in case a silicon gets them somehow. + return COMPONENT_INCOMPATIBLE + + host_mob.hud_set_nanite_indicator() + START_PROCESSING(SSnanites, src) + + if(cloud_id) + cloud_sync() + +/datum/component/nanites/RegisterWithParent() + RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites) + RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data) + RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs) + RegisterSignal(parent, COMSIG_NANITE_SET_VOLUME, .proc/set_volume) + RegisterSignal(parent, COMSIG_NANITE_ADJUST_VOLUME, .proc/adjust_nanites) + RegisterSignal(parent, COMSIG_NANITE_SET_MAX_VOLUME, .proc/set_max_volume) + RegisterSignal(parent, COMSIG_NANITE_SET_CLOUD, .proc/set_cloud) + RegisterSignal(parent, COMSIG_NANITE_SET_SAFETY, .proc/set_safety) + RegisterSignal(parent, COMSIG_NANITE_SET_REGEN, .proc/set_regen) + RegisterSignal(parent, COMSIG_NANITE_ADD_PROGRAM, .proc/add_program) + RegisterSignal(parent, COMSIG_NANITE_SCAN, .proc/nanite_scan) + RegisterSignal(parent, COMSIG_NANITE_SYNC, .proc/sync) + + if(isliving(parent)) + RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp) + RegisterSignal(parent, COMSIG_MOB_DEATH, .proc/on_death) + RegisterSignal(parent, COMSIG_MOB_ALLOWED, .proc/check_access) + RegisterSignal(parent, COMSIG_LIVING_ELECTROCUTE_ACT, .proc/on_shock) + RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock) + RegisterSignal(parent, COMSIG_MOVABLE_HEAR, .proc/on_hear) + RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype) + RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal) + +/datum/component/nanites/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_HAS_NANITES, + COMSIG_NANITE_UI_DATA, + COMSIG_NANITE_GET_PROGRAMS, + COMSIG_NANITE_SET_VOLUME, + COMSIG_NANITE_ADJUST_VOLUME, + COMSIG_NANITE_SET_MAX_VOLUME, + COMSIG_NANITE_SET_CLOUD, + COMSIG_NANITE_SET_SAFETY, + COMSIG_NANITE_SET_REGEN, + COMSIG_NANITE_ADD_PROGRAM, + COMSIG_NANITE_SCAN, + COMSIG_NANITE_SYNC, + COMSIG_ATOM_EMP_ACT, + COMSIG_MOB_DEATH, + COMSIG_MOB_ALLOWED, + COMSIG_LIVING_ELECTROCUTE_ACT, + COMSIG_LIVING_MINOR_SHOCK, + COMSIG_MOVABLE_HEAR, + COMSIG_SPECIES_GAIN, + COMSIG_NANITE_SIGNAL)) + +/datum/component/nanites/Destroy() + STOP_PROCESSING(SSnanites, src) + set_nanite_bar(TRUE) + QDEL_LIST(programs) + if(host_mob) + host_mob.hud_set_nanite_indicator() + host_mob = null + return ..() + +/datum/component/nanites/InheritComponent(datum/component/nanites/new_nanites, i_am_original, list/arguments) + if(new_nanites) + adjust_nanites(new_nanites.nanite_volume) + else + adjust_nanites(arguments[1]) //just add to the nanite volume + +/datum/component/nanites/process() + adjust_nanites(regen_rate) + for(var/X in programs) + var/datum/nanite_program/NP = X + NP.on_process() + set_nanite_bar() + if(cloud_id && world.time > next_sync) + cloud_sync() + next_sync = world.time + NANITE_SYNC_DELAY + +//Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status) +/datum/component/nanites/proc/sync(datum/component/nanites/source, full_overwrite = TRUE, copy_activation = FALSE) + var/list/programs_to_remove = programs.Copy() + var/list/programs_to_add = source.programs.Copy() + for(var/X in programs) + var/datum/nanite_program/NP = X + for(var/Y in programs_to_add) + var/datum/nanite_program/SNP = Y + if(NP.type == SNP.type) + programs_to_remove -= NP + programs_to_add -= SNP + SNP.copy_programming(NP, copy_activation) + break + if(full_overwrite) + for(var/X in programs_to_remove) + qdel(X) + for(var/X in programs_to_add) + var/datum/nanite_program/SNP = X + add_program(SNP.copy()) + +/datum/component/nanites/proc/cloud_sync() + if(!cloud_id) + return + var/datum/nanite_cloud_backup/backup = SSnanites.get_cloud_backup(cloud_id) + if(backup) + var/datum/component/nanites/cloud_copy = backup.nanites + if(cloud_copy) + sync(cloud_copy) + +/datum/component/nanites/proc/add_program(datum/nanite_program/new_program, datum/nanite_program/source_program) + for(var/X in programs) + var/datum/nanite_program/NP = X + if(NP.unique && NP.type == new_program.type) + qdel(NP) + if(programs.len >= max_programs) + return COMPONENT_PROGRAM_NOT_INSTALLED + if(source_program) + source_program.copy_programming(new_program) + programs += new_program + new_program.on_add(src) + return COMPONENT_PROGRAM_INSTALLED + +/datum/component/nanites/proc/consume_nanites(amount, force = FALSE) + if(!force && safety_threshold && (nanite_volume - amount < safety_threshold)) + return FALSE + adjust_nanites(-amount) + return (nanite_volume > 0) + +/datum/component/nanites/proc/adjust_nanites(amount) + nanite_volume = CLAMP(nanite_volume + amount, 0, max_nanites) + if(nanite_volume <= 0) //oops we ran out + qdel(src) + +/datum/component/nanites/proc/set_nanite_bar(remove = FALSE) + var/image/holder = host_mob.hud_list[DIAG_NANITE_FULL_HUD] + var/icon/I = icon(host_mob.icon, host_mob.icon_state, host_mob.dir) + holder.pixel_y = I.Height() - world.icon_size + holder.icon_state = null + if(remove || stealth) + return //bye icon + var/nanite_percent = (nanite_volume / max_nanites) * 100 + nanite_percent = CLAMP(CEILING(nanite_percent, 10), 10, 100) + holder.icon_state = "nanites[nanite_percent]" + +/datum/component/nanites/proc/on_emp(severity) + nanite_volume *= (rand(0.60, 0.90)) //Lose 10-40% of nanites + adjust_nanites(-(rand(5, 50))) //Lose 5-50 flat nanite volume + if(prob(40/severity)) + cloud_id = 0 + for(var/X in programs) + var/datum/nanite_program/NP = X + NP.on_emp(severity) + +/datum/component/nanites/proc/on_shock(shock_damage) + nanite_volume *= (rand(0.45, 0.80)) //Lose 20-55% of nanites + adjust_nanites(-(rand(5, 50))) //Lose 5-50 flat nanite volume + for(var/X in programs) + var/datum/nanite_program/NP = X + NP.on_shock(shock_damage) + +/datum/component/nanites/proc/on_minor_shock() + adjust_nanites(-(rand(5, 15))) //Lose 5-15 flat nanite volume + for(var/X in programs) + var/datum/nanite_program/NP = X + NP.on_minor_shock() + +/datum/component/nanites/proc/on_death(gibbed) + for(var/X in programs) + var/datum/nanite_program/NP = X + NP.on_death(gibbed) + +/datum/component/nanites/proc/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + for(var/X in programs) + var/datum/nanite_program/NP = X + NP.on_hear(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) + +/datum/component/nanites/proc/receive_signal(code, source = "an unidentified source") + for(var/X in programs) + var/datum/nanite_program/NP = X + NP.receive_signal(code, source) + +/datum/component/nanites/proc/check_viable_biotype() + if(!(MOB_ORGANIC in host_mob.mob_biotypes) && !(MOB_UNDEAD in host_mob.mob_biotypes)) + qdel(src) //bodytype no longer sustains nanites + +/datum/component/nanites/proc/check_access(obj/O) + for(var/datum/nanite_program/triggered/access/access_program in programs) + if(access_program.activated) + return O.check_access_list(access_program.access) + else + return FALSE + return FALSE + +/datum/component/nanites/proc/set_volume(amount) + nanite_volume = CLAMP(amount, 0, max_nanites) + +/datum/component/nanites/proc/set_max_volume(amount) + max_nanites = max(1, max_nanites) + +/datum/component/nanites/proc/set_cloud(amount) + cloud_id = CLAMP(amount, 0, 100) + +/datum/component/nanites/proc/set_safety(amount) + safety_threshold = CLAMP(amount, 0, max_nanites) + +/datum/component/nanites/proc/set_regen(amount) + regen_rate = amount + +/datum/component/nanites/proc/confirm_nanites() + return TRUE //yup i exist + +/datum/component/nanites/proc/get_data(list/nanite_data) + nanite_data["nanite_volume"] = nanite_volume + nanite_data["max_nanites"] = max_nanites + nanite_data["cloud_id"] = cloud_id + nanite_data["regen_rate"] = regen_rate + nanite_data["safety_threshold"] = safety_threshold + nanite_data["stealth"] = stealth + +/datum/component/nanites/proc/get_programs(list/nanite_programs) + nanite_programs |= programs + +/datum/component/nanites/proc/nanite_scan(mob/user, full_scan) + if(!full_scan) + if(!stealth) + to_chat(user, "Nanites Detected") + to_chat(user, "Saturation: [nanite_volume]/[max_nanites]") + return TRUE + else + to_chat(user, "NANITES DETECTED") + to_chat(user, "================") + to_chat(user, "Saturation: [nanite_volume]/[max_nanites]") + to_chat(user, "Safety Threshold: [safety_threshold]") + to_chat(user, "Cloud ID: [cloud_id ? cloud_id : "Disabled"]") + to_chat(user, "================") + to_chat(user, "Program List:") + if(stealth) + to_chat(user, "%#$ENCRYPTED&^@") + else + for(var/X in programs) + var/datum/nanite_program/NP = X + to_chat(user, "[NP.name] | [NP.activated ? "Active" : "Inactive"]") + return TRUE + +/datum/component/nanites/proc/nanite_ui_data(list/data, scan_level) + data["has_nanites"] = TRUE + data["nanite_volume"] = nanite_volume + data["regen_rate"] = regen_rate + data["safety_threshold"] = safety_threshold + data["cloud_id"] = cloud_id + var/list/mob_programs = list() + var/id = 1 + for(var/X in programs) + var/datum/nanite_program/P = X + var/list/mob_program = list() + mob_program["name"] = P.name + mob_program["desc"] = P.desc + mob_program["id"] = id + + if(scan_level >= 2) + mob_program["activated"] = P.activated + mob_program["use_rate"] = P.use_rate + mob_program["can_trigger"] = P.can_trigger + mob_program["trigger_cost"] = P.trigger_cost + mob_program["trigger_cooldown"] = P.trigger_cooldown / 10 + + if(scan_level >= 3) + mob_program["activation_delay"] = P.activation_delay + mob_program["timer"] = P.timer + mob_program["timer_type"] = P.get_timer_type_text() + var/list/extra_settings = list() + for(var/Y in P.extra_settings) + var/list/setting = list() + setting["name"] = Y + setting["value"] = P.get_extra_setting(Y) + extra_settings += list(setting) + mob_program["extra_settings"] = extra_settings + if(LAZYLEN(extra_settings)) + mob_program["has_extra_settings"] = TRUE + + if(scan_level >= 4) + mob_program["activation_code"] = P.activation_code + mob_program["deactivation_code"] = P.deactivation_code + mob_program["kill_code"] = P.kill_code + mob_program["trigger_code"] = P.trigger_code + id++ + mob_programs += list(mob_program) + data["mob_programs"] = mob_programs \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/nanites.dm b/code/datums/diseases/advance/symptoms/nanites.dm new file mode 100644 index 00000000000..99665aafc0d --- /dev/null +++ b/code/datums/diseases/advance/symptoms/nanites.dm @@ -0,0 +1,63 @@ +/datum/symptom/nano_boost + name = "Nano-symbiosis" + desc = "The virus reacts to nanites in the host's bloodstream by enhancing their replication cycle." + stealth = 0 + resistance = 2 + stage_speed = 2 + transmittable = -1 + level = 7 + severity = 0 + symptom_delay_min = 1 + symptom_delay_max = 1 + var/reverse_boost = FALSE + threshold_desc = "Transmission 5: Increases the virus' growth rate while nanites are present.
\ + Stage Speed 7: Increases the replication boost." + +/datum/symptom/nano_boost/Start(datum/disease/advance/A) + if(!..()) + return + if(A.properties["transmittable"] >= 5) //reverse boost + reverse_boost = TRUE + if(A.properties["stage_rate"] >= 7) //more nanites + power = 2 + +/datum/symptom/nano_boost/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + SEND_SIGNAL(M, COMSIG_NANITE_ADJUST_VOLUME, 0.5 * power) + if(reverse_boost && SEND_SIGNAL(M, COMSIG_HAS_NANITES)) + if(prob(A.stage_prob)) + A.stage = min(A.stage + 1,A.max_stages) + +/datum/symptom/nano_destroy + name = "Silicolysis" + desc = "The virus reacts to nanites in the host's bloodstream by attacking and consuming them." + stealth = 0 + resistance = 4 + stage_speed = -1 + transmittable = 1 + level = 7 + severity = 0 + symptom_delay_min = 1 + symptom_delay_max = 1 + var/reverse_boost = FALSE + threshold_desc = "Stage Speed 5: Increases the virus' growth rate while nanites are present.
\ + Resistance 7: Severely increases the rate at which the nanites are destroyed." + +/datum/symptom/nano_destroy/Start(datum/disease/advance/A) + if(!..()) + return + if(A.properties["stage_rate"] >= 5) //reverse boost + reverse_boost = TRUE + if(A.properties["resistance"] >= 7) //more nanites + power = 3 + +/datum/symptom/nano_destroy/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + SEND_SIGNAL(M, COMSIG_NANITE_ADJUST_VOLUME, -0.4 * power) + if(reverse_boost && SEND_SIGNAL(M, COMSIG_HAS_NANITES)) + if(prob(A.stage_prob)) + A.stage = min(A.stage + 1,A.max_stages) \ No newline at end of file diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index bf8086ec552..1bd30a77f53 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -1096,6 +1096,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Abandoned Research Lab" icon_state = "medresearch" +/area/science/nanite + name = "Nanite Lab" + icon_state = "toxmisc" + //Storage /area/storage/tools diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index bc40dd8d424..7a341ad69a4 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -18,7 +18,7 @@ /datum/atom_hud/data /datum/atom_hud/data/human/medical - hud_icons = list(STATUS_HUD, HEALTH_HUD) + hud_icons = list(STATUS_HUD, HEALTH_HUD, NANITE_HUD) /datum/atom_hud/data/human/medical/basic @@ -47,15 +47,15 @@ hud_icons = list(ID_HUD) /datum/atom_hud/data/human/security/advanced - hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) + hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD, NANITE_HUD) /datum/atom_hud/data/diagnostic /datum/atom_hud/data/diagnostic/basic - hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD) + hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_NANITE_FULL_HUD) /datum/atom_hud/data/diagnostic/advanced - hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_PATH_HUD) + hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_NANITE_FULL_HUD, DIAG_PATH_HUD) /datum/atom_hud/data/bot_path hud_icons = list(DIAG_PATH_HUD) @@ -226,7 +226,7 @@ holder.icon_state = "hud[ckey(wear_id.GetJobName())]" sec_hud_set_security_status() -/mob/living/carbon/human/proc/sec_hud_set_implants() +/mob/living/proc/sec_hud_set_implants() var/image/holder for(var/i in list(IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD)) holder = hud_list[i] @@ -237,16 +237,16 @@ var/icon/IC = icon(icon, icon_state, dir) holder.pixel_y = IC.Height() - world.icon_size holder.icon_state = "hud_imp_tracking" - else if(istype(I, /obj/item/implant/mindshield)) - holder = hud_list[IMPLOYAL_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_loyal" else if(istype(I, /obj/item/implant/chem)) holder = hud_list[IMPCHEM_HUD] var/icon/IC = icon(icon, icon_state, dir) holder.pixel_y = IC.Height() - world.icon_size holder.icon_state = "hud_imp_chem" + if(has_trait(TRAIT_MINDSHIELD)) + holder = hud_list[IMPLOYAL_HUD] + var/icon/IC = icon(icon, icon_state, dir) + holder.pixel_y = IC.Height() - world.icon_size + holder.icon_state = "hud_imp_loyal" /mob/living/carbon/human/proc/sec_hud_set_security_status() var/image/holder = hud_list[WANTED_HUD] @@ -275,6 +275,14 @@ Diagnostic HUDs! ************************************************/ +/mob/living/proc/hud_set_nanite_indicator() + var/image/holder = hud_list[NANITE_HUD] + var/icon/I = icon(icon, icon_state, dir) + holder.pixel_y = I.Height() - world.icon_size + holder.icon_state = null + if(src in SSnanites.nanite_monitored_mobs) + holder.icon_state = "nanite_ping" + //For Diag health and cell bars! /proc/RoundDiagBar(value) switch(value * 100) diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index dd432afdbe1..9fcafd97e7b 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -59,8 +59,12 @@ Credit where due: return FALSE else return FALSE - if(iscultist(M) || isconstruct(M) || M.isloyal() || ispAI(M)) + if(iscultist(M) || isconstruct(M) || ispAI(M)) return FALSE + if(isliving(M)) + var/mob/living/L = M + if(L.has_trait(TRAIT_MINDSHIELD)) + return FALSE if(ishuman(M) || isbrain(M) || isguardian(M) || issilicon(M) || isclockmob(M) || istype(M, /mob/living/simple_animal/drone/cogscarab) || istype(M, /mob/camera/eminence)) return TRUE return FALSE diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 4e9a9cc6e77..9d828fb662f 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -26,7 +26,7 @@ return FALSE else return FALSE - if(M.isloyal() || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M) || !M.client) + if(M.has_trait(TRAIT_MINDSHIELD) || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M) || !M.client) return FALSE //can't convert machines, shielded, braindead, or ratvar's dogs return TRUE diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index db82e0b2402..69edfcd5ec0 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -120,7 +120,7 @@ Class Procs: armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) . = ..() GLOB.machines += src - + if(ispath(circuit, /obj/item/circuitboard)) circuit = new circuit circuit.apply_default_parts(src) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index edbf1819277..09cbb680834 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -120,14 +120,17 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) var/life_status for(var/mob/living/carbon/human/H in GLOB.carbon_list) + var/nanite_sensors = FALSE + if(H in SSnanites.nanite_monitored_mobs) + nanite_sensors = TRUE // Check if their z-level is correct and if they are wearing a uniform. // Accept H.z==0 as well in case the mob is inside an object. - if ((H.z == 0 || H.z == z) && istype(H.w_uniform, /obj/item/clothing/under)) + if ((H.z == 0 || H.z == z) && istype(H.w_uniform, /obj/item/clothing/under) || nanite_sensors) U = H.w_uniform // Are the suit sensors on? - if ((U.has_sensor > 0) && U.sensor_mode) - pos = H.z == 0 || U.sensor_mode == SENSOR_COORDS ? get_turf(H) : null + if (nanite_sensors || ((U.has_sensor > 0) && U.sensor_mode)) + pos = H.z == 0 || (nanite_sensors || U.sensor_mode == SENSOR_COORDS) ? get_turf(H) : null // Special case: If the mob is inside an object confirm the z-level on turf level. if (H.z == 0 && (!pos || pos.z != z)) @@ -144,12 +147,12 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) assignment = "" ijob = 80 - if (U.sensor_mode >= SENSOR_LIVING) + if (nanite_sensors || U.sensor_mode >= SENSOR_LIVING) life_status = (!H.stat ? TRUE : FALSE) else life_status = null - if (U.sensor_mode >= SENSOR_VITALS) + if (nanite_sensors || U.sensor_mode >= SENSOR_VITALS) oxydam = round(H.getOxyLoss(),1) toxdam = round(H.getToxLoss(),1) burndam = round(H.getFireLoss(),1) @@ -160,7 +163,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) burndam = null brutedam = null - if (U.sensor_mode >= SENSOR_COORDS) + if (nanite_sensors || U.sensor_mode >= SENSOR_COORDS) if (!pos) pos = get_turf(H) area = get_area_name(H, TRUE) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index fd1e2f54267..de5022d751d 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -180,7 +180,7 @@ break if(component_check) P.play_tool_sound(src) - var/obj/machinery/new_machine = new circuit.build_path(loc, 1) + var/obj/machinery/new_machine = new circuit.build_path(loc) new_machine.setAnchored(anchored) new_machine.on_construction() for(var/obj/O in new_machine.component_parts) @@ -189,6 +189,9 @@ for(var/obj/O in src) O.moveToNullspace() new_machine.component_parts += O + if(new_machine.circuit) + QDEL_NULL(new_machine.circuit) + new_machine.circuit = circuit circuit.moveToNullspace() new_machine.RefreshParts() qdel(src) diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index 4d03757836c..fcbb214bb66 100644 --- a/code/game/machinery/doors/passworddoor.dm +++ b/code/game/machinery/doors/passworddoor.dm @@ -23,6 +23,7 @@ flags_1 |= HEAR_1 /obj/machinery/door/password/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(!density || !voice_activated || radio_freq) return if(findtext(raw_message,password)) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 0999e14f53d..893f36acb30 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -408,6 +408,7 @@ Possible to do for anyone motivated enough: /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(speaker && LAZYLEN(masters) && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. for(var/mob/living/silicon/ai/master in masters) if(masters[master] && speaker != master) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index d01ec621973..e2fdaafabb0 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -485,7 +485,7 @@ threatcount += 4 if(shoot_unloyal) - if (!perp.isloyal()) + if (!perp.has_trait(TRAIT_MINDSHIELD)) threatcount += 4 return threatcount diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 80b6f7de120..93fcda2ea9f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -402,6 +402,7 @@ return /obj/mecha/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(speaker == occupant) if(radio.broadcasting) radio.talk_into(speaker, text, , spans, message_language) diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 486f8478448..26f00c730eb 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -350,3 +350,11 @@ /obj/item/circuitboard/computer/sat_control name = "Satellite Network Control (Computer Board)" build_path = /obj/machinery/computer/sat_control + +/obj/item/circuitboard/computer/nanite_chamber_control + name = "Nanite Chamber Control (Computer Board)" + build_path = /obj/machinery/computer/nanite_chamber_control + +/obj/item/circuitboard/computer/nanite_cloud_controller + name = "Nanite Cloud Control (Computer Board)" + build_path = /obj/machinery/computer/nanite_cloud_controller \ No newline at end of file diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index d308ff9d3fe..2a01a7e18f7 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -741,6 +741,47 @@ /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/micro_laser = 2) +/obj/item/circuitboard/machine/nanite_chamber + name = "Nanite Chamber (Machine Board)" + build_path = /obj/machinery/nanite_chamber + req_components = list( + /obj/item/stock_parts/scanning_module = 2, + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/manipulator = 1) + +/obj/item/circuitboard/machine/public_nanite_chamber + name = "Public Nanite Chamber (Machine Board)" + build_path = /obj/machinery/public_nanite_chamber + var/cloud_id = 1 + req_components = list( + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/manipulator = 1) + +/obj/item/circuitboard/machine/public_nanite_chamber/multitool_act(mob/living/user) + var/new_cloud = input("Set the public nanite chamber's Cloud ID (1-100).", "Cloud ID", cloud_id) as num|null + if(new_cloud == null) + return + cloud_id = CLAMP(round(new_cloud, 1), 1, 100) + +/obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user) + . = ..() + to_chat(user, "Cloud ID is currently set to [cloud_id].") + +/obj/item/circuitboard/machine/nanite_program_hub + name = "Nanite Program Hub (Machine Board)" + build_path = /obj/machinery/nanite_program_hub + req_components = list( + /obj/item/stock_parts/matter_bin = 1, + /obj/item/stock_parts/manipulator = 1) + +/obj/item/circuitboard/machine/nanite_programmer + name = "Nanite Programmer (Machine Board)" + build_path = /obj/machinery/nanite_programmer + req_components = list( + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/scanning_module = 1) + /obj/item/circuitboard/machine/protolathe name = "Protolathe (Machine Board)" build_path = /obj/machinery/rnd/production/protolathe diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 2351cc03211..3b08e957c04 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -597,6 +597,7 @@ H.revive() H.emote("gasp") H.Jitter(100) + SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK) if(tplus > tloss) H.adjustBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))), 150) log_combat(user, H, "revived", defib) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 02f549956a0..eb0271c1b9d 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -114,6 +114,7 @@ /obj/item/radio/intercom/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) + . = ..() if (message_mode == MODE_INTERCOM) return // Avoid hearing the same thing twice if(!anyai && !(speaker in ai)) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 6a6d34340ef..719fe6ddd86 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -276,6 +276,7 @@ signal.broadcast() /obj/item/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(radio_freq || !broadcasting || get_dist(src, speaker) > canhear_range) return diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index a26079f87be..c01aa043866 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -328,6 +328,7 @@ SLIME SCANNER if(cyberimp_detect) to_chat(user, "Detected cybernetic modifications:") to_chat(user, "[cyberimp_detect]") + SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, FALSE) /proc/chemscan(mob/living/user, mob/living/M) if(istype(M)) @@ -610,3 +611,30 @@ SLIME SCANNER to_chat(user, "Core mutation in progress: [T.effectmod]") to_chat(user, "Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]") to_chat(user, "========================") + + +/obj/item/nanite_scanner + name = "nanite scanner" + icon = 'icons/obj/device.dmi' + icon_state = "nanite_scanner" + item_state = "nanite_remote" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + desc = "A hand-held body scanner able to detect nanites and their programming." + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON + slot_flags = ITEM_SLOT_BELT + throwforce = 3 + w_class = WEIGHT_CLASS_TINY + throw_speed = 3 + throw_range = 7 + materials = list(MAT_METAL=200) + +/obj/item/nanite_scanner/attack(mob/living/M, mob/living/carbon/human/user) + user.visible_message("[user] has analyzed [M]'s nanites.") + + add_fingerprint(user) + + var/response = SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, TRUE) + if(!response) + to_chat(user, "No nanites detected in the subject.") diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index d0282fdeeff..2df7892f61c 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -95,6 +95,7 @@ /obj/item/taperecorder/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) + . = ..() if(mytape && recording) mytape.timestamp += mytape.used_capacity mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] [message]" diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index ba1bd698e8d..bdaa716075a 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -123,6 +123,7 @@ return ..() /obj/item/toy/eightball/haunted/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) + . = ..() last_message = raw_message /obj/item/toy/eightball/haunted/start_shaking(mob/user) diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 773d784fbd2..2f76b0cdc34 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -19,6 +19,8 @@ /obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = FALSE) if(..()) if(!target.mind) + target.add_trait(TRAIT_MINDSHIELD, "implant") + target.sec_hud_set_implants() return TRUE if(target.mind.has_antag_datum(/datum/antagonist/brainwashed)) @@ -39,11 +41,17 @@ to_chat(target, "You feel something interfering with your mental conditioning, but you resist it!") else to_chat(target, "You feel a sense of peace and security. You are now protected from brainwashing.") + target.add_trait(TRAIT_MINDSHIELD, "implant") + target.sec_hud_set_implants() return TRUE return FALSE /obj/item/implant/mindshield/removed(mob/target, silent = FALSE, special = 0) if(..()) + if(isliving(target)) + var/mob/living/L = target + L.remove_trait(TRAIT_MINDSHIELD, "implant") + L.sec_hud_set_implants() if(target.stat != DEAD && !silent) to_chat(target, "Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing.") return 1 diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm index a135cc3af40..36c79bd454c 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -185,7 +185,7 @@ objective = stripped_input(usr,"What order do you want to imprint on [C]?","Enter the order","",120) message_admins("[ADMIN_LOOKUPFLW(user)] set brainwash machine objective to '[objective]'.") log_game("[key_name(user)] set brainwash machine objective to '[objective]'.") - if(C.isloyal()) + if(C.has_trait(TRAIT_MINDSHIELD)) return FALSE brainwash(C, objective) message_admins("[ADMIN_LOOKUPFLW(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.") diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 316298296f5..36eb3173dae 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -187,7 +187,7 @@ inspiration_available = FALSE /obj/item/banner/command/check_inspiration(mob/living/carbon/human/H) - return H.isloyal() //Command is stalwart but rewards their allies. + return H.has_trait(TRAIT_MINDSHIELD) //Command is stalwart but rewards their allies. /datum/crafting_recipe/command_banner name = "Command Banner" diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index ffb80ee2154..c8e96d0b28c 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -93,6 +93,14 @@ for(var/i in 1 to 7) new /obj/item/disk/plantgene(src) +/obj/item/storage/box/disks_nanite + name = "nanite program disks box" + illustration = "disk_kit" + +/obj/item/storage/box/disks_nanite/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/disk/nanite_program(src) + // Ordinary survival box /obj/item/storage/box/survival/PopulateContents() new /obj/item/clothing/mask/breath(src) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 820a5446f63..2349b13c761 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -159,6 +159,7 @@ L.Knockdown(stunforce) L.apply_effect(EFFECT_STUTTER, stunforce) + SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) if(user) L.lastattacker = user.real_name L.lastattackerckey = user.ckey diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index 85355f1c0f1..fd9972f4274 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -12,9 +12,11 @@ user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ "You accidentally hit yourself with [src]!") if(do_teleport(user, get_turf(user), 50))//honk honk + SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) user.Knockdown(stunforce*3) deductcharge(hitcost) else + SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) user.Knockdown(stunforce*3) deductcharge(hitcost/4) return @@ -23,6 +25,7 @@ if(!istype(M) && M.anchored) return . else + SEND_SIGNAL(M, COMSIG_LIVING_MINOR_SHOCK) do_teleport(M, get_turf(M), 15) /obj/item/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod diff --git a/code/game/say.dm b/code/game/say.dm index 4fb67cb7c64..2b5791bc57d 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -29,7 +29,7 @@ GLOBAL_LIST_INIT(freqtospan, list( send_speech(message, 7, src, , spans, message_language=language) /atom/movable/proc/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - return + SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, message, speaker, message_language, raw_message, radio_freq, spans, message_mode) /atom/movable/proc/can_speak() return 1 diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 94efce6059d..ebbef58cbb5 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -4,7 +4,7 @@ var/F = file("[GLOB.log_directory]/[subject].html") WRITE_FILE(F, "[time_stamp()] [REF(src)] ([x],[y],[z]) || [src] [message]
") -/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION, INVESTIGATE_CIRCUIT) ) +/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION, INVESTIGATE_CIRCUIT, INVESTIGATE_NANITES) ) set name = "Investigate" set category = "Admin" if(!holder) diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index 7546fa85423..1e207909bd7 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -35,9 +35,9 @@ GLOBAL_VAR(antag_prototypes) var/data_part = antag_panel_data() var/objective_part = antag_panel_objectives() var/memory_part = antag_panel_memory() - + var/list/parts = listtrim(list(command_part,data_part,objective_part,memory_part)) - + return parts.Join("
") /datum/antagonist/proc/antag_panel_objectives() @@ -80,7 +80,7 @@ GLOBAL_VAR(antag_prototypes) var/list/result = list() if(!current) result += "No body!" - if(current && current.isloyal()) + if(current && current.has_trait(TRAIT_MINDSHIELD)) result += "Mindshielded" //Move these to mob if(iscyborg(current)) @@ -155,8 +155,8 @@ GLOBAL_VAR(antag_prototypes) priority_sections |= antag_category antag_header_parts += "[current_antag.name]" antag_header_parts += "Remove" - - + + //We aren't antag of this category, grab first prototype to check the prefs (This is pretty vague but really not sure how else to do this) var/datum/antagonist/pref_source = current_antag if(!pref_source) @@ -167,7 +167,7 @@ GLOBAL_VAR(antag_prototypes) break if(pref_source.job_rank) antag_header_parts += pref_source.enabled_in_preferences(src) ? "Enabled in Prefs" : "Disabled in Prefs" - + //Traitor : None | Traitor | IAA // Command1 | Command2 | Command3 // Secret Word : Banana @@ -180,12 +180,12 @@ GLOBAL_VAR(antag_prototypes) if(current_antag) cat_section += current_antag.antag_panel() sections[antag_category] = cat_section - + for(var/s in priority_sections) out += sections[s] for(var/s in sections - priority_sections) out += sections[s] - + out += "
" //Uplink @@ -201,7 +201,7 @@ GLOBAL_VAR(antag_prototypes) else uplink_info += "give" uplink_info += "." //hiel grammar - + out += uplink_info + "
" //Common Memory var/common_memory = "Common Memory:" @@ -210,7 +210,7 @@ GLOBAL_VAR(antag_prototypes) out += common_memory + "
" //Other stuff out += get_common_admin_commands() - + var/datum/browser/panel = new(usr, "traitorpanel", "", 600, 600) panel.set_content(out) panel.open() diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index e7186fa2295..3fa10200008 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -505,6 +505,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} L.Knockdown(140) L.apply_effect(EFFECT_STUTTER, 7) + SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) L.visible_message("[user] has stunned [L] with [src]!", \ "[user] has stunned you with [src]!") diff --git a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm index aae32f66f5f..e07bdbc11e6 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm @@ -99,6 +99,7 @@ to_chat(M, message) /mob/camera/eminence/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(is_reebe(z) || is_servant_of_ratvar(speaker) || GLOB.ratvar_approaches || GLOB.ratvar_awakens) //Away from Reebe, the Eminence can't hear anything to_chat(src, message) return diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 2bed058dc89..a397fbb0d5e 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -17,7 +17,7 @@ return FALSE if(new_owner.unconvertable) return FALSE - if(new_owner.current && new_owner.current.isloyal()) + if(new_owner.current && new_owner.current.has_trait(TRAIT_MINDSHIELD)) return FALSE /datum/antagonist/rev/apply_innate_effects(mob/living/mob_override) diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index ca97752d904..32148abc219 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -26,6 +26,7 @@ to_chat(user, "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") /obj/item/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(speaker == src) return diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 0a120e42964..2899a190c3c 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -771,13 +771,13 @@ GLOBAL_LIST_INIT(hallucination_list, list( ..() var/turf/source = random_far_turf() if(!sound_type) - sound_type = pick("airlock","airlock_pry","console","explosion","far_explosion","mech","glass","alarm","beepsky","mech","wall_decon","door_hack","tesla") + sound_type = pick("airlock","airlock pry","console","explosion","far explosion","mech","glass","alarm","beepsky","mech","wall decon","door hack") feedback_details += "Type: [sound_type]" //Strange audio switch(sound_type) if("airlock") target.playsound_local(source,'sound/machines/airlock.ogg', 30, 1) - if("airlock_pry") + if("airlock pry") target.playsound_local(source,'sound/machines/airlock_alien_prying.ogg', 100, 1) sleep(50) target.playsound_local(source, 'sound/machines/airlockforced.ogg', 30, 1) @@ -788,7 +788,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.playsound_local(source,'sound/effects/explosion1.ogg', 50, 1) else target.playsound_local(source, 'sound/effects/explosion2.ogg', 50, 1) - if("far_explosion") + if("far explosion") target.playsound_local(source, 'sound/effects/explosionfar.ogg', 50, 1) if("glass") target.playsound_local(source, pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg'), 50, 1) @@ -807,14 +807,14 @@ GLOBAL_LIST_INIT(hallucination_list, list( mech_dir = pick(GLOB.cardinals) sleep(10) //Deconstructing a wall - if("wall_decon") + if("wall decon") target.playsound_local(source, 'sound/items/welder.ogg', 50, 1) sleep(105) target.playsound_local(source, 'sound/items/welder2.ogg', 50, 1) sleep(15) target.playsound_local(source, 'sound/items/ratchet.ogg', 50, 1) //Hacking a door - if("door_hack") + if("door hack") target.playsound_local(source, 'sound/items/screwdriver.ogg', 50, 1) sleep(rand(40,80)) target.playsound_local(source, 'sound/machines/airlockforced.ogg', 30, 1) @@ -827,7 +827,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( ..() var/turf/source = random_far_turf() if(!sound_type) - sound_type = pick("phone","hallelujah","highlander","hyperspace","game_over","creepy","tesla") + sound_type = pick("phone","hallelujah","highlander","laughter","hyperspace","game over","creepy","tesla") feedback_details += "Type: [sound_type]" //Strange audio switch(sound_type) @@ -845,7 +845,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.playsound_local(source, 'sound/effects/pray_chaplain.ogg', 50) if("highlander") target.playsound_local(null, 'sound/misc/highlander.ogg', 50) - if("game_over") + if("game over") target.playsound_local(source, 'sound/misc/compiler-failure.ogg', 50) if("laughter") if(prob(50)) @@ -870,10 +870,10 @@ GLOBAL_LIST_INIT(hallucination_list, list( set waitfor = FALSE ..() if(!message) - message = pick("ratvar","shuttle_dock","blob_alert","malf_ai","meteors","supermatter") + message = pick("ratvar","shuttle dock","blob alert","malf ai","meteors","supermatter") feedback_details += "Type: [message]" switch(message) - if("blob_alert") + if("blob alert") to_chat(target, "

Biohazard Alert

") to_chat(target, "

Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.

") SEND_SOUND(target, 'sound/ai/outbreak5.ogg') @@ -882,11 +882,11 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.playsound_local(target, 'sound/effects/clockcult_gateway_disrupted.ogg', 50, FALSE, pressure_affected = FALSE) sleep(27) target.playsound_local(target, 'sound/effects/explosion_distant.ogg', 50, FALSE, pressure_affected = FALSE) - if("shuttle_dock") + if("shuttle dock") to_chat(target, "

Priority Announcement

") to_chat(target, "

The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

") SEND_SOUND(target, 'sound/ai/shuttledock.ogg') - if("malf_ai") //AI is doomsdaying! + if("malf ai") //AI is doomsdaying! to_chat(target, "

Anomaly Alert

") to_chat(target, "

Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.

") SEND_SOUND(target, 'sound/ai/aimalf.ogg') @@ -900,11 +900,14 @@ GLOBAL_LIST_INIT(hallucination_list, list( /datum/hallucination/hudscrew -/datum/hallucination/hudscrew/New(mob/living/carbon/C, forced = TRUE) +/datum/hallucination/hudscrew/New(mob/living/carbon/C, forced = TRUE, screwyhud_type) set waitfor = FALSE ..() //Screwy HUD - target.set_screwyhud(pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY)) + var/chosen_screwyhud = screwyhud_type + if(!chosen_screwyhud) + chosen_screwyhud = pick(SCREWYHUD_CRIT,SCREWYHUD_DEAD,SCREWYHUD_HEALTHY) + target.set_screwyhud(chosen_screwyhud) feedback_details += "Type: [target.hal_screwyhud]" sleep(rand(100,250)) target.set_screwyhud(SCREWYHUD_NONE) diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index c3032032818..732fa67deb7 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -859,6 +859,7 @@ power_draw_per_use = 5 /obj/item/integrated_circuit/input/microphone/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) + . = ..() var/translated = FALSE if(speaker && message) if(raw_message) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 28f2063b8d9..63e6962a748 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -11,6 +11,8 @@ if(IsAdminGhost(M)) //Access can't stop the abuse return TRUE + else if(SEND_SIGNAL(M, COMSIG_MOB_ALLOWED, src)) + return TRUE else if(ishuman(M)) var/mob/living/carbon/human/H = M //if they are holding or wearing a card that has access, that works @@ -59,7 +61,6 @@ /obj/proc/check_access(obj/item/I) return check_access_list(I ? I.GetAccess() : null) - /obj/proc/check_access_list(list/access_list) gen_access() diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index cd2be5efd46..eef7dd5bd3d 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -23,6 +23,7 @@ . = say_dead(message) /mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() var/atom/movable/to_follow = speaker if(radio_freq) var/atom/movable/virtualspeaker/V = speaker diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 2d3ab19b141..4ce30a48fce 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -10,4 +10,5 @@ return /mob/proc/death(gibbed) + SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed) return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 6b0dcb51eb1..cc01a83a150 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -2,7 +2,7 @@ gender = MALE pressure_resistance = 15 possible_a_intents = list(INTENT_HELP, INTENT_HARM) - hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD) + hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD) has_limbs = 1 held_items = list(null, null) var/list/stomach_contents = list() diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 6627bbda1ca..b565568b391 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -113,10 +113,12 @@ //////////////////////////////////////////// //Returns a list of damaged bodyparts -/mob/living/carbon/proc/get_damaged_bodyparts(brute = FALSE, burn = FALSE, stamina = FALSE) +/mob/living/carbon/proc/get_damaged_bodyparts(brute = FALSE, burn = FALSE, stamina = FALSE, status) var/list/obj/item/bodypart/parts = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X + if(status && BP.status != status) + continue if((brute && BP.brute_dam) || (burn && BP.burn_dam) || (stamina && BP.stamina_dam)) parts += BP return parts diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 78950d3be26..62a193870d8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -601,7 +601,7 @@ threatcount += 1 //mindshield implants imply trustworthyness - if(isloyal()) + if(has_trait(TRAIT_MINDSHIELD)) threatcount -= 1 //Agent cards lower threatlevel. diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 12519543ed6..763487f7ed9 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,5 +1,5 @@ /mob/living/carbon/human - hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD) + hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD) hud_type = /datum/hud/human possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM) pressure_resistance = 25 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index b2b90a02f30..3e8a28352f3 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -284,6 +284,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(TRAIT_VIRUSIMMUNE in inherent_traits) for(var/datum/disease/A in C.diseases) A.cure(FALSE) + + SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species) /datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) @@ -293,6 +295,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) C.Digitigrade_Leg_Swap(TRUE) for(var/X in inherent_traits) C.remove_trait(X, SPECIES_TRAIT) + + SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src) /datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour) H.remove_overlay(HAIR_LAYER) diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 16cfc027f0c..cbf807ee88e 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -122,6 +122,7 @@ qdel(src) /obj/item/dullahan_relay/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(!QDELETED(owner)) message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode) to_chat(owner,message) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 432b7bde7dc..f6c7007f676 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -587,7 +587,7 @@ /datum/species/jelly/stargazer/proc/link_mob(mob/living/M) if(QDELETED(M) || M.stat == DEAD) return FALSE - if(M.isloyal()) //mindshield implant, no dice + if(M.has_trait(TRAIT_MINDSHIELD)) //mindshield implant, no dice return FALSE if(M in linked_mobs) return FALSE diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 23ba71d81bb..55ecebda8cc 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -145,7 +145,7 @@ threatcount += 4 //trigger look_for_perp() since they're nonhuman and very likely hostile //mindshield implants imply trustworthyness - if(isloyal()) + if(has_trait(TRAIT_MINDSHIELD)) threatcount -= 1 return threatcount diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index 8a8c99bf32d..f6e43f487f4 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -40,9 +40,9 @@ . = initial(dt.flags) & TONGUELESS_SPEECH /mob/living/carbon/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(!client) return for(var/T in get_traumas()) var/datum/brain_trauma/trauma = T - message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) - return ..() \ No newline at end of file + message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) \ No newline at end of file diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 328147fac0e..f6888a21ecb 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -78,6 +78,8 @@ addtimer(CALLBACK(src, .proc/med_hud_set_status), (DEFIB_TIME_LIMIT * 10) + 1) stop_pulling() + SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed) + if (client) client.move_delay = initial(client.move_delay) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c3d3518419c..112c8b44383 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -5,6 +5,8 @@ real_name = name var/datum/atom_hud/data/human/medical/advanced/medhud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] medhud.add_to_hud(src) + for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) + diag_hud.add_to_hud(src) faction += "[REF(src)]" GLOB.mob_living_list += src diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 8075917dfdd..41fd8b4f835 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -306,6 +306,7 @@ return 1 /mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE) + SEND_SIGNAL(src, COMSIG_LIVING_ELECTROCUTE_ACT, shock_damage) if(tesla_shock && (flags_1 & TESLA_IGNORE_1)) return FALSE if(has_trait(TRAIT_SHOCKIMMUNE)) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index fa38f831f04..309e9d9fe42 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -2,7 +2,7 @@ see_invisible = SEE_INVISIBLE_LIVING sight = 0 see_in_dark = 2 - hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD) + hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD) pressure_resistance = 10 var/resize = 1 //Badminnery resize diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 817e1b3e46b..e6be7497210 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -213,6 +213,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return 1 /mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(!client) return var/deaf_message diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index bedb9638edb..2d617355ec2 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -183,6 +183,7 @@ to_chat(usr, "Camera acceleration has been toggled [acceleration ? "on" : "off"].") /mob/camera/aiEye/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(relay_speech && speaker && ai && !radio_freq && speaker != ai && near_camera(speaker)) ai.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index ca4b5defcd6..4fdf431fa06 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -144,6 +144,7 @@ stat("Mode",a_intent) /mob/living/simple_animal/parrot/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) + . = ..() if(speaker != src && prob(50)) //Dont imitate ourselves if(!radio_freq || prob(10)) if(speech_buffer.len >= 500) @@ -151,7 +152,6 @@ speech_buffer |= html_decode(raw_message) if(speaker == src && !client) //If a parrot squawks in the woods and no one is around to hear it, does it make a sound? This code says yes! return message - ..() /mob/living/simple_animal/parrot/radio(message, message_mode, list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. . = ..() diff --git a/code/modules/mob/living/simple_animal/slime/say.dm b/code/modules/mob/living/simple_animal/slime/say.dm index 60a25f90b70..a2618b711e9 100644 --- a/code/modules/mob/living/simple_animal/slime/say.dm +++ b/code/modules/mob/living/simple_animal/slime/say.dm @@ -1,7 +1,7 @@ /mob/living/simple_animal/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) + . = ..() if(speaker != src && !radio_freq && !stat) if (speaker in Friends) speech_buffer = list() speech_buffer += speaker speech_buffer += lowertext(html_decode(message)) - ..() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index b7286831f36..fa908db7297 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -1,13 +1,6 @@ // see _DEFINES/is_helpers.dm for mob type checks -/mob/proc/isloyal() //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them - return 0 - -/mob/living/carbon/isloyal() - for(var/obj/item/implant/mindshield/L in implants) - return TRUE - /mob/proc/lowest_buckled_mob() . = src if(buckled && ismob(buckled)) diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm index de9016a4c42..b5b45a84ec6 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -19,6 +19,7 @@ else if(iscarbon(target)) var/mob/living/carbon/C = target SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased) + SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK) if(C.dna && C.dna.check_mutation(HULK)) C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) else if((C.status_flags & CANKNOCKDOWN) && !C.has_trait(TRAIT_STUNIMMUNE)) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 734194e708f..aaa7e30de06 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -68,11 +68,11 @@ ..() . = 1 -/datum/reagent/medicine/adminordrazine/nanites - name = "Nanites" - id = "nanites" - description = "Tiny nanomachines capable of rapid cellular regeneration." - taste_description = "sludge" +/datum/reagent/medicine/adminordrazine/quantum_heal + name = "Quantum Medicine" + id = "quantum_heal" + description = "Rare and experimental particles, that apparently swap the user's body with one from an alternate dimension where it's completely healthy." + taste_description = "science" /datum/reagent/medicine/synaptizine name = "Synaptizine" @@ -1104,20 +1104,20 @@ ..() return TRUE -/datum/reagent/medicine/miningnanites - name = "Nanites" - id = "miningnanites" - description = "It's mining magic. We don't have to explain it." +/datum/reagent/medicine/lavaland_extract + name = "Lavaland Extract" + id = "lavaland_extract" + description = "An extract of lavaland atmospheric and mineral elements. Heals the user in small doses, but is extremely toxic otherwise." color = "#C8A5DC" // rgb: 200, 165, 220 overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent can_synth = FALSE -/datum/reagent/medicine/miningnanites/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/lavaland_extract/on_mob_life(mob/living/carbon/M) M.heal_bodypart_damage(5,5) ..() return TRUE -/datum/reagent/medicine/miningnanites/overdose_process(mob/living/M) +/datum/reagent/medicine/lavaland_extract/overdose_process(mob/living/M) M.adjustBruteLoss(3*REM, 0) M.adjustFireLoss(3*REM, 0) M.adjustToxLoss(3*REM, 0) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5501122d2bb..ddd1a568c67 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1098,7 +1098,7 @@ M.emote("drool") ..() -/datum/reagent/nanites +/datum/reagent/nanomachines name = "Nanomachines" id = "nanomachines" description = "Microscopic construction robots." @@ -1106,7 +1106,7 @@ can_synth = FALSE taste_description = "sludge" -/datum/reagent/nanites/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) +/datum/reagent/nanomachines/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) L.ForceContractDisease(new /datum/disease/transformation/robot(), FALSE, TRUE) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index f7591b4db20..1fa8b408cdf 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -64,9 +64,9 @@ list_reagents = list("epinephrine" = 30, "omnizine" = 30, "leporazine" = 15, "atropine" = 15) /obj/item/reagent_containers/hypospray/combat/nanites - desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with expensive medical nanites for rapid healing." + desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with experimental medical compounds for rapid healing." volume = 100 - list_reagents = list("nanites" = 80, "synaptizine" = 20) + list_reagents = list("quantum_heal" = 80, "synaptizine" = 20) /obj/item/reagent_containers/hypospray/magillitis name = "experimental autoinjector" @@ -158,7 +158,7 @@ icon_state = "stimpen" volume = 57 amount_per_transfer_from_this = 57 - list_reagents = list("salbutamol" = 10, "leporazine" = 15, "tricordrazine" = 15, "epinephrine" = 10, "miningnanites" = 2, "omnizine" = 5) + list_reagents = list("salbutamol" = 10, "leporazine" = 15, "tricordrazine" = 15, "epinephrine" = 10, "lavaland_extract" = 2, "omnizine" = 5) /obj/item/reagent_containers/hypospray/medipen/species_mutator name = "species mutator medipen" diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 6bb1debb438..68aee66d621 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -287,3 +287,19 @@ build_path = /obj/item/circuitboard/computer/apc_control category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/board/nanite_chamber_control + name = "Computer Design (Nanite Chamber Control)" + desc = "Allows for the construction of circuit boards used to build a new nanite chamber control console." + id = "nanite_chamber_control" + build_path = /obj/item/circuitboard/computer/nanite_chamber_control + category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/nanite_cloud_control + name = "Computer Design (Nanite Cloud Control)" + desc = "Allows for the construction of circuit boards used to build a new nanite cloud control console." + id = "nanite_cloud_control" + build_path = /obj/item/circuitboard/computer/nanite_cloud_controller + category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index 29ed3505d8c..397c2ac97ca 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -23,6 +23,31 @@ category = list("Electronics") departmental_flags = DEPARTMENTAL_FLAG_ALL + +/////////////////////////////////// +//////////Nanite Devices/////////// +/////////////////////////////////// +/datum/design/nanite_remote + name = "Nanite Remote" + desc = "Allows for the construction of a nanite remote." + id = "nanite_remote" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500, MAT_METAL = 500) + build_path = /obj/item/nanite_remote + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/nanite_scanner + name = "Nanite Scanner" + desc = "Allows for the construction of a nanite scanner." + id = "nanite_scanner" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500, MAT_METAL = 500) + build_path = /obj/item/nanite_scanner + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + + //////////////////////////////////////// //////////Disk Construction Disks/////// //////////////////////////////////////// @@ -56,6 +81,16 @@ category = list("Electronics") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE +/datum/design/nanite_disk + name = "Nanite Program Disk" + desc = "Stores nanite programs." + id = "nanite_disk" + build_type = PROTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 100) + build_path = /obj/item/disk/nanite_program + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + /datum/design/integrated_printer name = "Integrated circuit printer" desc = "This machine provides all necessary things for circuitry." diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 2f768658842..93dfd3d2bb1 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -306,6 +306,38 @@ category = list("Research Machinery") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE +/datum/design/board/nanite_chamber + name = "Machine Design (Nanite Chamber Board)" + desc = "The circuit board for a Nanite Chamber." + id = "nanite_chamber" + build_path = /obj/item/circuitboard/machine/nanite_chamber + category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/public_nanite_chamber + name = "Machine Design (Public Nanite Chamber Board)" + desc = "The circuit board for a Public Nanite Chamber." + id = "public_nanite_chamber" + build_path = /obj/item/circuitboard/machine/public_nanite_chamber + category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/nanite_programmer + name = "Machine Design (Nanite Programmer Board)" + desc = "The circuit board for a Nanite Programmer." + id = "nanite_programmer" + build_path = /obj/item/circuitboard/machine/nanite_programmer + category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/nanite_program_hub + name = "Machine Design (Nanite Program Hub Board)" + desc = "The circuit board for a Nanite Program Hub." + id = "nanite_program_hub" + build_path = /obj/item/circuitboard/machine/nanite_program_hub + category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + /datum/design/board/microwave name = "Machine Design (Microwave Board)" desc = "The circuit board for a microwave." diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm new file mode 100644 index 00000000000..177d7073a10 --- /dev/null +++ b/code/modules/research/designs/nanite_designs.dm @@ -0,0 +1,477 @@ +/datum/design/nanites + name = "None" + desc = "Warn a coder if you see this." + id = "default_nanites" + build_type = NANITE_COMPILER + construction_time = 50 + category = list() + research_icon = 'icons/obj/device.dmi' + research_icon_state = "nanite_program" + var/program_type = /datum/nanite_program + +////////////////////UTILITY NANITES////////////////////////////////////// + +/datum/design/nanites/metabolic_synthesis + name = "Metabolic Synthesis" + desc = "The nanites use the metabolic cycle of the host to speed up their replication rate, using their extra nutrition as fuel." + id = "metabolic_nanites" + program_type = /datum/nanite_program/metabolic_synthesis + category = list("Utility Nanites") + +/datum/design/nanites/viral + name = "Viral Replica" + desc = "The nanites constantly send encrypted signals attempting to forcefully copy their own programming into other nanite clusters." + id = "viral_nanites" + program_type = /datum/nanite_program/viral + category = list("Utility Nanites") + +/datum/design/nanites/monitoring + name = "Monitoring" + desc = "The nanites monitor the host's vitals and location, sending them to the suit sensor network." + id = "monitoring_nanites" + program_type = /datum/nanite_program/monitoring + category = list("Utility Nanites") + +/datum/design/nanites/self_scan + name = "Host Scan" + desc = "The nanites display a detailed readout of a body scan to the host." + id = "selfscan_nanites" + program_type = /datum/nanite_program/triggered/self_scan + category = list("Utility Nanites") + +/datum/design/nanites/stealth + name = "Stealth" + desc = "The nanites hide their activity and programming from superficial scans." + id = "stealth_nanites" + program_type = /datum/nanite_program/stealth + category = list("Utility Nanites") + +/datum/design/nanites/access + name = "Subdermal ID" + desc = "The nanites store the host's ID access rights in a subdermal magnetic strip. Updates when triggered, copying the host's current access." + id = "access_nanites" + program_type = /datum/nanite_program/triggered/access + category = list("Utility Nanites") + +/datum/design/nanites/relay + name = "Relay" + desc = "The nanites receive and relay long-range nanite signals." + id = "relay_nanites" + program_type = /datum/nanite_program/relay + category = list("Utility Nanites") + +/datum/design/nanites/repeater + name = "Signal Repeater" + desc = "When triggered, sends another signal to the nanites, optionally with a delay." + id = "repeater_nanites" + program_type = /datum/nanite_program/sensor/repeat + category = list("Utility Nanites") + +/datum/design/nanites/relay_repeater + name = "Relay Signal Repeater" + desc = "When triggered, sends another signal to a relay channel, optionally with a delay." + id = "relay_repeater_nanites" + program_type = /datum/nanite_program/sensor/relay_repeat + category = list("Utility Nanites") + +/datum/design/nanites/emp + name = "Electromagnetic Resonance" + desc = "The nanites cause an elctromagnetic pulse around the host when triggered. Will corrupt other nanite programs!" + id = "emp_nanites" + program_type = /datum/nanite_program/triggered/emp + category = list("Utility Nanites") + +/datum/design/nanites/spreading + name = "Infective Exo-Locomotion" + desc = "The nanites gain the ability to survive for brief periods outside of the human body, as well as the ability to start new colonies without an integration process; \ + resulting in an extremely infective strain of nanites." + id = "spreading_nanites" + program_type = /datum/nanite_program/spreading + category = list("Utility Nanites") + +/datum/design/nanites/mitosis + name = "Mitosis" + desc = "The nanites gain the ability to self-replicate, using bluespace to power the process, instead of drawing from a template. This rapidly speeds up the replication rate,\ + but it causes occasional software errors due to faulty copies. Not compatible with cloud sync." + id = "mitosis_nanites" + program_type = /datum/nanite_program/mitosis + category = list("Utility Nanites") + +////////////////////MEDICAL NANITES////////////////////////////////////// +/datum/design/nanites/regenerative + name = "Accelerated Regeneration" + desc = "The nanites boost the host's natural regeneration, increasing their healing speed." + id = "regenerative_nanites" + program_type = /datum/nanite_program/regenerative + category = list("Medical Nanites") + +/datum/design/nanites/regenerative_advanced + name = "Bio-Reconstruction" + desc = "The nanites manually repair and replace organic cells, acting much faster than normal regeneration. \ + However, this program cannot detect the difference between harmed and unharmed, causing it to consume nanites even if it has no effect." + id = "regenerative_plus_nanites" + program_type = /datum/nanite_program/regenerative_advanced + category = list("Medical Nanites") + +/datum/design/nanites/temperature + name = "Temperature Adjustment" + desc = "The nanites adjust the host's internal temperature to an ideal level." + id = "temperature_nanites" + program_type = /datum/nanite_program/temperature + category = list("Medical Nanites") + +/datum/design/nanites/purging + name = "Blood Purification" + desc = "The nanites purge toxins and chemicals from the host's bloodstream." + id = "purging_nanites" + program_type = /datum/nanite_program/purging + category = list("Medical Nanites") + +/datum/design/nanites/purging_advanced + name = "Selective Blood Purification" + desc = "The nanites purge toxins and dangerous chemicals from the host's bloodstream, while ignoring beneficial chemicals. \ + The added processing power required to analyze the chemicals severely increases the nanite consumption rate." + id = "purging_plus_nanites" + program_type = /datum/nanite_program/purging_advanced + category = list("Medical Nanites") + +/datum/design/nanites/brain_heal + name = "Neural Regeneration" + desc = "The nanites fix neural connections in the host's brain, reversing brain damage and minor traumas." + id = "brainheal_nanites" + program_type = /datum/nanite_program/brain_heal + category = list("Medical Nanites") + +/datum/design/nanites/brain_heal_advanced + name = "Neural Reimaging" + desc = "The nanites are able to backup and restore the host's neural connections, potentially replacing entire chunks of missing or damaged brain matter." + id = "brainheal_plus_nanites" + program_type = /datum/nanite_program/brain_heal_advanced + category = list("Medical Nanites") + +/datum/design/nanites/blood_restoring + name = "Blood Regeneration" + desc = "The nanites stimulate and boost blood cell production in the host." + id = "bloodheal_nanites" + program_type = /datum/nanite_program/blood_restoring + category = list("Medical Nanites") + +/datum/design/nanites/repairing + name = "Mechanical Repair" + desc = "The nanites fix damage in the host's mechanical limbs." + id = "repairing_nanites" + program_type = /datum/nanite_program/repairing + category = list("Medical Nanites") + +/datum/design/nanites/defib + name = "Defibrillation" + desc = "The nanites, when triggered, send a defibrillating shock to the host's heart." + id = "defib_nanites" + program_type = /datum/nanite_program/triggered/defib + category = list("Medical Nanites") + + +////////////////////AUGMENTATION NANITES////////////////////////////////////// + +/datum/design/nanites/nervous + name = "Nerve Support" + desc = "The nanites act as a secondary nervous system, reducing the amount of time the host is stunned." + id = "nervous_nanites" + program_type = /datum/nanite_program/nervous + category = list("Augmentation Nanites") + +/datum/design/nanites/hardening + name = "Dermal Hardening" + desc = "The nanites form a mesh under the host's skin, protecting them from melee and bullet impacts." + id = "hardening_nanites" + program_type = /datum/nanite_program/hardening + category = list("Augmentation Nanites") + +/datum/design/nanites/refractive + name = "Dermal Refractive Surface" + desc = "The nanites form a membrane above the host's skin, reducing the effect of laser and energy impacts." + id = "refractive_nanites" + program_type = /datum/nanite_program/refractive + category = list("Augmentation Nanites") + +/datum/design/nanites/coagulating + name = "Rapid Coagulation" + desc = "The nanites induce rapid coagulation when the host is wounded, dramatically reducing bleeding rate." + id = "coagulating_nanites" + program_type = /datum/nanite_program/coagulating + category = list("Augmentation Nanites") + +/datum/design/nanites/conductive + name = "Electric Conduction" + desc = "The nanites act as a grounding rod for electric shocks, protecting the host. Shocks can still damage the nanites themselves." + id = "conductive_nanites" + program_type = /datum/nanite_program/conductive + category = list("Augmentation Nanites") + +/datum/design/nanites/adrenaline + name = "Adrenaline Burst" + desc = "The nanites cause a burst of adrenaline when triggered, waking the host from stuns and temporarily increasing their speed." + id = "adrenaline_nanites" + program_type = /datum/nanite_program/triggered/adrenaline + category = list("Augmentation Nanites") + +/datum/design/nanites/mindshield + name = "Mental Barrier" + desc = "The nanites form a protective membrane around the host's brain, shielding them from abnormal influences while they're active." + id = "mindshield_nanites" + program_type = /datum/nanite_program/mindshield + category = list("Augmentation Nanites") + +////////////////////DEFECTIVE NANITES////////////////////////////////////// + +/datum/design/nanites/glitch + name = "Glitch" + desc = "A heavy software corruption that causes nanites to gradually break down." + id = "glitch_nanites" + program_type = /datum/nanite_program/glitch + category = list("Defective Nanites") + +/datum/design/nanites/necrotic + name = "Necrosis" + desc = "The nanites attack internal tissues indiscriminately, causing widespread damage." + id = "necrotic_nanites" + program_type = /datum/nanite_program/necrotic + category = list("Defective Nanites") + +/datum/design/nanites/toxic + name = "Toxin Buildup" + desc = "The nanites cause a slow but constant toxin buildup inside the host." + id = "toxic_nanites" + program_type = /datum/nanite_program/toxic + category = list("Defective Nanites") + +/datum/design/nanites/suffocating + name = "Hypoxemia" + desc = "The nanites prevent the host's blood from absorbing oxygen efficiently." + id = "suffocating_nanites" + program_type = /datum/nanite_program/suffocating + category = list("Defective Nanites") + +/datum/design/nanites/brain_misfire + name = "Brain Misfire" + desc = "The nanites interfere with neural pathways, causing minor psychological disturbances." + id = "brainmisfire_nanites" + program_type = /datum/nanite_program/brain_misfire + category = list("Defective Nanites") + +/datum/design/nanites/skin_decay + name = "Dermalysis" + desc = "The nanites attack skin cells, causing irritation, rashes, and minor damage." + id = "skindecay_nanites" + program_type = /datum/nanite_program/skin_decay + category = list("Defective Nanites") + +/datum/design/nanites/nerve_decay + name = "Nerve Decay" + desc = "The nanites attack the host's nerves, causing lack of coordination and short bursts of paralysis." + id = "nervedecay_nanites" + program_type = /datum/nanite_program/nerve_decay + category = list("Defective Nanites") + +/datum/design/nanites/brain_decay + name = "Brain-Eating Nanites" + desc = "Damages brain cells, gradually decreasing the host's cognitive functions." + id = "braindecay_nanites" + program_type = /datum/nanite_program/brain_decay + category = list("Defective Nanites") + +////////////////////WEAPONIZED NANITES///////////////////////////////////// + +/datum/design/nanites/flesh_eating + name = "Cellular Breakdown" + desc = "The nanites destroy cellular structures in the host's body, causing brute damage." + id = "flesheating_nanites" + program_type = /datum/nanite_program/flesh_eating + category = list("Weaponized Nanites") + +/datum/design/nanites/poison + name = "Poisoning" + desc = "The nanites deliver poisonous chemicals to the host's internal organs, causing toxin damage and vomiting." + id = "poison_nanites" + program_type = /datum/nanite_program/poison + category = list("Weaponized Nanites") + +/datum/design/nanites/memory_leak + name = "Memory Leak" + desc = "This program invades the memory space used by other programs, causing frequent corruptions and errors." + id = "memleak_nanites" + program_type = /datum/nanite_program/memory_leak + category = list("Weaponized Nanites") + +/datum/design/nanites/aggressive_replication + name = "Aggressive Replication" + desc = "Nanites will consume organic matter to improve their replication rate, damaging the host." + id = "aggressive_nanites" + program_type = /datum/nanite_program/aggressive_replication + category = list("Weaponized Nanites") + +/datum/design/nanites/meltdown + name = "Meltdown" + desc = "Causes an internal meltdown inside the nanites, causing internal burns inside the host as well as rapidly destroying the nanite population.\ + Sets the nanites' safety threshold to 0 when activated." + id = "meltdown_nanites" + program_type = /datum/nanite_program/meltdown + category = list("Weaponized Nanites") + +/datum/design/nanites/cryo + name = "Cryogenic Treatment" + desc = "The nanites rapidly skin heat through the host's skin, lowering their temperature." + id = "cryo_nanites" + program_type = /datum/nanite_program/cryo + category = list("Weaponized Nanites") + +/datum/design/nanites/pyro + name = "Sub-Dermal Combustion" + desc = "The nanites cause buildup of flammable fluids under the host's skin, then ignites them." + id = "pyro_nanites" + program_type = /datum/nanite_program/pyro + category = list("Weaponized Nanites") + +/datum/design/nanites/heart_stop + name = "Heart-Stopper" + desc = "Stops the host's heart when triggered; restarts it if triggered again." + id = "heartstop_nanites" + program_type = /datum/nanite_program/triggered/heart_stop + category = list("Weaponized Nanites") + +/datum/design/nanites/explosive + name = "Chain Detonation" + desc = "Blows up all the nanites inside the host in a chain reaction when triggered." + id = "explosive_nanites" + program_type = /datum/nanite_program/triggered/explosive + category = list("Weaponized Nanites") + +/datum/design/nanites/mind_control + name = "Mind Control" + desc = "The nanites imprint an absolute directive onto the host's brain while they're active." + id = "mindcontrol_nanites" + program_type = /datum/nanite_program/mind_control + category = list("Weaponized Nanites") + +////////////////////SUPPRESSION NANITES////////////////////////////////////// + +/datum/design/nanites/shock + name = "Electric Shock" + desc = "The nanites shock the host when triggered. Destroys a large amount of nanites!" + id = "shock_nanites" + program_type = /datum/nanite_program/triggered/shocking + category = list("Suppression Nanites") + +/datum/design/nanites/stun + name = "Neural Shock" + desc = "The nanites pulse the host's nerves when triggered, inapacitating them for a short period." + id = "stun_nanites" + program_type = /datum/nanite_program/triggered/stun + category = list("Suppression Nanites") + +/datum/design/nanites/sleepy + name = "Sleep Induction" + desc = "The nanites cause rapid narcolepsy when triggered." + id = "sleep_nanites" + program_type = /datum/nanite_program/triggered/sleepy + category = list("Suppression Nanites") + +/datum/design/nanites/paralyzing + name = "Paralysis" + desc = "The nanites actively suppress nervous pulses, effectively paralyzing the host." + id = "paralyzing_nanites" + program_type = /datum/nanite_program/paralyzing + category = list("Suppression Nanites") + +/datum/design/nanites/fake_death + name = "Death Simulation" + desc = "The nanites induce a death-like coma into the host, able to fool most medical scans." + id = "fakedeath_nanites" + program_type = /datum/nanite_program/fake_death + category = list("Suppression Nanites") + +/datum/design/nanites/pacifying + name = "Pacification" + desc = "The nanites suppress the aggression center of the brain, preventing the host from causing direct harm to others." + id = "pacifying_nanites" + program_type = /datum/nanite_program/pacifying + category = list("Suppression Nanites") + +/datum/design/nanites/blinding + name = "Blindness" + desc = "The nanites suppress the host's ocular nerves, blinding them while they're active." + id = "blinding_nanites" + program_type = /datum/nanite_program/blinding + category = list("Suppression Nanites") + +/datum/design/nanites/mute + name = "Mute" + desc = "The nanites suppress the host's speech, making them mute while they're active." + id = "mute_nanites" + program_type = /datum/nanite_program/mute + category = list("Suppression Nanites") + +/datum/design/nanites/voice + name = "Skull Echo" + desc = "The nanites echo a synthesized message inside the host's skull." + id = "voice_nanites" + program_type = /datum/nanite_program/triggered/voice + category = list("Suppression Nanites") + +/datum/design/nanites/speech + name = "Forced Speech" + desc = "The nanites force the host to say a pre-programmed sentence when triggered." + id = "speech_nanites" + program_type = /datum/nanite_program/triggered/speech + category = list("Suppression Nanites") + +/datum/design/nanites/hallucination + name = "Hallucination" + desc = "The nanites make the host see and hear things that aren't real." + id = "hallucination_nanites" + program_type = /datum/nanite_program/triggered/hallucination + category = list("Suppression Nanites") + +////////////////////SENSOR NANITES////////////////////////////////////// + +/datum/design/nanites/sensor_health + name = "Health Sensor" + desc = "The nanites receive a signal when the host's health is above/below a certain percentage." + id = "sensor_health_nanites" + program_type = /datum/nanite_program/sensor/health + category = list("Sensor Nanites") + +/datum/design/nanites/sensor_damage + name = "Damage Sensor" + desc = "The nanites receive a signal when a host's specific damage type is above/below a target value." + id = "sensor_damage_nanites" + program_type = /datum/nanite_program/sensor/damage + category = list("Sensor Nanites") + +/datum/design/nanites/sensor_crit + name = "Critical Health Sensor" + desc = "The nanites receive a signal when the host first reaches critical health." + id = "sensor_crit_nanites" + program_type = /datum/nanite_program/sensor/crit + category = list("Sensor Nanites") + +/datum/design/nanites/sensor_death + name = "Death Sensor" + desc = "The nanites receive a signal when they detect the host is dead." + id = "sensor_death_nanites" + program_type = /datum/nanite_program/sensor/death + category = list("Sensor Nanites") + +/datum/design/nanites/sensor_voice + name = "Voice Sensor" + desc = "Sends a signal when the nanites hear a determined word or sentence." + id = "sensor_voice_nanites" + program_type = /datum/nanite_program/sensor/voice + category = list("Sensor Nanites") + +/datum/design/nanites/sensor__nanite_volume + name = "Nanite Volume Sensor" + desc = "The nanites receive a signal when the nanite supply is above/below a certain percentage." + id = "sensor_nanite_volume" + program_type = /datum/nanite_program/sensor/nanite_volume + category = list("Sensor Nanites") \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm new file mode 100644 index 00000000000..6f58cb2ad90 --- /dev/null +++ b/code/modules/research/nanites/nanite_chamber.dm @@ -0,0 +1,227 @@ +/obj/machinery/nanite_chamber + name = "nanite chamber" + desc = "A device that can scan, reprogram, and inject nanites." + circuit = /obj/item/circuitboard/machine/nanite_chamber + icon = 'icons/obj/machines/nanite_chamber.dmi' + icon_state = "nanite_chamber" + use_power = IDLE_POWER_USE + anchored = TRUE + density = TRUE + idle_power_usage = 50 + active_power_usage = 300 + occupant_typecache = list(/mob/living) + + var/obj/machinery/computer/nanite_chamber_control/console + var/locked = FALSE + var/breakout_time = 1200 + var/scan_level + var/busy = FALSE + var/busy_icon_state + var/busy_message + var/message_cooldown = 0 + +/obj/machinery/nanite_chamber/RefreshParts() + scan_level = 0 + for(var/obj/item/stock_parts/scanning_module/P in component_parts) + scan_level += P.rating + +/obj/machinery/nanite_chamber/proc/set_busy(status, message, working_icon) + busy = status + busy_message = message + busy_icon_state = working_icon + update_icon() + +/obj/machinery/nanite_chamber/proc/set_safety(threshold) + if(!occupant) + return + SEND_SIGNAL(occupant, COMSIG_NANITE_SET_SAFETY, threshold) + +/obj/machinery/nanite_chamber/proc/set_cloud(cloud_id) + if(!occupant) + return + SEND_SIGNAL(occupant, COMSIG_NANITE_SET_CLOUD, cloud_id) + +/obj/machinery/nanite_chamber/proc/inject_nanites() + if(stat & (NOPOWER|BROKEN)) + return + if((stat & MAINT) || panel_open) + return + if(!occupant || busy) + return + + var/locked_state = locked + locked = TRUE + + //TODO OMINOUS MACHINE SOUNDS + set_busy(TRUE, "Initializing injection protocol...", "[initial(icon_state)]_raising") + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Analyzing host bio-structure...", "[initial(icon_state)]_active"),20) + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Priming nanites...", "[initial(icon_state)]_active"),40) + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Injecting...", "[initial(icon_state)]_active"),70) + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Activating nanites...", "[initial(icon_state)]_falling"),110) + addtimer(CALLBACK(src, .proc/complete_injection, locked_state),130) + +/obj/machinery/nanite_chamber/proc/complete_injection(locked_state) + //TODO MACHINE DING + locked = locked_state + set_busy(FALSE) + if(!occupant) + return + occupant.AddComponent(/datum/component/nanites, 100) + +/obj/machinery/nanite_chamber/proc/install_program(datum/nanite_program/NP) + if(stat & (NOPOWER|BROKEN)) + return + if((stat & MAINT) || panel_open) + return + if(!occupant || busy) + return + + var/locked_state = locked + locked = TRUE + + //TODO COMPUTERY MACHINE SOUNDS + set_busy(TRUE, "Initializing installation protocol...", "[initial(icon_state)]_raising") + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Connecting to nanite framework...", "[initial(icon_state)]_active"),20) + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Installing program...", "[initial(icon_state)]_falling"),35) + addtimer(CALLBACK(src, .proc/complete_installation, locked_state, NP),55) + +/obj/machinery/nanite_chamber/proc/complete_installation(locked_state, datum/nanite_program/NP) + //TODO MACHINE DING + locked = locked_state + set_busy(FALSE) + if(!occupant) + return + + SEND_SIGNAL(occupant, COMSIG_NANITE_ADD_PROGRAM, NP.copy()) + +/obj/machinery/nanite_chamber/proc/uninstall_program(datum/nanite_program/NP) + if(stat & (NOPOWER|BROKEN)) + return + if((stat & MAINT) || panel_open) + return + if(!occupant || busy) + return + + var/locked_state = locked + locked = TRUE + + //TODO COMPUTERY MACHINE SOUNDS + set_busy(TRUE, "Initializing uninstallation protocol...", "[initial(icon_state)]_raising") + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Connecting to nanite framework...", "[initial(icon_state)]_active"),20) + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "Uninstalling program...", "[initial(icon_state)]_falling"),35) + addtimer(CALLBACK(src, .proc/complete_uninstallation, locked_state, NP),55) + +/obj/machinery/nanite_chamber/proc/complete_uninstallation(locked_state, datum/nanite_program/NP) + //TODO MACHINE DING + locked = locked_state + set_busy(FALSE) + if(!occupant) + return + qdel(NP) + +/obj/machinery/nanite_chamber/update_icon() + cut_overlays() + + if((stat & MAINT) || panel_open) + add_overlay("maint") + + else if(!(stat & (NOPOWER|BROKEN))) + if(busy || locked) + add_overlay("red") + if(locked) + add_overlay("bolted") + else + add_overlay("green") + + //running and someone in there + if(occupant) + if(busy) + icon_state = busy_icon_state + else + icon_state = initial(icon_state)+ "_occupied" + return + + //running + icon_state = initial(icon_state)+ (state_open ? "_open" : "") + +/obj/machinery/nanite_chamber/power_change() + ..() + update_icon() + +/obj/machinery/nanite_chamber/proc/toggle_open(mob/user) + if(panel_open) + to_chat(user, "Close the maintenance panel first.") + return + + if(state_open) + close_machine() + return + + else if(locked) + to_chat(user, "The bolts are locked down, securing the door shut.") + return + + open_machine() + +/obj/machinery/nanite_chamber/container_resist(mob/living/user) + if(!locked) + open_machine() + return + if(busy) + return + user.changeNext_move(CLICK_CD_BREAKOUT) + user.last_special = world.time + CLICK_CD_BREAKOUT + user.visible_message("You see [user] kicking against the door of [src]!", \ + "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ + "You hear a metallic creaking from [src].") + if(do_after(user,(breakout_time), target = src)) + if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked || busy) + return + locked = FALSE + user.visible_message("[user] successfully broke out of [src]!", \ + "You successfully break out of [src]!") + open_machine() + +/obj/machinery/nanite_chamber/close_machine(mob/living/carbon/user) + if(!state_open) + return FALSE + + ..(user) + return TRUE + +/obj/machinery/nanite_chamber/open_machine() + if(state_open) + return FALSE + + ..() + + return TRUE + +/obj/machinery/nanite_chamber/relaymove(mob/user as mob) + if(user.stat || locked) + if(message_cooldown <= world.time) + message_cooldown = world.time + 50 + to_chat(user, "[src]'s door won't budge!") + return + open_machine() + +/obj/machinery/nanite_chamber/attackby(obj/item/I, mob/user, params) + if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... + update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed + return + + if(default_pry_open(I)) + return + + if(default_deconstruction_crowbar(I)) + return + + return ..() + +/obj/machinery/nanite_chamber/interact(mob/user) + toggle_open(user) + +/obj/machinery/nanite_chamber/MouseDrop_T(mob/target, mob/user) + if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) + return + close_machine(target) \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm new file mode 100644 index 00000000000..31441788b87 --- /dev/null +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -0,0 +1,158 @@ +/obj/machinery/computer/nanite_chamber_control + name = "nanite chamber control console" + desc = "Controls a connected nanite chamber. Can inoculate nanites, load programs, and analyze existing nanite swarms." + var/obj/machinery/nanite_chamber/chamber + var/obj/item/disk/nanite_program/disk + circuit = /obj/item/circuitboard/computer/nanite_chamber_control + icon_screen = "nanite_chamber_control" + +/obj/machinery/computer/nanite_chamber_control/Initialize() + . = ..() + find_chamber() + +/obj/machinery/computer/nanite_chamber_control/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/disk/nanite_program)) + var/obj/item/disk/nanite_program/N = I + if(disk) + eject(user) + if(user.transferItemToLoc(N, src)) + to_chat(user, "You insert [N] into [src]") + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + disk = N + else + ..() + +/obj/machinery/computer/nanite_chamber_control/proc/eject(mob/living/user) + if(!disk) + return + if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(disk)) + disk.forceMove(drop_location()) + disk = null + +/obj/machinery/computer/nanite_chamber_control/proc/find_chamber() + for(var/direction in GLOB.cardinals) + var/C = locate(/obj/machinery/nanite_chamber, get_step(src, direction)) + if(C) + var/obj/machinery/nanite_chamber/NC = C + chamber = NC + NC.console = src + +/obj/machinery/computer/nanite_chamber_control/interact() + if(!chamber) + find_chamber() + ..() + +/obj/machinery/computer/nanite_chamber_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "nanite_chamber_control", name, 550, 800, master_ui, state) + ui.open() + +/obj/machinery/computer/nanite_chamber_control/ui_data() + var/list/data = list() + if(disk) + data["has_disk"] = TRUE + var/list/disk_data = list() + var/datum/nanite_program/P = disk.program + if(P) + data["has_program"] = TRUE + disk_data["name"] = P.name + disk_data["desc"] = P.desc + + disk_data["activated"] = P.activated + disk_data["activation_delay"] = P.activation_delay + disk_data["timer"] = P.timer + disk_data["activation_code"] = P.activation_code + disk_data["deactivation_code"] = P.deactivation_code + disk_data["kill_code"] = P.kill_code + disk_data["trigger_code"] = P.trigger_code + disk_data["timer_type"] = P.get_timer_type_text() + + var/list/extra_settings = list() + for(var/X in P.extra_settings) + var/list/setting = list() + setting["name"] = X + setting["value"] = P.get_extra_setting(X) + extra_settings += list(setting) + disk_data["extra_settings"] = extra_settings + if(LAZYLEN(extra_settings)) + disk_data["has_extra_settings"] = TRUE + data["disk"] = disk_data + + if(!chamber) + data["status_msg"] = "No chamber detected." + return data + + if(!chamber.occupant) + data["status_msg"] = "No occupant detected." + return data + + var/mob/living/L = chamber.occupant + + if(!(MOB_ORGANIC in L.mob_biotypes) && !(MOB_UNDEAD in L.mob_biotypes)) + data["status_msg"] = "Occupant not compatible with nanites." + return data + + if(chamber.busy) + data["status_msg"] = chamber.busy_message + return data + + data["scan_level"] = chamber.scan_level + data["locked"] = chamber.locked + data["occupant_name"] = chamber.occupant.name + + SEND_SIGNAL(L, COMSIG_NANITE_UI_DATA, data, chamber.scan_level) + + return data + +/obj/machinery/computer/nanite_chamber_control/ui_act(action, params) + if(..()) + return + switch(action) + if("toggle_lock") + chamber.locked = !chamber.locked + chamber.update_icon() + . = TRUE + if("eject") + eject(usr) + . = TRUE + if("set_safety") + var/threshold = input("Set safety threshold (0-500):", name, null) as null|num + if(!isnull(threshold)) + chamber.set_safety(CLAMP(round(threshold, 1),0,500)) + playsound(src, "terminal_type", 25, 0) + investigate_log("[key_name(chamber.occupant)]'s nanites' safety threshold was set to [threshold] by [key_name(usr)].", INVESTIGATE_NANITES) + . = TRUE + if("set_cloud") + var/cloud_id = input("Set cloud ID (1-100, 0 to disable):", name, null) as null|num + if(!isnull(cloud_id)) + chamber.set_cloud(CLAMP(round(cloud_id, 1),0,100)) + playsound(src, "terminal_type", 25, 0) + investigate_log("[key_name(chamber.occupant)]'s nanites' cloud id was set to [cloud_id] by [key_name(usr)].", INVESTIGATE_NANITES) + . = TRUE + if("connect_chamber") + find_chamber() + . = TRUE + if("nanite_injection") + playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0) + chamber.inject_nanites() + investigate_log("[key_name(chamber.occupant)] was injected with nanites by [key_name(usr)] using a nanite chamber.", INVESTIGATE_NANITES) + . = TRUE + if("add_program") + if(!disk || !chamber || !chamber.occupant) + return + playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0) + chamber.install_program(disk.program) + investigate_log("Program of type [disk.program.type] was installed into [key_name(chamber.occupant)]'s nanites with a nanite chamber by [key_name(usr)].", INVESTIGATE_NANITES) + . = TRUE + if("remove_program") + if(!chamber || !chamber.occupant) + return + playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0) + var/list/nanite_programs = list() + SEND_SIGNAL(chamber.occupant, COMSIG_NANITE_GET_PROGRAMS, nanite_programs) + if(LAZYLEN(nanite_programs)) + var/datum/nanite_program/P = nanite_programs[text2num(params["program_id"])] + chamber.uninstall_program(P) + investigate_log("Program of type [P.type] was uninstalled from [key_name(chamber.occupant)]'s nanites with a nanite chamber by [key_name(usr)].", INVESTIGATE_NANITES) + . = TRUE \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_cloud_controller.dm b/code/modules/research/nanites/nanite_cloud_controller.dm new file mode 100644 index 00000000000..8218f250bb6 --- /dev/null +++ b/code/modules/research/nanites/nanite_cloud_controller.dm @@ -0,0 +1,196 @@ +/obj/machinery/computer/nanite_cloud_controller + name = "nanite cloud controller" + desc = "Stores and controls nanite cloud backups." + circuit = /obj/item/circuitboard/computer/nanite_cloud_controller + icon = 'icons/obj/machines/research.dmi' + icon_state = "nanite_cloud_controller" + var/obj/item/disk/nanite_program/disk + var/list/datum/nanite_cloud_backup/cloud_backups = list() + var/current_view = 0 //0 is the main menu, any other number is the page of the backup with that ID + +/obj/machinery/computer/nanite_cloud_controller/Destroy() + QDEL_LIST(cloud_backups) //rip backups + eject() + return ..() + +/obj/machinery/computer/nanite_cloud_controller/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/disk/nanite_program)) + var/obj/item/disk/nanite_program/N = I + if(disk) + eject(user) + if(user.transferItemToLoc(N, src)) + to_chat(user, "You insert [N] into [src]") + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + disk = N + else + ..() + +/obj/machinery/computer/nanite_cloud_controller/proc/eject(mob/living/user) + if(!disk) + return + if(!istype(user) || !Adjacent(user) ||!user.put_in_active_hand(disk)) + disk.forceMove(drop_location()) + disk = null + +/obj/machinery/computer/nanite_cloud_controller/proc/get_backup(cloud_id) + for(var/I in cloud_backups) + var/datum/nanite_cloud_backup/backup = I + if(backup.cloud_id == cloud_id) + return backup + +/obj/machinery/computer/nanite_cloud_controller/proc/generate_backup(cloud_id, mob/user) + if(SSnanites.get_cloud_backup(cloud_id, TRUE)) + to_chat(user, "Cloud ID already registered.") + return + + var/datum/nanite_cloud_backup/backup = new(src) + var/datum/component/nanites/cloud_copy = new(backup) + backup.cloud_id = cloud_id + backup.nanites = cloud_copy + investigate_log("[key_name(user)] created a new nanite cloud backup with id #[cloud_id]", INVESTIGATE_NANITES) + +/obj/machinery/computer/nanite_cloud_controller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "nanite_cloud_control", name, 600, 800, master_ui, state) + ui.open() + +/obj/machinery/computer/nanite_cloud_controller/ui_data() + var/list/data = list() + if(disk) + data["has_disk"] = TRUE + var/list/disk_data = list() + var/datum/nanite_program/P = disk.program + if(P) + data["has_program"] = TRUE + disk_data["name"] = P.name + disk_data["desc"] = P.desc + disk_data["use_rate"] = P.use_rate + disk_data["can_trigger"] = P.can_trigger + disk_data["trigger_cost"] = P.trigger_cost + disk_data["trigger_cooldown"] = P.trigger_cooldown / 10 + + disk_data["activated"] = P.activated + disk_data["activation_delay"] = P.activation_delay + disk_data["timer"] = P.timer + disk_data["activation_code"] = P.activation_code + disk_data["deactivation_code"] = P.deactivation_code + disk_data["kill_code"] = P.kill_code + disk_data["trigger_code"] = P.trigger_code + disk_data["timer_type"] = P.get_timer_type_text() + + var/list/extra_settings = list() + for(var/X in P.extra_settings) + var/list/setting = list() + setting["name"] = X + setting["value"] = P.get_extra_setting(X) + extra_settings += list(setting) + disk_data["extra_settings"] = extra_settings + if(LAZYLEN(extra_settings)) + disk_data["has_extra_settings"] = TRUE + data["disk"] = disk_data + + data["current_view"] = current_view + if(current_view) + var/datum/nanite_cloud_backup/backup = get_backup(current_view) + if(backup) + var/datum/component/nanites/nanites = backup.nanites + data["cloud_backup"] = TRUE + var/list/cloud_programs = list() + var/id = 1 + for(var/datum/nanite_program/P in nanites.programs) + var/list/cloud_program = list() + cloud_program["name"] = P.name + cloud_program["desc"] = P.desc + cloud_program["id"] = id + cloud_program["use_rate"] = P.use_rate + cloud_program["can_trigger"] = P.can_trigger + cloud_program["trigger_cost"] = P.trigger_cost + cloud_program["trigger_cooldown"] = P.trigger_cooldown / 10 + cloud_program["activated"] = P.activated + cloud_program["activation_delay"] = P.activation_delay + cloud_program["timer"] = P.timer + cloud_program["timer_type"] = P.get_timer_type_text() + cloud_program["activation_code"] = P.activation_code + cloud_program["deactivation_code"] = P.deactivation_code + cloud_program["kill_code"] = P.kill_code + cloud_program["trigger_code"] = P.trigger_code + var/list/extra_settings = list() + for(var/X in P.extra_settings) + var/list/setting = list() + setting["name"] = X + setting["value"] = P.get_extra_setting(X) + extra_settings += list(setting) + cloud_program["extra_settings"] = extra_settings + if(LAZYLEN(extra_settings)) + cloud_program["has_extra_settings"] = TRUE + id++ + cloud_programs += list(cloud_program) + data["cloud_programs"] = cloud_programs + else + var/list/backup_list = list() + for(var/X in cloud_backups) + var/datum/nanite_cloud_backup/backup = X + var/list/cloud_backup = list() + cloud_backup["cloud_id"] = backup.cloud_id + backup_list += list(cloud_backup) + data["cloud_backups"] = backup_list + return data + +/obj/machinery/computer/nanite_cloud_controller/ui_act(action, params) + if(..()) + return + switch(action) + if("eject") + eject(usr) + . = TRUE + if("set_view") + current_view = text2num(params["view"]) + . = TRUE + if("create_backup") + var/cloud_id = input("Choose a cloud ID (1-100):", name, null) as null|num + if(!isnull(cloud_id)) + playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) + cloud_id = CLAMP(round(cloud_id, 1),1,100) + generate_backup(cloud_id, usr) + . = TRUE + if("delete_backup") + var/datum/nanite_cloud_backup/backup = get_backup(current_view) + if(backup) + playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) + qdel(backup) + investigate_log("[key_name(usr)] deleted the nanite cloud backup #[current_view]", INVESTIGATE_NANITES) + . = TRUE + if("upload_program") + if(disk && disk.program) + var/datum/nanite_cloud_backup/backup = get_backup(current_view) + if(backup) + playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) + var/datum/component/nanites/nanites = backup.nanites + nanites.add_program(disk.program.copy()) + investigate_log("[key_name(usr)] uploaded program [disk.program.name] to cloud #[current_view]", INVESTIGATE_NANITES) + . = TRUE + if("remove_program") + var/datum/nanite_cloud_backup/backup = get_backup(current_view) + if(backup) + playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) + var/datum/component/nanites/nanites = backup.nanites + var/datum/nanite_program/P = nanites.programs[text2num(params["program_id"])] + investigate_log("[key_name(usr)] deleted program [P.name] from cloud #[current_view]", INVESTIGATE_NANITES) + qdel(P) + . = TRUE + +/datum/nanite_cloud_backup + var/cloud_id = 0 + var/datum/component/nanites/nanites + var/obj/machinery/computer/nanite_cloud_controller/storage + +/datum/nanite_cloud_backup/New(obj/machinery/computer/nanite_cloud_controller/_storage) + storage = _storage + storage.cloud_backups += src + SSnanites.cloud_backups += src + +/datum/nanite_cloud_backup/Destroy() + storage.cloud_backups -= src + SSnanites.cloud_backups -= src + return ..() \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_hijacker.dm b/code/modules/research/nanites/nanite_hijacker.dm new file mode 100644 index 00000000000..8c5ac0a84bf --- /dev/null +++ b/code/modules/research/nanites/nanite_hijacker.dm @@ -0,0 +1,151 @@ +/obj/item/nanite_hijacker + name = "nanite remote control" //fake name + desc = "A device that can load nanite programming disks, edit them at will, and imprint them to nanites remotely." + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/device.dmi' + icon_state = "nanite_remote" + item_flags = NOBLUDGEON + var/obj/item/disk/nanite_program/disk + var/datum/nanite_program/program + +/obj/item/nanite_hijacker/AltClick(mob/user) + . = ..() + if(!user.canUseTopic(src, BE_CLOSE)) + return + if(disk) + eject() + +/obj/item/nanite_hijacker/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/disk/nanite_program)) + var/obj/item/disk/nanite_program/N = I + if(disk) + eject() + if(user.transferItemToLoc(N, src)) + to_chat(user, "You insert [N] into [src]") + disk = N + program = N.program + else + ..() + +/obj/item/nanite_hijacker/proc/eject(mob/living/user) + if(!disk) + return + if(!istype(user) || !Adjacent(user) || !user.put_in_hand(disk)) + disk.forceMove(drop_location()) + disk = null + program = null + +/obj/item/nanite_hijacker/afterattack(atom/target, mob/user, etc) + if(!disk || !disk.program) + return + if(isliving(target)) + var/success = SEND_SIGNAL(target, COMSIG_NANITE_ADD_PROGRAM, program.copy()) + switch(success) + if(NONE) + to_chat(user, "You don't detect any nanites in [target].") + if(COMPONENT_PROGRAM_INSTALLED) + to_chat(user, "You insert the currently loaded program into [target]'s nanites.") + if(COMPONENT_PROGRAM_NOT_INSTALLED) + to_chat(user, "You try to insert the currently loaded program into [target]'s nanites, but the installation fails.") + +//Same UI as the nanite programmer, as it pretty much does the same +/obj/item/nanite_hijacker/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "nanite_programmer", "Internal Nanite Programmer", 420, 800, master_ui, state) + ui.open() + +/obj/item/nanite_hijacker/ui_data() + var/list/data = list() + data["has_disk"] = istype(disk) + data["has_program"] = istype(program) + if(program) + data["name"] = program.name + data["desc"] = program.desc + data["use_rate"] = program.use_rate + data["can_trigger"] = program.can_trigger + data["trigger_cost"] = program.trigger_cost + data["trigger_cooldown"] = program.trigger_cooldown / 10 + + data["activated"] = program.activated + data["activation_delay"] = program.activation_delay + data["timer"] = program.timer + data["activation_code"] = program.activation_code + data["deactivation_code"] = program.deactivation_code + data["kill_code"] = program.kill_code + data["trigger_code"] = program.trigger_code + data["timer_type"] = program.get_timer_type_text() + + var/list/extra_settings = list() + for(var/X in program.extra_settings) + var/list/setting = list() + setting["name"] = X + setting["value"] = program.get_extra_setting(X) + extra_settings += list(setting) + data["extra_settings"] = extra_settings + if(LAZYLEN(extra_settings)) + data["has_extra_settings"] = TRUE + + return data + +/obj/item/nanite_hijacker/ui_act(action, params) + if(..()) + return + switch(action) + if("eject") + eject(usr) + . = TRUE + if("toggle_active") + program.activated = !program.activated //we don't use the activation procs since we aren't in a mob + if(program.activated) + program.activation_delay = 0 + . = TRUE + if("set_code") + var/new_code = input("Set code (0000-9999):", name, null) as null|num + if(!isnull(new_code)) + new_code = CLAMP(round(new_code, 1),0,9999) + else + return + + var/target_code = params["target_code"] + switch(target_code) + if("activation") + program.activation_code = CLAMP(round(new_code, 1),0,9999) + if("deactivation") + program.deactivation_code = CLAMP(round(new_code, 1),0,9999) + if("kill") + program.kill_code = CLAMP(round(new_code, 1),0,9999) + if("trigger") + program.trigger_code = CLAMP(round(new_code, 1),0,9999) + . = TRUE + if("set_extra_setting") + program.set_extra_setting(usr, params["target_setting"]) + . = TRUE + if("set_activation_delay") + var/delay = input("Set activation delay in seconds (0-1800):", name, program.activation_delay) as null|num + if(!isnull(delay)) + delay = CLAMP(round(delay, 1),0,1800) + program.activation_delay = delay + if(delay) + program.activated = FALSE + . = TRUE + if("set_timer") + var/timer = input("Set timer in seconds (10-3600):", name, program.timer) as null|num + if(!isnull(timer)) + if(!timer == 0) + timer = CLAMP(round(timer, 1),10,3600) + program.timer = timer + . = TRUE + if("set_timer_type") + var/new_type = input("Choose the timer effect","Timer Effect") as null|anything in list("Deactivate","Self-Delete","Trigger","Reset Activation Timer") + if(new_type) + switch(new_type) + if("Deactivate") + program.timer_type = NANITE_TIMER_DEACTIVATE + if("Self-Delete") + program.timer_type = NANITE_TIMER_SELFDELETE + if("Trigger") + program.timer_type = NANITE_TIMER_TRIGGER + if("Reset Activation Timer") + program.timer_type = NANITE_TIMER_RESET + . = TRUE \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_misc_items.dm b/code/modules/research/nanites/nanite_misc_items.dm new file mode 100644 index 00000000000..cbcdfb0f9f2 --- /dev/null +++ b/code/modules/research/nanites/nanite_misc_items.dm @@ -0,0 +1,9 @@ +/obj/item/nanite_injector + name = "nanite injector (FOR TESTING)" + desc = "Injects nanites into the user." + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/device.dmi' + icon_state = "nanite_remote" + +/obj/item/nanite_injector/attack_self(mob/user) + user.AddComponent(/datum/component/nanites, 150) \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm new file mode 100644 index 00000000000..81c5a44527d --- /dev/null +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -0,0 +1,118 @@ +/obj/machinery/nanite_program_hub + name = "nanite program hub" + desc = "Compiles nanite programs from the techweb servers and downloads them into disks." + icon = 'icons/obj/machines/research.dmi' + icon_state = "nanite_program_hub" + circuit = /obj/item/circuitboard/machine/nanite_program_hub + use_power = IDLE_POWER_USE + anchored = TRUE + density = TRUE + + var/obj/item/disk/nanite_program/disk + var/datum/techweb/linked_techweb + var/current_category = "Main" + var/detail_view = FALSE + var/categories = list( + list(name = "Utility Nanites"), + list(name = "Medical Nanites"), + list(name = "Sensor Nanites"), + list(name = "Augmentation Nanites"), + list(name = "Suppression Nanites"), + list(name = "Weaponized Nanites") + ) + +/obj/machinery/nanite_program_hub/Initialize() + . = ..() + linked_techweb = SSresearch.science_tech + +/obj/machinery/nanite_program_hub/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/disk/nanite_program)) + var/obj/item/disk/nanite_program/N = I + if(disk) + eject(user) + if(user.transferItemToLoc(N, src)) + to_chat(user, "You insert [N] into [src]") + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + disk = N + else + ..() + +/obj/machinery/nanite_program_hub/proc/eject(mob/living/user) + if(!disk) + return + if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(disk)) + disk.forceMove(drop_location()) + disk = null + +/obj/machinery/nanite_program_hub/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "nanite_program_hub", name, 500, 700, master_ui, state) + ui.set_autoupdate(FALSE) //to avoid making the whole program list every second + ui.open() + +/obj/machinery/nanite_program_hub/ui_data() + var/list/data = list() + if(disk) + data["has_disk"] = TRUE + var/list/disk_data = list() + var/datum/nanite_program/P = disk.program + if(P) + data["has_program"] = TRUE + disk_data["name"] = P.name + disk_data["desc"] = P.desc + data["disk"] = disk_data + + data["detail_view"] = detail_view + data["category"] = current_category + + if(current_category != "Main") + var/list/program_list = list() + for(var/i in linked_techweb.researched_designs) + var/datum/design/nanites/D = linked_techweb.researched_designs[i] + if(!istype(D)) + continue + if(current_category in D.category) + var/list/program_design = list() + program_design["id"] = D.id + program_design["name"] = D.name + program_design["desc"] = D.desc + program_list += list(program_design) + data["program_list"] = program_list + else + data["categories"] = categories + + return data + +/obj/machinery/nanite_program_hub/ui_act(action, params) + if(..()) + return + switch(action) + if("eject") + eject(usr) + . = TRUE + if("download") + if(!disk) + return + var/datum/design/nanites/downloaded = linked_techweb.isDesignResearchedID(params["program_id"]) //check if it's a valid design + if(!istype(downloaded)) + return + if(disk.program) + qdel(disk.program) + disk.program = new downloaded.program_type + disk.name = "[initial(disk.name)] \[[disk.program.name]\]" + playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0) + . = TRUE + if("set_category") + var/new_category = params["category"] + current_category = new_category + . = TRUE + if("toggle_details") + detail_view = !detail_view + . = TRUE + if("clear") + if(disk && disk.program) + qdel(disk.program) + disk.program = null + disk.name = initial(disk.name) + . = TRUE \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm new file mode 100644 index 00000000000..fd22fbf4b14 --- /dev/null +++ b/code/modules/research/nanites/nanite_programmer.dm @@ -0,0 +1,140 @@ +/obj/machinery/nanite_programmer + name = "nanite programmer" + desc = "A device that can edit nanite program disks to adjust their functionality." + var/obj/item/disk/nanite_program/disk + var/datum/nanite_program/program + circuit = /obj/item/circuitboard/machine/nanite_programmer + icon = 'icons/obj/machines/research.dmi' + icon_state = "nanite_programmer" + use_power = IDLE_POWER_USE + anchored = TRUE + density = TRUE + +/obj/machinery/nanite_programmer/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/disk/nanite_program)) + var/obj/item/disk/nanite_program/N = I + if(disk) + eject(user) + if(user.transferItemToLoc(N, src)) + to_chat(user, "You insert [N] into [src]") + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + disk = N + program = N.program + else + ..() + +/obj/machinery/nanite_programmer/proc/eject(mob/living/user) + if(!disk) + return + if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(disk)) + disk.forceMove(drop_location()) + disk = null + program = null + +/obj/machinery/nanite_programmer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "nanite_programmer", name, 600, 800, master_ui, state) + ui.open() + +/obj/machinery/nanite_programmer/ui_data() + var/list/data = list() + data["has_disk"] = istype(disk) + data["has_program"] = istype(program) + if(program) + data["name"] = program.name + data["desc"] = program.desc + data["use_rate"] = program.use_rate + data["can_trigger"] = program.can_trigger + data["trigger_cost"] = program.trigger_cost + data["trigger_cooldown"] = program.trigger_cooldown / 10 + + data["activated"] = program.activated + data["activation_delay"] = program.activation_delay + data["timer"] = program.timer + data["activation_code"] = program.activation_code + data["deactivation_code"] = program.deactivation_code + data["kill_code"] = program.kill_code + data["trigger_code"] = program.trigger_code + data["timer_type"] = program.get_timer_type_text() + + var/list/extra_settings = list() + for(var/X in program.extra_settings) + var/list/setting = list() + setting["name"] = X + setting["value"] = program.get_extra_setting(X) + extra_settings += list(setting) + data["extra_settings"] = extra_settings + if(LAZYLEN(extra_settings)) + data["has_extra_settings"] = TRUE + + return data + +/obj/machinery/nanite_programmer/ui_act(action, params) + if(..()) + return + switch(action) + if("eject") + eject(usr) + . = TRUE + if("toggle_active") + playsound(src, "terminal_type", 25, 0) + program.activated = !program.activated //we don't use the activation procs since we aren't in a mob + if(program.activated) + program.activation_delay = 0 + . = TRUE + if("set_code") + var/new_code = input("Set code (0000-9999):", name, null) as null|num + if(!isnull(new_code)) + playsound(src, "terminal_type", 25, 0) + new_code = CLAMP(round(new_code, 1),0,9999) + else + return + + playsound(src, "terminal_type", 25, 0) + var/target_code = params["target_code"] + switch(target_code) + if("activation") + program.activation_code = CLAMP(round(new_code, 1),0,9999) + if("deactivation") + program.deactivation_code = CLAMP(round(new_code, 1),0,9999) + if("kill") + program.kill_code = CLAMP(round(new_code, 1),0,9999) + if("trigger") + program.trigger_code = CLAMP(round(new_code, 1),0,9999) + . = TRUE + if("set_extra_setting") + program.set_extra_setting(usr, params["target_setting"]) + playsound(src, "terminal_type", 25, 0) + . = TRUE + if("set_activation_delay") + var/delay = input("Set activation delay in seconds (0-1800):", name, program.activation_delay) as null|num + if(!isnull(delay)) + playsound(src, "terminal_type", 25, 0) + delay = CLAMP(round(delay, 1),0,1800) + program.activation_delay = delay + if(delay) + program.activated = FALSE + . = TRUE + if("set_timer") + var/timer = input("Set timer in seconds (10-3600):", name, program.timer) as null|num + if(!isnull(timer)) + playsound(src, "terminal_type", 25, 0) + if(!timer == 0) + timer = CLAMP(round(timer, 1),10,3600) + program.timer = timer + . = TRUE + if("set_timer_type") + var/new_type = input("Choose the timer effect","Timer Effect") as null|anything in list("Deactivate","Self-Delete","Trigger","Reset Activation Timer") + if(new_type) + playsound(src, "terminal_type", 25, 0) + switch(new_type) + if("Deactivate") + program.timer_type = NANITE_TIMER_DEACTIVATE + if("Self-Delete") + program.timer_type = NANITE_TIMER_SELFDELETE + if("Trigger") + program.timer_type = NANITE_TIMER_TRIGGER + if("Reset Activation Timer") + program.timer_type = NANITE_TIMER_RESET + . = TRUE \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm new file mode 100644 index 00000000000..00581154d9e --- /dev/null +++ b/code/modules/research/nanites/nanite_programs.dm @@ -0,0 +1,254 @@ +/datum/nanite_program + var/name = "Generic Nanite Program" + var/desc = "Warn a coder if you can read this." + + var/datum/component/nanites/nanites + var/mob/living/host_mob + + var/use_rate = 0 //Amount of nanites used while active + var/unique = TRUE //If there can be more than one copy in the same nanites + var/can_trigger = FALSE //If the nanites have a trigger function (used for the programming UI) + var/trigger_cost = 0 //Amount of nanites required to trigger + var/trigger_cooldown = 50 //Deciseconds required between each trigger activation + var/next_trigger = 0 //World time required for the next trigger activation + var/timer_counter = 0 //Counts up while active. Used for the timer and the activation delay. + var/program_flags = NONE + var/passive_enabled = FALSE //If the nanites have an on/off-style effect, it's tracked by this var + + var/list/rogue_types = list(/datum/nanite_program/glitch) //What this can turn into if it glitches. + //As a rule of thumb, these should be: + //A: simpler + //B: negative + //C: affecting the same parts of the body, roughly + //B is mostly a consequence of A: it's always going to be simpler to cause damage than to repair it, so a software bug will not randomly make the flesh eating + //nanites learn how to repair cells. + //Given enough glitch-swapping you'll end up with stuff like necrotic or toxic nanites, which are very simple as they just try to eat what's in front of them + //or just lie around polluting the blood + + + //The following vars are customizable + var/activated = TRUE //If FALSE, the program won't process, disables passive effects, can't trigger and doesn't consume nanites + var/activation_delay = 0 //Seconds before the program self-activates. + var/timer = 0 //Seconds before the timer effect activates. Starts counting AFTER the activation delay + var/timer_type = NANITE_TIMER_DEACTIVATE //What happens when the timer runs out + + //Signal codes, these handle remote input to the nanites. If set to 0 they'll ignore signals. + var/activation_code = 0 //Code that activates the program [1-9999] + var/deactivation_code = 0 //Code that deactivates the program [1-9999] + var/kill_code = 0 //Code that permanently removes the program [1-9999] + var/trigger_code = 0 //Code that triggers the program (if available) [1-9999] + + //Extra settings + //Must be listed in text form, with the same title they'll be displayed in the programmer UI + //Changing these values is handled by set_extra_setting() + //Viewing these values is handled by get_extra_setting() + //Copying these values is handled by copy_extra_settings_to() + var/list/extra_settings = list() + +/datum/nanite_program/triggered + use_rate = 0 + trigger_cost = 5 + trigger_cooldown = 50 + can_trigger = TRUE + +/datum/nanite_program/Destroy() + if(host_mob) + if(activated) + deactivate() + if(passive_enabled) + disable_passive_effect() + if(nanites) + nanites.programs -= src + return ..() + +/datum/nanite_program/proc/copy() + var/datum/nanite_program/new_program = new type() + + new_program.activated = activated + new_program.activation_delay = activation_delay + new_program.timer = timer + new_program.timer_type = timer_type + new_program.activation_code = activation_code + new_program.deactivation_code = deactivation_code + new_program.kill_code = kill_code + new_program.trigger_code = trigger_code + copy_extra_settings_to(new_program) + + return new_program + +/datum/nanite_program/proc/copy_programming(datum/nanite_program/target, copy_activated = TRUE) + if(copy_activated) + target.activated = activated + target.activation_delay = activation_delay + target.timer = timer + target.timer_type = timer_type + target.activation_code = activation_code + target.deactivation_code = deactivation_code + target.kill_code = kill_code + target.trigger_code = trigger_code + copy_extra_settings_to(target) + +/datum/nanite_program/proc/set_extra_setting(user, setting) + return + +/datum/nanite_program/proc/get_extra_setting(setting) + return + +/datum/nanite_program/proc/copy_extra_settings_to(datum/nanite_program/target) + return + +/datum/nanite_program/proc/on_add(datum/component/nanites/_nanites) + nanites = _nanites + if(nanites.host_mob) + on_mob_add() + +/datum/nanite_program/proc/on_mob_add() + host_mob = nanites.host_mob + if(activated) //apply activation effects if it starts active + activate() + +/datum/nanite_program/proc/toggle() + if(!activated) + activate() + else + deactivate() + +/datum/nanite_program/proc/activate() + activated = TRUE + +/datum/nanite_program/proc/deactivate() + if(passive_enabled) + disable_passive_effect() + activated = FALSE + +/datum/nanite_program/proc/on_process() + timer_counter++ + + if(activation_delay) + if(activated && timer_counter < activation_delay) + deactivate() + else if(!activated && timer_counter >= activation_delay) + activate() + if(!activated) + return + + if(timer && timer_counter > timer) + if(timer_type == NANITE_TIMER_DEACTIVATE) + deactivate() + else if(timer_type == NANITE_TIMER_SELFDELETE) + qdel(src) + else if(can_trigger && timer_type == NANITE_TIMER_TRIGGER) + trigger() + timer_counter = activation_delay + else if(timer_type == NANITE_TIMER_RESET) + timer_counter = 0 + if(check_conditions() && consume_nanites(use_rate)) + if(!passive_enabled) + enable_passive_effect() + active_effect() + else + if(passive_enabled) + disable_passive_effect() + +//If false, disables active and passive effects, but doesn't consume nanites +//Can be used to avoid consuming nanites for nothing +/datum/nanite_program/proc/check_conditions() + return TRUE + +//Constantly procs as long as the program is active +/datum/nanite_program/proc/active_effect() + return + +//Procs once when the program activates +/datum/nanite_program/proc/enable_passive_effect() + passive_enabled = TRUE + +//Procs once when the program deactivates +/datum/nanite_program/proc/disable_passive_effect() + passive_enabled = FALSE + +/datum/nanite_program/proc/trigger() + if(!activated) + return FALSE + if(world.time < next_trigger) + return FALSE + if(!consume_nanites(trigger_cost)) + return FALSE + next_trigger = world.time + trigger_cooldown + return TRUE + +/datum/nanite_program/proc/consume_nanites(amount, force = FALSE) + return nanites.consume_nanites(amount, force) + +/datum/nanite_program/proc/on_emp(severity) + if(program_flags & NANITE_EMP_IMMUNE) + return + if(prob(80 / severity)) + software_error() + +/datum/nanite_program/proc/on_shock(shock_damage) + if(!program_flags & NANITE_SHOCK_IMMUNE) + if(prob(10)) + software_error() + else if(prob(33)) + qdel(src) + +/datum/nanite_program/proc/on_minor_shock() + if(!program_flags & NANITE_SHOCK_IMMUNE) + if(prob(10)) + software_error() + +/datum/nanite_program/proc/on_death() + return + +/datum/nanite_program/proc/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + return + +/datum/nanite_program/proc/software_error(type) + if(!type) + type = rand(1,5) + switch(type) + if(1) + qdel(src) //kill switch + return + if(2) //deprogram codes + activation_code = 0 + deactivation_code = 0 + kill_code = 0 + trigger_code = 0 + if(3) + toggle() //enable/disable + if(4) + if(can_trigger) + trigger() + if(5) //Program is scrambled and does something different + var/rogue_type = pick(rogue_types) + var/datum/nanite_program/rogue = new rogue_type + nanites.add_program(rogue, src) + qdel(src) + +/datum/nanite_program/proc/receive_signal(code, source) + if(activation_code && code == activation_code && !activated) + activate() + host_mob.investigate_log("[host_mob]'s [name] nanite program was activated by [source] with code [code].", INVESTIGATE_NANITES) + else if(deactivation_code && code == deactivation_code && activated) + deactivate() + host_mob.investigate_log("[host_mob]'s [name] nanite program was deactivated by [source] with code [code].", INVESTIGATE_NANITES) + if(can_trigger && trigger_code && code == trigger_code) + trigger() + host_mob.investigate_log("[host_mob]'s [name] nanite program was triggered by [source] with code [code].", INVESTIGATE_NANITES) + if(kill_code && code == kill_code) + host_mob.investigate_log("[host_mob]'s [name] nanite program was deleted by [source] with code [code].", INVESTIGATE_NANITES) + qdel(src) + +/datum/nanite_program/proc/get_timer_type_text() + switch(timer_type) + if(NANITE_TIMER_DEACTIVATE) + return "Deactivate" + if(NANITE_TIMER_SELFDELETE) + return "Self-Delete" + if(NANITE_TIMER_TRIGGER) + return "Trigger" + if(NANITE_TIMER_RESET) + return "Reset Activation Timer" + diff --git a/code/modules/research/nanites/nanite_programs/buffing.dm b/code/modules/research/nanites/nanite_programs/buffing.dm new file mode 100644 index 00000000000..a26cb7bd684 --- /dev/null +++ b/code/modules/research/nanites/nanite_programs/buffing.dm @@ -0,0 +1,130 @@ +//Programs that buff the host in generally passive ways. + +/datum/nanite_program/nervous + name = "Nerve Support" + desc = "The nanites act as a secondary nervous system, reducing the amount of time the host is stunned." + use_rate = 1.5 + rogue_types = list(/datum/nanite_program/nerve_decay) + +/datum/nanite_program/nervous/enable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.stun_mod *= 0.5 + +/datum/nanite_program/nervous/disable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.stun_mod *= 2 + +/datum/nanite_program/triggered/adrenaline + name = "Adrenaline Burst" + desc = "The nanites cause a burst of adrenaline when triggered, waking the host from stuns and temporarily increasing their speed." + trigger_cost = 25 + trigger_cooldown = 1200 + rogue_types = list(/datum/nanite_program/toxic, /datum/nanite_program/nerve_decay) + +/datum/nanite_program/triggered/adrenaline/trigger() + if(!..()) + return + to_chat(host_mob, "You feel a sudden surge of energy!") + host_mob.SetStun(0) + host_mob.SetKnockdown(0) + host_mob.SetUnconscious(0) + host_mob.adjustStaminaLoss(-75) + host_mob.lying = 0 + host_mob.update_canmove() + host_mob.reagents.add_reagent("stimulants", 1.5) + +/datum/nanite_program/hardening + name = "Dermal Hardening" + desc = "The nanites form a mesh under the host's skin, protecting them from melee and bullet impacts." + use_rate = 0.5 + rogue_types = list(/datum/nanite_program/skin_decay) + +//TODO on_hit effect that turns skin grey for a moment + +/datum/nanite_program/hardening/enable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.armor.melee += 50 + H.physiology.armor.bullet += 35 + +/datum/nanite_program/hardening/disable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.armor.melee -= 50 + H.physiology.armor.bullet -= 35 + +/datum/nanite_program/refractive + name = "Dermal Refractive Surface" + desc = "The nanites form a membrane above the host's skin, reducing the effect of laser and energy impacts." + use_rate = 0.50 + rogue_types = list(/datum/nanite_program/skin_decay) + +/datum/nanite_program/refractive/enable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.armor.laser += 50 + H.physiology.armor.energy += 35 + +/datum/nanite_program/refractive/disable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.armor.laser -= 50 + H.physiology.armor.energy -= 35 + +/datum/nanite_program/coagulating + name = "Rapid Coagulation" + desc = "The nanites induce rapid coagulation when the host is wounded, dramatically reducing bleeding rate." + use_rate = 0.10 + rogue_types = list(/datum/nanite_program/suffocating) + +/datum/nanite_program/coagulating/enable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.bleed_mod *= 0.1 + +/datum/nanite_program/coagulating/disable_passive_effect() + . = ..() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + H.physiology.bleed_mod *= 10 + +/datum/nanite_program/conductive + name = "Electric Conduction" + desc = "The nanites act as a grounding rod for electric shocks, protecting the host. Shocks can still damage the nanites themselves." + use_rate = 0.20 + program_flags = NANITE_SHOCK_IMMUNE + rogue_types = list(/datum/nanite_program/nerve_decay) + +/datum/nanite_program/conductive/enable_passive_effect() + . = ..() + host_mob.add_trait(TRAIT_SHOCKIMMUNE, "nanites") + +/datum/nanite_program/conductive/disable_passive_effect() + . = ..() + host_mob.remove_trait(TRAIT_SHOCKIMMUNE, "nanites") + +/datum/nanite_program/mindshield + name = "Mental Barrier" + desc = "The nanites form a protective membrane around the host's brain, shielding them from abnormal influences while they're active." + use_rate = 0.40 + rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) + +/datum/nanite_program/mindshield/enable_passive_effect() + . = ..() + if(!host_mob.mind.has_antag_datum(/datum/antagonist/rev)) //won't work if on a rev, to avoid having implanted revs + host_mob.add_trait(TRAIT_MINDSHIELD, "nanites") + host_mob.sec_hud_set_implants() + +/datum/nanite_program/mindshield/disable_passive_effect() + . = ..() + host_mob.remove_trait(TRAIT_MINDSHIELD, "nanites") + host_mob.sec_hud_set_implants() \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm new file mode 100644 index 00000000000..00a1f15e318 --- /dev/null +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -0,0 +1,250 @@ +//Programs that heal the host in some way. + +/datum/nanite_program/regenerative + name = "Accelerated Regeneration" + desc = "The nanites boost the host's natural regeneration, increasing their healing speed. Does not consume nanites if the host is unharmed." + use_rate = 2.5 + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/regenerative/check_conditions() + if(!host_mob.getBruteLoss() && !host_mob.getFireLoss()) + return FALSE + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = BODYPART_ORGANIC) + if(!parts.len) + return FALSE + return ..() + +/datum/nanite_program/regenerative/active_effect() + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = BODYPART_ORGANIC) + if(!parts.len) + return + for(var/obj/item/bodypart/L in parts) + if(L.heal_damage(1/parts.len, 1/parts.len)) + host_mob.update_damage_overlays() + else + host_mob.adjustBruteLoss(-1, TRUE) + host_mob.adjustFireLoss(-1, TRUE) + +/datum/nanite_program/temperature + name = "Temperature Adjustment" + desc = "The nanites adjust the host's internal temperature to an ideal level." + use_rate = 3.5 + rogue_types = list(/datum/nanite_program/skin_decay) + +/datum/nanite_program/temperature/check_conditions() + if(host_mob.bodytemperature > (BODYTEMP_NORMAL - 30) && host_mob.bodytemperature < (BODYTEMP_NORMAL + 30)) + return FALSE + return ..() + +/datum/nanite_program/temperature/active_effect() + if(host_mob.bodytemperature > BODYTEMP_NORMAL) + host_mob.adjust_bodytemperature(-40 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) + else if(host_mob.bodytemperature < (BODYTEMP_NORMAL + 1)) + host_mob.adjust_bodytemperature(40 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL) + +/datum/nanite_program/purging + name = "Blood Purification" + desc = "The nanites purge toxins and chemicals from the host's bloodstream." + use_rate = 1 + rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic) + +/datum/nanite_program/purging/check_conditions() + var/foreign_reagent = LAZYLEN(host_mob.reagents.reagent_list) + if(!host_mob.getToxLoss() && !foreign_reagent) + return FALSE + return ..() + +/datum/nanite_program/purging/active_effect() + host_mob.adjustToxLoss(-1) + for(var/datum/reagent/R in host_mob.reagents.reagent_list) + host_mob.reagents.remove_reagent(R.id,1) + +/datum/nanite_program/brain_heal + name = "Neural Regeneration" + desc = "The nanites fix neural connections in the host's brain, reversing brain damage and minor traumas." + use_rate = 1.5 + rogue_types = list(/datum/nanite_program/brain_decay) + +/datum/nanite_program/brain_heal/check_conditions() + if(!host_mob.getBrainLoss()) + return FALSE + return ..() + +/datum/nanite_program/brain_heal/active_effect() + host_mob.adjustBrainLoss(-1, TRUE) + if(iscarbon(host_mob) && prob(10)) + var/mob/living/carbon/C = host_mob + C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) + +/datum/nanite_program/blood_restoring + name = "Blood Regeneration" + desc = "The nanites stimulate and boost blood cell production in the host." + use_rate = 1 + rogue_types = list(/datum/nanite_program/suffocating) + +/datum/nanite_program/blood_restoring/check_conditions() + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + if(C.blood_volume >= BLOOD_VOLUME_SAFE) + return FALSE + else + return FALSE + return ..() + +/datum/nanite_program/blood_restoring/active_effect() + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + C.blood_volume += 2 + +/datum/nanite_program/repairing + name = "Mechanical Repair" + desc = "The nanites fix damage in the host's mechanical limbs." + use_rate = 0.5 //much more efficient than organic healing + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/repairing/check_conditions() + if(!host_mob.getBruteLoss() && !host_mob.getFireLoss()) + return FALSE + + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = BODYPART_ROBOTIC) + if(!parts.len) + return FALSE + else + if(!(MOB_ROBOTIC in host_mob.mob_biotypes)) + return FALSE + return ..() + +/datum/nanite_program/repairing/active_effect(mob/living/M) + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = BODYPART_ROBOTIC) + if(!parts.len) + return + var/update = FALSE + for(var/obj/item/bodypart/L in parts) + if(L.heal_damage(1/parts.len, 1/parts.len)) + update = TRUE + if(update) + host_mob.update_damage_overlays() + else + host_mob.adjustBruteLoss(-1, TRUE) + host_mob.adjustFireLoss(-1, TRUE) + +/datum/nanite_program/purging_advanced + name = "Selective Blood Purification" + desc = "The nanites purge toxins and dangerous chemicals from the host's bloodstream, while ignoring beneficial chemicals. \ + The added processing power required to analyze the chemicals severely increases the nanite consumption rate." + use_rate = 2 + rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic) + +/datum/nanite_program/purging_advanced/check_conditions() + var/foreign_reagent = FALSE + for(var/datum/reagent/toxin/R in host_mob.reagents.reagent_list) + foreign_reagent = TRUE + break + if(!host_mob.getToxLoss() && !foreign_reagent) + return FALSE + return ..() + +/datum/nanite_program/purging_advanced/active_effect() + host_mob.adjustToxLoss(-1) + for(var/datum/reagent/toxin/R in host_mob.reagents.reagent_list) + host_mob.reagents.remove_reagent(R.id,1) + +/datum/nanite_program/regenerative_advanced + name = "Bio-Reconstruction" + desc = "The nanites manually repair and replace organic cells, acting much faster than normal regeneration. \ + However, this program cannot detect the difference between harmed and unharmed, causing it to consume nanites even if it has no effect." + use_rate = 5.5 + rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic) + +/datum/nanite_program/regenerative_advanced/active_effect() + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = BODYPART_ORGANIC) + if(!parts.len) + return + var/update = FALSE + for(var/obj/item/bodypart/L in parts) + if(L.heal_damage(3/parts.len, 3/parts.len)) + update = TRUE + if(update) + host_mob.update_damage_overlays() + else + host_mob.adjustBruteLoss(-3, TRUE) + host_mob.adjustFireLoss(-3, TRUE) + +/datum/nanite_program/brain_heal_advanced + name = "Neural Reimaging" + desc = "The nanites are able to backup and restore the host's neural connections, potentially replacing entire chunks of missing or damaged brain matter." + use_rate = 3 + rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) + +/datum/nanite_program/brain_heal_advanced/check_conditions() + if(!host_mob.getBrainLoss()) + return FALSE + return ..() + +/datum/nanite_program/brain_heal_advanced/active_effect() + host_mob.adjustBrainLoss(-2, TRUE) + if(iscarbon(host_mob) && prob(10)) + var/mob/living/carbon/C = host_mob + C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_LOBOTOMY) + +/datum/nanite_program/triggered/defib + name = "Defibrillation" + desc = "The nanites shock the host's heart when triggered, bringing them back to life if the body can sustain it." + trigger_cost = 25 + trigger_cooldown = 120 + rogue_types = list(/datum/nanite_program/triggered/shocking) + +/datum/nanite_program/triggered/defib/trigger() + if(!..()) + return + + playsound(host_mob, 'sound/machines/defib_zap.ogg', 75, 1, -1) + if(check_revivable()) + host_mob.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) + addtimer(CALLBACK(src, .proc/zap), 30) + +/datum/nanite_program/triggered/defib/proc/check_revivable() + if(!iscarbon(host_mob)) //nonstandard biology + return FALSE + var/mob/living/carbon/C = host_mob + if(C.suiciding || C.has_trait(TRAIT_NOCLONE) || C.hellbound) //can't revive + return FALSE + if((world.time - C.timeofdeath) < 1800) //too late + return FALSE + if((C.getBruteLoss() > 180) || (C.getFireLoss() > 180)) //too damaged + return FALSE + if(!C.getorgan(/obj/item/organ/heart)) //what are we even shocking + return FALSE + var/obj/item/organ/brain/BR = C.getorgan(/obj/item/organ/brain) + if(QDELETED(BR) || BR.damaged_brain) + return FALSE + if(!C.get_ghost()) + return FALSE + return TRUE + +/datum/nanite_program/triggered/defib/proc/zap() + if(check_revivable()) + var/mob/living/carbon/C = host_mob + playsound(C, 'sound/machines/defib_success.ogg', 50, 0) + C.set_heartattack(FALSE) + C.revive() + C.emote("gasp") + C.Jitter(100) + SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK) + var/tplus = world.time - C.timeofdeath + if(tplus > 600) + C.adjustBrainLoss( max(0, ((1800 - tplus) / 1800 * 150)), 150) + log_game("[C] has been successfully defibrillated by nanites.") + else + playsound(src, 'sound/machines/defib_failed.ogg', 50, 0) + diff --git a/code/modules/research/nanites/nanite_programs/rogue.dm b/code/modules/research/nanites/nanite_programs/rogue.dm new file mode 100644 index 00000000000..f64c7e87812 --- /dev/null +++ b/code/modules/research/nanites/nanite_programs/rogue.dm @@ -0,0 +1,119 @@ +//Programs generated through degradation of other complex programs. +//They generally cause minor damage or annoyance. + +//Last stop of the error train +/datum/nanite_program/glitch + name = "Glitch" + desc = "A heavy software corruption that causes nanites to gradually break down." + use_rate = 1.5 + unique = FALSE + rogue_types = list() + +//Generic body-affecting programs will decay into this +/datum/nanite_program/necrotic + name = "Necrosis" + desc = "The nanites attack internal tissues indiscriminately, causing widespread damage." + use_rate = 0.75 + unique = FALSE + rogue_types = list(/datum/nanite_program/glitch) + +/datum/nanite_program/necrotic/active_effect() + host_mob.adjustBruteLoss(0.75, TRUE) + if(prob(1)) + to_chat(host_mob, "You feel a mild ache from somewhere inside you.") + +//Programs that don't directly interact with the body will decay into this +/datum/nanite_program/toxic + name = "Toxin Buildup" + desc = "The nanites cause a slow but constant toxin buildup inside the host." + use_rate = 0.25 + unique = FALSE + rogue_types = list(/datum/nanite_program/glitch) + +/datum/nanite_program/toxic/active_effect() + host_mob.adjustToxLoss(0.5) + if(prob(1)) + to_chat(host_mob, "You feel a bit sick.") + +//Generic blood-affecting programs will decay into this +/datum/nanite_program/suffocating + name = "Hypoxemia" + desc = "The nanites prevent the host's blood from absorbing oxygen efficiently." + use_rate = 0.75 + unique = FALSE + rogue_types = list(/datum/nanite_program/glitch) + +/datum/nanite_program/suffocating/active_effect() + host_mob.adjustOxyLoss(3, 0) + if(prob(1)) + to_chat(host_mob, "You feel short of breath.") + +//Generic brain-affecting programs will decay into this +/datum/nanite_program/brain_decay + name = "Neuro-Necrosis" + desc = "The nanites seek and attack brain cells, causing extensive neural damage to the host." + use_rate = 0.75 + unique = FALSE + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/brain_decay/active_effect() + if(prob(4)) + host_mob.hallucination = min(15, host_mob.hallucination) + host_mob.adjustBrainLoss(1) + +//Generic brain-affecting programs can also decay into this +/datum/nanite_program/brain_misfire + name = "Brain Misfire" + desc = "The nanites interfere with neural pathways, causing minor psychological disturbances." + use_rate = 0.50 + unique = FALSE + rogue_types = list(/datum/nanite_program/brain_decay) + +/datum/nanite_program/brain_misfire/active_effect() + if(prob(10)) + switch(rand(1,4)) + if(1) + host_mob.hallucination += 15 + if(2) + host_mob.confused += 10 + if(3) + host_mob.drowsyness += 10 + if(4) + host_mob.slurring += 10 + +//Generic skin-affecting programs will decay into this +/datum/nanite_program/skin_decay + name = "Dermalysis" + desc = "The nanites attack skin cells, causing irritation, rashes, and minor damage." + use_rate = 0.25 + unique = FALSE + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/skin_decay/active_effect() + host_mob.adjustBruteLoss(0.25) + if(prob(5)) //itching + var/picked_bodypart = pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/obj/item/bodypart/bodypart = host_mob.get_bodypart(picked_bodypart) + var/can_scratch = !host_mob.incapacitated() && get_location_accessible(host_mob, picked_bodypart) + + host_mob.visible_message("[can_scratch ? "[host_mob] scratches [host_mob.p_their()] [bodypart.name]." : ""]",\ + "Your [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]") + +//Generic nerve-affecting programs will decay into this +/datum/nanite_program/nerve_decay + name = "Nerve Decay" + desc = "The nanites attack the host's nerves, causing lack of coordination and short bursts of paralysis." + use_rate = 1 + unique = FALSE + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/nerve_decay/active_effect() + if(prob(5)) + to_chat(host_mob, "You feel unbalanced!") + host_mob.confused += 10 + else if(prob(4)) + to_chat(host_mob, "You can't feel your hands!") + host_mob.drop_all_held_items() + else if(prob(4)) + to_chat(host_mob, "You can't feel your legs!") + host_mob.Knockdown(30) diff --git a/code/modules/research/nanites/nanite_programs/sensor.dm b/code/modules/research/nanites/nanite_programs/sensor.dm new file mode 100644 index 00000000000..d494ec8cdf9 --- /dev/null +++ b/code/modules/research/nanites/nanite_programs/sensor.dm @@ -0,0 +1,392 @@ +/datum/nanite_program/sensor + name = "Sensor Nanites" + desc = "These nanites send a signal code when a certain condition is met." + unique = FALSE + extra_settings = list("Sent Code") + + var/sent_code = 0 + +/datum/nanite_program/sensor/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + +/datum/nanite_program/sensor/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + +/datum/nanite_program/sensor/copy_extra_settings_to(datum/nanite_program/sensor/target) + target.sent_code = sent_code + +/datum/nanite_program/sensor/proc/check_event() + return FALSE + +/datum/nanite_program/sensor/proc/send_code() + if(activated) + SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, sent_code, "a [name] program") + +/datum/nanite_program/sensor/active_effect() + if(sent_code && check_event()) + send_code() + +/datum/nanite_program/sensor/repeat + name = "Signal Repeater" + desc = "When triggered, sends another signal to the nanites, optionally with a delay." + can_trigger = TRUE + trigger_cost = 0 + trigger_cooldown = 10 + extra_settings = list("Sent Code","Delay") + var/spent = FALSE + var/delay = 0 + +/datum/nanite_program/sensor/repeat/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + if(setting == "Delay") + var/new_delay = input(user, "Set the delay in seconds:", name, null) as null|num + if(isnull(new_delay)) + return + delay = (CLAMP(round(new_delay, 1), 0, 3600)) * 10 //max 1 hour + +/datum/nanite_program/sensor/repeat/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + if(setting == "Delay") + return "[delay/10] seconds" + +/datum/nanite_program/sensor/repeat/copy_extra_settings_to(datum/nanite_program/sensor/repeat/target) + target.sent_code = sent_code + target.delay = delay + +/datum/nanite_program/sensor/repeat/trigger() + if(!..()) + return + addtimer(CALLBACK(src, .proc/send_code), delay) + +/datum/nanite_program/sensor/relay_repeat + name = "Relay Signal Repeater" + desc = "When triggered, sends another signal to a relay channel, optionally with a delay." + can_trigger = TRUE + trigger_cost = 0 + trigger_cooldown = 10 + extra_settings = list("Sent Code","Relay Channel","Delay") + var/spent = FALSE + var/delay = 0 + var/relay_channel = 0 + +/datum/nanite_program/sensor/relay_repeat/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + if(setting == "Relay Channel") + var/new_channel = input(user, "Set the relay channel (1-9999):", name, null) as null|num + if(isnull(new_channel)) + return + relay_channel = CLAMP(round(new_channel, 1), 1, 9999) + if(setting == "Delay") + var/new_delay = input(user, "Set the delay in seconds:", name, null) as null|num + if(isnull(new_delay)) + return + delay = (CLAMP(round(new_delay, 1), 0, 3600)) * 10 //max 1 hour + +/datum/nanite_program/sensor/relay_repeat/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + if(setting == "Relay Channel") + return relay_channel + if(setting == "Delay") + return "[delay/10] seconds" + +/datum/nanite_program/sensor/relay_repeat/copy_extra_settings_to(datum/nanite_program/sensor/relay_repeat/target) + target.sent_code = sent_code + target.delay = delay + target.relay_channel = relay_channel + +/datum/nanite_program/sensor/relay_repeat/trigger() + if(!..()) + return + addtimer(CALLBACK(src, .proc/send_code), delay) + +/datum/nanite_program/sensor/relay_repeat/send_code() + if(activated && relay_channel) + for(var/X in SSnanites.nanite_relays) + var/datum/nanite_program/relay/N = X + N.relay_signal(sent_code, relay_channel, "a [name] program") + +/datum/nanite_program/sensor/health + name = "Health Sensor" + desc = "The nanites receive a signal when the host's health is above/below a target percentage." + extra_settings = list("Sent Code","Health Percent","Direction") + var/spent = FALSE + var/percent = 50 + var/direction = "Above" + +/datum/nanite_program/sensor/health/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + if(setting == "Health Percent") + var/new_percent = input(user, "Set the health percentage:", name, null) as null|num + if(isnull(new_percent)) + return + percent = CLAMP(round(new_percent, 1), -99, 100) + if(setting == "Direction") + if(direction == "Above") + direction = "Below" + else + direction = "Above" + +/datum/nanite_program/sensor/health/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + if(setting == "Health Percent") + return "[percent]%" + if(setting == "Direction") + return direction + +/datum/nanite_program/sensor/health/copy_extra_settings_to(datum/nanite_program/sensor/health/target) + target.sent_code = sent_code + target.percent = percent + target.direction = direction + +/datum/nanite_program/sensor/health/check_event() + var/health_percent = host_mob.health / host_mob.maxHealth * 100 + var/detected = FALSE + if(direction == "Above") + if(health_percent >= percent) + detected = TRUE + else + if(health_percent < percent) + detected = TRUE + + if(detected) + if(!spent) + spent = TRUE + return TRUE + return FALSE + else + spent = FALSE + return FALSE + +/datum/nanite_program/sensor/crit + name = "Critical Health Sensor" + desc = "The nanites receive a signal when the host first reaches critical health." + var/spent = FALSE + +/datum/nanite_program/sensor/crit/check_event() + if(host_mob.InCritical()) + if(!spent) + spent = TRUE + return TRUE + return FALSE + else + spent = FALSE + return FALSE + +/datum/nanite_program/sensor/death + name = "Death Sensor" + desc = "The nanites receive a signal when they detect the host is dead." + var/spent = FALSE + +/datum/nanite_program/sensor/death/on_death() + send_code() + +/datum/nanite_program/sensor/nanite_volume + name = "Nanite Volume Sensor" + desc = "The nanites receive a signal when the nanite supply is above/below a certain percentage." + extra_settings = list("Sent Code","Nanite Percent","Direction") + var/spent = FALSE + var/percent = 50 + var/direction = "Above" + +/datum/nanite_program/sensor/nanite_volume/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + if(setting == "Nanite Percent") + var/new_percent = input(user, "Set the nanite percentage:", name, null) as null|num + if(isnull(new_percent)) + return + percent = CLAMP(round(new_percent, 1), 1, 100) + if(setting == "Direction") + if(direction == "Above") + direction = "Below" + else + direction = "Above" + +/datum/nanite_program/sensor/nanite_volume/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + if(setting == "Nanite Percent") + return "[percent]%" + if(setting == "Direction") + return direction + +/datum/nanite_program/sensor/nanite_volume/copy_extra_settings_to(datum/nanite_program/sensor/nanite_volume/target) + target.sent_code = sent_code + target.percent = percent + target.direction = direction + +/datum/nanite_program/sensor/nanite_volume/check_event() + var/nanite_percent = (nanites.nanite_volume - nanites.safety_threshold)/(nanites.max_nanites - nanites.safety_threshold)*100 + var/detected = FALSE + + if(direction == "Above") + if(nanite_percent >= percent) + detected = TRUE + else + if(nanite_percent < percent) + detected = TRUE + + if(detected) + if(!spent) + spent = TRUE + return TRUE + return FALSE + else + spent = FALSE + return FALSE + +/datum/nanite_program/sensor/damage + name = "Damage Sensor" + desc = "The nanites receive a signal when a host's specific damage type is above/below a target value." + extra_settings = list("Sent Code","Damage Type","Damage","Direction") + var/spent = FALSE + var/damage_type = "Brute" + var/damage = 50 + var/direction = "Above" + +/datum/nanite_program/sensor/damage/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + if(setting == "Damage") + var/new_damage = input(user, "Set the damage threshold:", name, null) as null|num + if(isnull(new_damage)) + return + damage = CLAMP(round(new_damage, 1), 0, 500) + if(setting == "Damage Type") + var/list/damage_types = list("Brute","Burn","Toxin","Oxygen","Cellular") + var/new_damage_type = input("Choose the damage type", name) as null|anything in damage_types + if(!new_damage_type) + return + damage_type = new_damage_type + if(setting == "Direction") + if(direction == "Above") + direction = "Below" + else + direction = "Above" + +/datum/nanite_program/sensor/damage/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + if(setting == "Damage") + return damage + if(setting == "Damage Type") + return damage_type + if(setting == "Direction") + return direction + +/datum/nanite_program/sensor/damage/copy_extra_settings_to(datum/nanite_program/sensor/damage/target) + target.sent_code = sent_code + target.damage = damage + target.damage_type = damage_type + target.direction = direction + +/datum/nanite_program/sensor/damage/check_event() + var/reached_threshold = FALSE + var/check_above = (direction == "Above") + var/damage_amt = 0 + switch(damage_type) + if("Brute") + damage_amt = host_mob.getBruteLoss() + if("Burn") + damage_amt = host_mob.getFireLoss() + if("Toxin") + damage_amt = host_mob.getToxLoss() + if("Oxygen") + damage_amt = host_mob.getOxyLoss() + if("Cellular") + damage_amt = host_mob.getCloneLoss() + + if(damage_amt >= damage) + if(check_above) + reached_threshold = TRUE + else if(!check_above) + reached_threshold = TRUE + + if(reached_threshold) + if(!spent) + spent = TRUE + return TRUE + return FALSE + else + spent = FALSE + return FALSE + +/datum/nanite_program/sensor/voice + name = "Voice Sensor" + desc = "Sends a signal when the nanites hear a determined word or sentence." + extra_settings = list("Sent Code","Sentence","Inclusive Mode") + var/spent = FALSE + var/sentence = "" + var/inclusive = TRUE + +/datum/nanite_program/sensor/voice/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + if(setting == "Sentence") + var/new_sentence = stripped_input(user, "Choose the sentence that triggers the sensor.", "Sentence", sentence, MAX_MESSAGE_LEN) + if(!new_sentence) + return + sentence = new_sentence + if(setting == "Inclusive Mode") + var/new_inclusive = input("Should the sensor detect the sentence if contained within another sentence?", name) as null|anything in list("Inclusive","Exclusive") + if(!new_inclusive) + return + inclusive = (new_inclusive == "Inclusive") + +/datum/nanite_program/sensor/voice/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + if(setting == "Sentence") + return sentence + if(setting == "Inclusive Mode") + if(inclusive) + return "Inclusive" + else + return "Exclusive" + +/datum/nanite_program/sensor/voice/copy_extra_settings_to(datum/nanite_program/sensor/voice/target) + target.sent_code = sent_code + target.sentence = sentence + target.inclusive = inclusive + +/datum/nanite_program/sensor/voice/on_hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + if(!sentence) + return + //To make it not case sensitive + var/low_message = lowertext(raw_message) + var/low_sentence = lowertext(sentence) + if(inclusive) + if(findtext(low_message, low_sentence)) + send_code() + else + if(low_message == low_sentence) + send_code() \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_programs/suppression.dm b/code/modules/research/nanites/nanite_programs/suppression.dm new file mode 100644 index 00000000000..9d501e626a0 --- /dev/null +++ b/code/modules/research/nanites/nanite_programs/suppression.dm @@ -0,0 +1,311 @@ +//Programs that are generally useful for population control and non-harmful suppression. + +/datum/nanite_program/triggered/sleepy + name = "Sleep Induction" + desc = "The nanites cause rapid narcolepsy when triggered." + trigger_cost = 15 + trigger_cooldown = 1200 + rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) + +/datum/nanite_program/triggered/sleepy/trigger() + if(!..()) + return + to_chat(host_mob, "You start to feel very sleepy...") + host_mob.drowsyness += 20 + addtimer(CALLBACK(host_mob, /mob/living.proc/Sleeping, 200), rand(60,200)) + +/datum/nanite_program/paralyzing + name = "Paralysis" + desc = "The nanites force muscle contraction, effectively paralyzing the host." + use_rate = 3 + rogue_types = list(/datum/nanite_program/nerve_decay) + +/datum/nanite_program/paralyzing/active_effect() + host_mob.Stun(40) + +/datum/nanite_program/paralyzing/enable_passive_effect() + . = ..() + to_chat(host_mob, "Your muscles seize! You can't move!") + +/datum/nanite_program/paralyzing/disable_passive_effect() + . = ..() + to_chat(host_mob, "Your muscles relax, and you can move again.") + +/datum/nanite_program/triggered/shocking + name = "Electric Shock" + desc = "The nanites shock the host when triggered. Destroys a large amount of nanites!" + trigger_cost = 10 + trigger_cooldown = 300 + program_flags = NANITE_SHOCK_IMMUNE + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/triggered/shocking/trigger() + if(!..()) + return + host_mob.electrocute_act(rand(5,10), "shock nanites", TRUE, TRUE) + +/datum/nanite_program/triggered/stun + name = "Neural Shock" + desc = "The nanites pulse the host's nerves when triggered, inapacitating them for a short period." + trigger_cost = 4 + trigger_cooldown = 300 + rogue_types = list(/datum/nanite_program/triggered/shocking, /datum/nanite_program/nerve_decay) + +/datum/nanite_program/triggered/stun/trigger() + if(!..()) + return + playsound(host_mob, "sparks", 75, 1, -1) + host_mob.Knockdown(80) + +/datum/nanite_program/pacifying + name = "Pacification" + desc = "The nanites suppress the aggression center of the brain, preventing the host from causing direct harm to others." + use_rate = 1 + rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) + +/datum/nanite_program/pacifying/enable_passive_effect() + . = ..() + host_mob.add_trait(TRAIT_PACIFISM, "nanites") + +/datum/nanite_program/pacifying/disable_passive_effect() + . = ..() + host_mob.remove_trait(TRAIT_PACIFISM, "nanites") + +/datum/nanite_program/blinding + name = "Blindness" + desc = "The nanites suppress the host's ocular nerves, blinding them while they're active." + use_rate = 1.5 + rogue_types = list(/datum/nanite_program/nerve_decay) + +/datum/nanite_program/blinding/enable_passive_effect() + . = ..() + host_mob.become_blind("nanites") + +/datum/nanite_program/blinding/disable_passive_effect() + . = ..() + host_mob.cure_blind("nanites") + +/datum/nanite_program/mute + name = "Mute" + desc = "The nanites suppress the host's speech, making them mute while they're active." + use_rate = 0.75 + rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) + +/datum/nanite_program/mute/enable_passive_effect() + . = ..() + host_mob.add_trait(TRAIT_MUTE, "nanites") + +/datum/nanite_program/mute/disable_passive_effect() + . = ..() + host_mob.remove_trait(TRAIT_MUTE, "nanites") + +/datum/nanite_program/fake_death + name = "Death Simulation" + desc = "The nanites induce a death-like coma into the host, able to fool most medical scans." + use_rate = 3.5 + rogue_types = list(/datum/nanite_program/nerve_decay, /datum/nanite_program/necrotic, /datum/nanite_program/brain_decay) + +/datum/nanite_program/fake_death/enable_passive_effect() + . = ..() + host_mob.emote("deathgasp") + host_mob.fakedeath("nanites") + +/datum/nanite_program/fake_death/disable_passive_effect() + . = ..() + host_mob.cure_fakedeath("nanites") + +/datum/nanite_program/triggered/speech + name = "Forced Speech" + desc = "The nanites force the host to say a pre-programmed sentence when triggered." + unique = FALSE + trigger_cost = 3 + trigger_cooldown = 20 + rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) + + extra_settings = list("Sentence") + var/sentence = "" + +/datum/nanite_program/triggered/speech/set_extra_setting(user, setting) + if(setting == "Sentence") + var/new_sentence = stripped_input(user, "Choose the sentence that the host will be forced to say.", "Sentence", sentence, MAX_MESSAGE_LEN) + if(!new_sentence) + return + if(copytext(new_sentence, 1, 2) == "*") //emotes are abusable, like surrender + return + sentence = new_sentence + +/datum/nanite_program/triggered/speech/get_extra_setting(setting) + if(setting == "Sentence") + return sentence + +/datum/nanite_program/triggered/speech/copy_extra_settings_to(datum/nanite_program/triggered/speech/target) + target.sentence = sentence + +/datum/nanite_program/triggered/speech/trigger() + if(!..()) + return + if(host_mob.stat == DEAD) + return + to_chat(host_mob, "You feel compelled to speak...") + host_mob.say(sentence) + +/datum/nanite_program/triggered/voice + name = "Skull Echo" + desc = "The nanites echo a synthesized message inside the host's skull." + unique = FALSE + trigger_cost = 1 + trigger_cooldown = 20 + rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) + + extra_settings = list("Message") + var/message = "" + +/datum/nanite_program/triggered/voice/set_extra_setting(user, setting) + if(setting == "Message") + var/new_message = stripped_input(user, "Choose the message sent to the host.", "Message", message, MAX_MESSAGE_LEN) + if(!new_message) + return + message = new_message + +/datum/nanite_program/triggered/voice/get_extra_setting(setting) + if(setting == "Message") + return message + +/datum/nanite_program/triggered/voice/copy_extra_settings_to(datum/nanite_program/triggered/voice/target) + target.message = message + +/datum/nanite_program/triggered/voice/trigger() + if(!..()) + return + if(host_mob.stat == DEAD) + return + to_chat(host_mob, "You hear a strange, robotic voice in your head... \"[message]\"") + +/datum/nanite_program/triggered/hallucination + name = "Hallucination" + desc = "The nanites make the host hallucinate something when triggered." + trigger_cost = 4 + trigger_cooldown = 80 + unique = FALSE + rogue_types = list(/datum/nanite_program/brain_misfire) + extra_settings = list("Hallucination Type") + var/hal_type + var/hal_details + +/datum/nanite_program/triggered/hallucination/trigger() + if(!..()) + return + if(!iscarbon(host_mob)) + return + var/mob/living/carbon/C = host_mob + if(!hal_type) + C.hallucination += 15 + else + switch(hal_type) + if("Message") + new /datum/hallucination/chat(C, TRUE, null, hal_details) + if("Battle") + new /datum/hallucination/battle(C, TRUE, hal_details) + if("Sound") + new /datum/hallucination/sounds(C, TRUE, hal_details) + if("Weird Sound") + new /datum/hallucination/weird_sounds(C, TRUE, hal_details) + if("Station Message") + new /datum/hallucination/stationmessage(C, TRUE, hal_details) + if("Health") + new /datum/hallucination/hudscrew(C, TRUE, hal_details) + if("Alert") + new /datum/hallucination/fake_alert(C, TRUE, hal_details) + if("Fire") + new /datum/hallucination/fire(C, TRUE) + if("Shock") + new /datum/hallucination/shock(C, TRUE) + if("Plasma Flood") + new /datum/hallucination/fake_flood(C, TRUE) + +/datum/nanite_program/triggered/hallucination/set_extra_setting(user, setting) + if(setting == "Hallucination Type") + var/list/possible_hallucinations = list("Random","Message","Battle","Sound","Weird Sound","Station Message","Health","Alert","Fire","Shock","Plasma Flood") + var/hal_type_choice = input("Choose the hallucination type", name) as null|anything in possible_hallucinations + if(!hal_type_choice) + return + switch(hal_type_choice) + if("Random") + hal_type = null + hal_details = null + if("Message") + hal_type = "Message" + var/hal_chat = stripped_input(user, "Choose the message the host will hear, or leave empty for random messages.", "Message", hal_details, MAX_MESSAGE_LEN) + if(hal_chat) + hal_details = hal_chat + if("Battle") + hal_type = "Battle" + var/sound_list = list("random","laser","disabler","esword","gun","stunprod","harmbaton","bomb") + var/hal_choice = input("Choose the hallucination battle type", name) as null|anything in sound_list + if(!hal_choice || hal_choice == "random") + hal_details = null + else + hal_details = hal_choice + if("Sound") + hal_type = "Sound" + var/sound_list = list("random","airlock","airlock pry","console","explosion","far explosion","mech","glass","alarm","beepsky","mech","wall decon","door hack") + var/hal_choice = input("Choose the hallucination sound", name) as null|anything in sound_list + if(!hal_choice || hal_choice == "random") + hal_details = null + else + hal_details = hal_choice + if("Weird Sound") + hal_type = "Weird Sound" + var/sound_list = list("random","phone","hallelujah","highlander","laughter","hyperspace","game over","creepy","tesla") + var/hal_choice = input("Choose the hallucination sound", name) as null|anything in sound_list + if(!hal_choice || hal_choice == "random") + hal_details = null + else + hal_details = hal_choice + if("Station Message") + hal_type = "Station Message" + var/msg_list = list("random","ratvar","shuttle dock","blob alert","malf ai","meteors","supermatter") + var/hal_choice = input("Choose the hallucination station message", name) as null|anything in msg_list + if(!hal_choice || hal_choice == "random") + hal_details = null + else + hal_details = hal_choice + if("Health") + hal_type = "Health" + var/health_list = list("random","critical","dead","healthy") + var/hal_choice = input("Choose the health status", name) as null|anything in health_list + if(!hal_choice || hal_choice == "random") + hal_details = null + else + switch(hal_choice) + if("critical") + hal_details = SCREWYHUD_CRIT + if("dead") + hal_details = SCREWYHUD_DEAD + if("healthy") + hal_details = SCREWYHUD_HEALTHY + if("Alert") + hal_type = "Alert" + var/alert_list = list("random","not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","gravity","fire","locked","hacked","temphot","tempcold","pressure") + var/hal_choice = input("Choose the alert", name) as null|anything in alert_list + if(!hal_choice || hal_choice == "random") + hal_details = null + else + hal_details = hal_choice + if("Fire") + hal_type = "Fire" + if("Shock") + hal_type = "Shock" + if("Plasma Flood") + hal_type = "Plasma Flood" + +/datum/nanite_program/triggered/hallucination/get_extra_setting(setting) + if(setting == "Hallucination Type") + if(!hal_type) + return "Random" + else + return hal_type + +/datum/nanite_program/triggered/hallucination/copy_extra_settings_to(datum/nanite_program/triggered/hallucination/target) + target.hal_type = hal_type + target.hal_details = hal_details \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm new file mode 100644 index 00000000000..9f88f4a23fc --- /dev/null +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -0,0 +1,265 @@ +//Programs that interact with other programs or nanites directly, or have other special purposes. +/datum/nanite_program/viral + name = "Viral Replica" + desc = "The nanites constantly send encrypted signals attempting to forcefully copy their own programming into other nanite clusters." + use_rate = 0.5 + rogue_types = list(/datum/nanite_program/toxic) + extra_settings = list("Program Overwrite","Cloud Overwrite") + + var/sync_programs = TRUE + var/sync_overwrite = FALSE + var/overwrite_cloud = FALSE + var/set_cloud = 0 + +/datum/nanite_program/viral/set_extra_setting(user, setting) + if(setting == "Program Overwrite") + var/overwrite_type = input("Choose what to do with the target's programs", name) as null|anything in list("Overwrite","Add To","Ignore") + if(!overwrite_type) + return + switch(overwrite_type) + if("Ignore") //Do not affect programs (if you only want to set the cloud ID) + sync_programs = FALSE + sync_overwrite = FALSE + if("Add To") //Add to existing programs (so the target does not notice theirs are missing) + sync_programs = TRUE + sync_overwrite = FALSE + if("Overwrite") //Replace target's programs with the source + sync_programs = TRUE + sync_overwrite = TRUE + if(setting == "Cloud Overwrite") + var/overwrite_type = input("Choose what to do with the target's Cloud ID", name) as null|anything in list("Overwrite","Disable","Keep") + if(!overwrite_type) + return + switch(overwrite_type) + if("Keep") //Don't change the cloud ID + overwrite_cloud = FALSE + set_cloud = 0 + if("Disable") //Set the cloud ID to disabled + overwrite_cloud = TRUE + set_cloud = 0 + if("Overwrite") //Set the cloud ID to what we choose + var/new_cloud = input(user, "Choose the Cloud ID to set on infected nanites (1-100)", name, null) as null|num + if(isnull(new_cloud)) + return + overwrite_cloud = TRUE + set_cloud = CLAMP(round(new_cloud, 1), 1, 100) + +/datum/nanite_program/viral/get_extra_setting(setting) + if(setting == "Program Overwrite") + if(!sync_programs) + return "Ignore" + else if(sync_overwrite) + return "Overwrite" + else + return "Add To" + if(setting == "Cloud Overwrite") + if(!overwrite_cloud) + return "None" + else if(set_cloud == 0) + return "Disable" + else + return set_cloud + +/datum/nanite_program/viral/copy_extra_settings_to(datum/nanite_program/viral/target) + target.overwrite_cloud = overwrite_cloud + target.set_cloud = set_cloud + target.sync_programs = sync_programs + target.sync_overwrite = sync_overwrite + +/datum/nanite_program/viral/active_effect() + for(var/mob/M in orange(host_mob, 5)) + if(prob(5)) + if(sync_programs) + SEND_SIGNAL(M, COMSIG_NANITE_SYNC, nanites, sync_overwrite) + if(overwrite_cloud) + SEND_SIGNAL(M, COMSIG_NANITE_SET_CLOUD, set_cloud) + +/datum/nanite_program/monitoring + name = "Monitoring" + desc = "The nanites monitor the host's vitals and location, sending them to the suit sensor network." + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/monitoring/enable_passive_effect() + . = ..() + SSnanites.nanite_monitored_mobs |= host_mob + host_mob.hud_set_nanite_indicator() + +/datum/nanite_program/monitoring/disable_passive_effect() + . = ..() + SSnanites.nanite_monitored_mobs -= host_mob + host_mob.hud_set_nanite_indicator() + +/datum/nanite_program/triggered/self_scan + name = "Host Scan" + desc = "The nanites display a detailed readout of a body scan to the host." + unique = FALSE + trigger_cost = 3 + trigger_cooldown = 50 + rogue_types = list(/datum/nanite_program/toxic) + + extra_settings = list("Scan Type") + var/scan_type = "Medical" + +/datum/nanite_program/triggered/self_scan/set_extra_setting(user, setting) + if(setting == "Scan Type") + var/list/scan_types = list("Medical","Chemical","Nanite") + var/new_scan_type = input("Choose the scan type", name) as null|anything in scan_types + if(!new_scan_type) + return + scan_type = new_scan_type + +/datum/nanite_program/triggered/self_scan/get_extra_setting(setting) + if(setting == "Scan Type") + return scan_type + +/datum/nanite_program/triggered/self_scan/copy_extra_settings_to(datum/nanite_program/triggered/self_scan/target) + target.scan_type = scan_type + +/datum/nanite_program/triggered/self_scan/trigger() + if(!..()) + return + if(host_mob.stat == DEAD) + return + switch(scan_type) + if("Medical") + healthscan(host_mob, host_mob) + if("Chemical") + chemscan(host_mob, host_mob) + if("Nanite") + SEND_SIGNAL(host_mob, COMSIG_NANITE_SCAN, host_mob, TRUE) + +/datum/nanite_program/stealth + name = "Stealth" + desc = "The nanites hide their activity and programming from superficial scans." + rogue_types = list(/datum/nanite_program/toxic) + use_rate = 0.2 + +/datum/nanite_program/stealth/enable_passive_effect() + . = ..() + nanites.stealth = TRUE + +/datum/nanite_program/stealth/disable_passive_effect() + . = ..() + nanites.stealth = FALSE + +/datum/nanite_program/relay + name = "Relay" + desc = "The nanites receive and relay long-range nanite signals." + rogue_types = list(/datum/nanite_program/toxic) + + extra_settings = list("Relay Channel") + var/relay_channel = 1 + +/datum/nanite_program/relay/set_extra_setting(user, setting) + if(setting == "Relay Channel") + var/new_channel = input(user, "Set the relay channel (1-9999):", name, null) as null|num + if(isnull(new_channel)) + return + relay_channel = CLAMP(round(new_channel, 1), 1, 9999) + +/datum/nanite_program/relay/get_extra_setting(setting) + if(setting == "Relay Channel") + return relay_channel + +/datum/nanite_program/relay/copy_extra_settings_to(datum/nanite_program/relay/target) + target.relay_channel = relay_channel + +/datum/nanite_program/relay/enable_passive_effect() + . = ..() + SSnanites.nanite_relays |= src + +/datum/nanite_program/relay/disable_passive_effect() + . = ..() + SSnanites.nanite_relays -= src + +/datum/nanite_program/relay/proc/relay_signal(code, relay_code, source) + if(!activated) + return + if(!host_mob) + return + if(relay_code != relay_channel) + return + SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, code, source) + +/datum/nanite_program/metabolic_synthesis + name = "Metabolic Synthesis" + desc = "The nanites use the metabolic cycle of the host to speed up their replication rate, using their extra nutrition as fuel." + use_rate = -0.5 //generates nanites + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/metabolic_synthesis/check_conditions() + if(!iscarbon(host_mob)) + return FALSE + var/mob/living/carbon/C = host_mob + if(C.nutrition <= NUTRITION_LEVEL_WELL_FED) + return FALSE + return ..() + +/datum/nanite_program/metabolic_synthesis/active_effect() + host_mob.nutrition -= 0.5 + +/datum/nanite_program/triggered/access + name = "Subdermal ID" + desc = "The nanites store the host's ID access rights in a subdermal magnetic strip. Updates when triggered, copying the host's current access." + rogue_types = list(/datum/nanite_program/skin_decay) + var/access = list() + +//Syncs the nanites with the cumulative current mob's access level. Can potentially wipe existing access. +/datum/nanite_program/triggered/access/trigger() + var/list/new_access = list() + var/obj/item/current_item + current_item = host_mob.get_active_held_item() + if(current_item) + new_access += current_item.GetAccess() + current_item = host_mob.get_inactive_held_item() + if(current_item) + new_access += current_item.GetAccess() + if(ishuman(host_mob)) + var/mob/living/carbon/human/H = host_mob + current_item = H.wear_id + if(current_item) + new_access += current_item.GetAccess() + else if(isanimal(host_mob)) + var/mob/living/simple_animal/A = host_mob + current_item = A.access_card + if(current_item) + new_access += current_item.GetAccess() + access = new_access + +/datum/nanite_program/spreading + name = "Infective Exo-Locomotion" + desc = "The nanites gain the ability to survive for brief periods outside of the human body, as well as the ability to start new colonies without an integration process; \ + resulting in an extremely infective strain of nanites." + use_rate = 1.50 + rogue_types = list(/datum/nanite_program/aggressive_replication, /datum/nanite_program/necrotic) + +/datum/nanite_program/spreading/active_effect() + if(prob(10)) + var/list/mob/living/target_hosts = list() + for(var/mob/living/L in oview(5, host_mob)) + target_hosts += L + var/mob/living/infectee = pick(target_hosts) + if(prob(100 - (infectee.get_permeability_protection() * 100))) + //this will potentially take over existing nanites! + infectee.AddComponent(/datum/component/nanites, 10) + SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites) + infectee.investigate_log("[key_name(infectee)] was infected by spreading nanites by [key_name(host_mob)]", INVESTIGATE_NANITES) + +/datum/nanite_program/mitosis + name = "Mitosis" + desc = "The nanites gain the ability to self-replicate, using bluespace to power the process, instead of drawing from a template. This rapidly speeds up the replication rate,\ + but it causes occasional software errors due to faulty copies. Not compatible with cloud sync." + use_rate = 0 + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/mitosis/active_effect() + if(nanites.cloud_id) + return + var/rep_rate = round(nanites.nanite_volume / 50, 1) //0.5 per 50 nanite volume + rep_rate *= 0.5 + nanites.adjust_nanites(rep_rate) + if(prob(rep_rate)) + var/datum/nanite_program/fault = pick(nanites.programs) + if(fault == src) + return + fault.software_error() \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm new file mode 100644 index 00000000000..f4914d4af0f --- /dev/null +++ b/code/modules/research/nanites/nanite_programs/weapon.dm @@ -0,0 +1,200 @@ +//Programs specifically engineered to cause harm to either the user or its surroundings (as opposed to ones that only do it due to broken programming) +//Very dangerous! + +/datum/nanite_program/flesh_eating + name = "Cellular Breakdown" + desc = "The nanites destroy cellular structures in the host's body, causing brute damage." + use_rate = 1.5 + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/flesh_eating/active_effect() + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + C.take_bodypart_damage(1, 0, 0) + else + host_mob.adjustBruteLoss(1, TRUE) + if(prob(3)) + to_chat(host_mob, "You feel a stab of pain from somewhere inside you.") + +/datum/nanite_program/poison + name = "Poisoning" + desc = "The nanites deliver poisonous chemicals to the host's internal organs, causing toxin damage and vomiting." + use_rate = 1.5 + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/poison/active_effect() + host_mob.adjustToxLoss(1) + if(prob(2)) + to_chat(host_mob, "You feel nauseous.") + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + C.vomit(20) + +/datum/nanite_program/memory_leak + name = "Memory Leak" + desc = "This program invades the memory space used by other programs, causing frequent corruptions and errors." + use_rate = 0 + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/memory_leak/active_effect() + if(prob(6)) + var/datum/nanite_program/target = pick(nanites.programs) + if(target == src) + return + target.software_error() + +/datum/nanite_program/aggressive_replication + name = "Aggressive Replication" + desc = "Nanites will consume organic matter to improve their replication rate, damaging the host. The efficiency increases with the volume of nanites, requiring 200 to break even." + use_rate = 1 + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/aggressive_replication/active_effect() + var/extra_regen = round(nanites.nanite_volume / 200, 0.1) + nanites.adjust_nanites(extra_regen) + host_mob.adjustBruteLoss(extra_regen / 2, TRUE) + +/datum/nanite_program/meltdown + name = "Meltdown" + desc = "Causes an internal meltdown inside the nanites, causing internal burns inside the host as well as rapidly destroying the nanite population.\ + Sets the nanites' safety threshold to 0 when activated." + use_rate = 10 + rogue_types = list(/datum/nanite_program/glitch) + +/datum/nanite_program/meltdown/active_effect() + host_mob.adjustFireLoss(3.5) + +/datum/nanite_program/meltdown/enable_passive_effect() + . = ..() + to_chat(host_mob, "Your blood is burning!") + nanites.safety_threshold = 0 + +/datum/nanite_program/meltdown/disable_passive_effect() + . = ..() + to_chat(host_mob, "Your blood cools down, and the pain gradually fades.") + +/datum/nanite_program/triggered/explosive + name = "Chain Detonation" + desc = "Detonates all the nanites inside the host in a chain reaction when triggered." + trigger_cost = 25 //plus every idle nanite left afterwards + trigger_cooldown = 100 //Just to avoid double-triggering + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/triggered/explosive/trigger() + if(!..()) + return + host_mob.visible_message("[host_mob] starts emitting a high-pitched buzzing, and [host_mob.p_their()] skin begins to glow...",\ + "You start emitting a high-pitched buzzing, and your skin begins to glow...") + addtimer(CALLBACK(src, .proc/boom), CLAMP((nanites.nanite_volume * 0.35), 25, 150)) + +/datum/nanite_program/triggered/explosive/proc/boom() + var/nanite_amount = nanites.nanite_volume + var/dev_range = FLOOR(nanite_amount/200, 1) - 1 + var/heavy_range = FLOOR(nanite_amount/100, 1) - 1 + var/light_range = FLOOR(nanite_amount/50, 1) - 1 + explosion(host_mob, dev_range, heavy_range, light_range) + qdel(nanites) + +//TODO make it defuse if triggered again + +/datum/nanite_program/triggered/heart_stop + name = "Heart-Stopper" + desc = "Stops the host's heart when triggered; restarts it if triggered again." + trigger_cost = 12 + trigger_cooldown = 10 + rogue_types = list(/datum/nanite_program/nerve_decay) + +/datum/nanite_program/triggered/heart_stop/trigger() + if(!..()) + return + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + var/obj/item/organ/heart/heart = C.getorganslot(ORGAN_SLOT_HEART) + if(heart) + if(heart.beating) + heart.Stop() + else + heart.Restart() + +/datum/nanite_program/triggered/emp + name = "Electromagnetic Resonance" + desc = "The nanites cause an elctromagnetic pulse around the host when triggered. Will corrupt other nanite programs!" + trigger_cost = 10 + program_flags = NANITE_EMP_IMMUNE + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/triggered/emp/trigger() + if(!..()) + return + empulse(host_mob, 1, 2) + +/datum/nanite_program/pyro/active_effect() + host_mob.fire_stacks += 1 + host_mob.IgniteMob() + +/datum/nanite_program/pyro + name = "Sub-Dermal Combustion" + desc = "The nanites cause buildup of flammable fluids under the host's skin, then ignites them." + use_rate = 4 + rogue_types = list(/datum/nanite_program/skin_decay, /datum/nanite_program/cryo) + +/datum/nanite_program/pyro/check_conditions() + if(host_mob.fire_stacks >= 10 && host_mob.on_fire) + return FALSE + return ..() + +/datum/nanite_program/pyro/active_effect() + host_mob.fire_stacks += 1 + host_mob.IgniteMob() + +/datum/nanite_program/cryo + name = "Cryogenic Treatment" + desc = "The nanites rapidly skin heat through the host's skin, lowering their temperature." + use_rate = 1 + rogue_types = list(/datum/nanite_program/skin_decay, /datum/nanite_program/pyro) + +/datum/nanite_program/cryo/check_conditions() + if(host_mob.bodytemperature <= 70) + return FALSE + return ..() + +/datum/nanite_program/cryo/active_effect() + host_mob.adjust_bodytemperature(-rand(15,25), 50) + +/datum/nanite_program/mind_control + name = "Mind Control" + desc = "The nanites imprint an absolute directive onto the host's brain while they're active." + use_rate = 3 + rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) + + extra_settings = list("Directive") + var/cooldown = 0 //avoids spam when nanites are running low + var/directive = "..." + +/datum/nanite_program/mind_control/set_extra_setting(user, setting) + if(setting == "Directive") + var/new_directive = stripped_input(user, "Choose the directive to imprint with mind control.", "Directive", directive, MAX_MESSAGE_LEN) + if(!new_directive) + return + directive = new_directive + +/datum/nanite_program/mind_control/get_extra_setting(setting) + if(setting == "Directive") + return directive + +/datum/nanite_program/mind_control/copy_extra_settings_to(datum/nanite_program/mind_control/target) + target.directive = directive + +/datum/nanite_program/mind_control/enable_passive_effect() + if(world.time < cooldown) + return + . = ..() + brainwash(host_mob, directive) + log_game("A mind control nanite program brainwashed [key_name(host_mob)] with the objective '[directive]'.") + +/datum/nanite_program/mind_control/disable_passive_effect() + . = ..() + if(host_mob.mind && host_mob.mind.has_antag_datum(/datum/antagonist/brainwashed)) + host_mob.mind.remove_antag_datum(/datum/antagonist/brainwashed) + log_game("[key_name(host_mob)] is no longer brainwashed by nanites.") + cooldown = world.time + 450 \ No newline at end of file diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm new file mode 100644 index 00000000000..60dd78cf949 --- /dev/null +++ b/code/modules/research/nanites/nanite_remote.dm @@ -0,0 +1,172 @@ +#define REMOTE_MODE_OFF "Off" +#define REMOTE_MODE_SELF "Local" +#define REMOTE_MODE_TARGET "Targeted" +#define REMOTE_MODE_AOE "Area" +#define REMOTE_MODE_RELAY "Relay" + +/obj/item/nanite_remote + name = "nanite remote control" + desc = "A device that can remotely control active nanites through wireless signals." + w_class = WEIGHT_CLASS_SMALL + req_access = list(ACCESS_ROBOTICS) + icon = 'icons/obj/device.dmi' + icon_state = "nanite_remote" + item_flags = NOBLUDGEON + var/locked = FALSE //Can be locked, so it can be given to users with a set code and mode + var/mode = REMOTE_MODE_OFF + var/list/saved_settings = list() + var/last_id = 0 + var/code = 0 + var/relay_code = 0 + +/obj/item/nanite_remote/examine(mob/user) + . = ..() + if(locked) + to_chat(user, "Alt-click to unlock.") + +/obj/item/nanite_remote/AltClick(mob/user) + . = ..() + if(!user.canUseTopic(src, BE_CLOSE)) + return + if(locked) + if(allowed(user)) + to_chat(user, "You unlock [src].") + locked = FALSE + update_icon() + else + to_chat(user, "Access denied.") + +/obj/item/nanite_remote/emag_act(mob/user) + if(obj_flags & EMAGGED) + return + to_chat(user, "You override [src]'s ID lock.") + obj_flags |= EMAGGED + if(locked) + locked = FALSE + update_icon() + +/obj/item/nanite_remote/update_icon() + . = ..() + cut_overlays() + if(obj_flags & EMAGGED) + add_overlay("nanite_remote_emagged") + if(locked) + add_overlay("nanite_remote_locked") + +/obj/item/nanite_remote/afterattack(atom/target, mob/user, etc) + switch(mode) + if(REMOTE_MODE_OFF) + return + if(REMOTE_MODE_SELF) + to_chat(user, "You activate [src], signaling the nanites in your bloodstream.") + signal_mob(user, code, key_name(user)) + if(REMOTE_MODE_TARGET) + if(isliving(target) && (get_dist(target, get_turf(src)) <= 7)) + to_chat(user, "You activate [src], signaling the nanites inside [target].") + signal_mob(target, code, key_name(user)) + if(REMOTE_MODE_AOE) + to_chat(user, "You activate [src], signaling the nanites inside every host around you.") + for(var/mob/living/L in view(user, 7)) + signal_mob(L, code, key_name(user)) + if(REMOTE_MODE_RELAY) + to_chat(user, "You activate [src], signaling all connected relay nanites.") + signal_relay(code, relay_code, key_name(user)) + +/obj/item/nanite_remote/proc/signal_mob(mob/living/M, code, source) + SEND_SIGNAL(M, COMSIG_NANITE_SIGNAL, code, source) + +/obj/item/nanite_remote/proc/signal_relay(code, relay_code, source) + for(var/X in SSnanites.nanite_relays) + var/datum/nanite_program/relay/N = X + N.relay_signal(code, relay_code, source) + +/obj/item/nanite_remote/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "nanite_remote", name, 420, 800, master_ui, state) + ui.open() + +/obj/item/nanite_remote/ui_data() + var/list/data = list() + data["code"] = code + data["relay_code"] = relay_code + data["mode"] = mode + data["locked"] = locked + data["saved_settings"] = saved_settings + + return data + +/obj/item/nanite_remote/ui_act(action, params) + if(..()) + return + switch(action) + if("set_code") + if(locked) + return + var/new_code = input("Set code (0000-9999):", name, code) as null|num + if(!isnull(new_code)) + new_code = CLAMP(round(new_code, 1),0,9999) + code = new_code + . = TRUE + if("set_relay_code") + if(locked) + return + var/new_code = input("Set relay code (0000-9999):", name, code) as null|num + if(!isnull(new_code)) + new_code = CLAMP(round(new_code, 1),0,9999) + relay_code = new_code + . = TRUE + if("save") + if(locked) + return + var/code_name = stripped_input(usr, "Set the setting name", "Set Name", null , 15) + if(!code_name) + return + var/new_save = list() + new_save["id"] = last_id + 1 + last_id++ + new_save["name"] = code_name + new_save["code"] = code + new_save["mode"] = mode + new_save["relay_code"] = relay_code + + saved_settings += list(new_save) + . = TRUE + if("load") + var/code_id = params["save_id"] + var/list/setting + for(var/list/X in saved_settings) + if(X["id"] == text2num(code_id)) + setting = X + break + if(setting) + code = setting["code"] + mode = setting["mode"] + relay_code = setting["relay_code"] + . = TRUE + if("remove_save") + if(locked) + return + var/code_id = params["save_id"] + for(var/list/setting in saved_settings) + if(setting["id"] == text2num(code_id)) + saved_settings -= list(setting) + break + . = TRUE + if("select_mode") + if(locked) + return + mode = params["mode"] + . = TRUE + if("lock") + if(!(obj_flags & EMAGGED)) + locked = TRUE + update_icon() + . = TRUE + + +#undef REMOTE_MODE_OFF +#undef REMOTE_MODE_SELF +#undef REMOTE_MODE_TARGET +#undef REMOTE_MODE_AOE +#undef REMOTE_MODE_RELAY \ No newline at end of file diff --git a/code/modules/research/nanites/program_disks.dm b/code/modules/research/nanites/program_disks.dm new file mode 100644 index 00000000000..86b7803fc94 --- /dev/null +++ b/code/modules/research/nanites/program_disks.dm @@ -0,0 +1,133 @@ +//Names are intentionally all the same - track your nanites, or use a hand labeler +//This also means that you can give flesh melting nanites to your victims if you feel like it + +/obj/item/disk/nanite_program + name = "nanite program disk" + desc = "A disk capable of storing nanite programs. Can be customized using a Nanite Programming Console." + var/program_type + var/datum/nanite_program/program + +/obj/item/disk/nanite_program/Initialize() + . = ..() + if(program_type) + program = new program_type + +/obj/item/disk/nanite_program/aggressive_replication + program_type = /datum/nanite_program/aggressive_replication + +/obj/item/disk/nanite_program/metabolic_synthesis + program_type = /datum/nanite_program/metabolic_synthesis + +/obj/item/disk/nanite_program/viral + program_type = /datum/nanite_program/viral + +/obj/item/disk/nanite_program/meltdown + program_type = /datum/nanite_program/meltdown + +/obj/item/disk/nanite_program/monitoring + program_type = /datum/nanite_program/monitoring + +/obj/item/disk/nanite_program/relay + program_type = /datum/nanite_program/relay + +/obj/item/disk/nanite_program/emp + program_type = /datum/nanite_program/triggered/emp + +/obj/item/disk/nanite_program/spreading + program_type = /datum/nanite_program/spreading + +/obj/item/disk/nanite_program/regenerative + program_type = /datum/nanite_program/regenerative + +/obj/item/disk/nanite_program/regenerative_advanced + program_type = /datum/nanite_program/regenerative_advanced + +/obj/item/disk/nanite_program/temperature + program_type = /datum/nanite_program/temperature + +/obj/item/disk/nanite_program/purging + program_type = /datum/nanite_program/purging + +/obj/item/disk/nanite_program/purging_advanced + program_type = /datum/nanite_program/purging_advanced + +/obj/item/disk/nanite_program/brain_heal + program_type = /datum/nanite_program/brain_heal + +/obj/item/disk/nanite_program/brain_heal_advanced + program_type = /datum/nanite_program/brain_heal_advanced + +/obj/item/disk/nanite_program/blood_restoring + program_type = /datum/nanite_program/blood_restoring + +/obj/item/disk/nanite_program/repairing + program_type = /datum/nanite_program/repairing + +/obj/item/disk/nanite_program/nervous + program_type = /datum/nanite_program/nervous + +/obj/item/disk/nanite_program/hardening + program_type = /datum/nanite_program/hardening + +/obj/item/disk/nanite_program/coagulating + program_type = /datum/nanite_program/coagulating + +/obj/item/disk/nanite_program/necrotic + program_type = /datum/nanite_program/necrotic + +/obj/item/disk/nanite_program/brain_decay + program_type = /datum/nanite_program/brain_decay + +/obj/item/disk/nanite_program/pyro + program_type = /datum/nanite_program/pyro + +/obj/item/disk/nanite_program/cryo + program_type = /datum/nanite_program/cryo + +/obj/item/disk/nanite_program/toxic + program_type = /datum/nanite_program/toxic + +/obj/item/disk/nanite_program/suffocating + program_type = /datum/nanite_program/suffocating + +/obj/item/disk/nanite_program/heart_stop + program_type = /datum/nanite_program/triggered/heart_stop + +/obj/item/disk/nanite_program/explosive + program_type = /datum/nanite_program/triggered/explosive + +/obj/item/disk/nanite_program/shock + program_type = /datum/nanite_program/triggered/shocking + +/obj/item/disk/nanite_program/sleepy + program_type = /datum/nanite_program/triggered/sleepy + +/obj/item/disk/nanite_program/paralyzing + program_type = /datum/nanite_program/paralyzing + +/obj/item/disk/nanite_program/fake_death + program_type = /datum/nanite_program/fake_death + +/obj/item/disk/nanite_program/pacifying + program_type = /datum/nanite_program/pacifying + +/obj/item/disk/nanite_program/glitch + program_type = /datum/nanite_program/glitch + +/obj/item/disk/nanite_program/brain_misfire + program_type = /datum/nanite_program/pacifying + +/obj/item/disk/nanite_program/skin_decay + program_type = /datum/nanite_program/pacifying + +/obj/item/disk/nanite_program/nerve_decay + program_type = /datum/nanite_program/pacifying + +/obj/item/disk/nanite_program/refractive + program_type = /datum/nanite_program/refractive + +/obj/item/disk/nanite_program/conductive + program_type = /datum/nanite_program/pacifying + +/obj/item/disk/nanite_program/stun + program_type = /datum/nanite_program/triggered/stun \ No newline at end of file diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm new file mode 100644 index 00000000000..89c99a9c72e --- /dev/null +++ b/code/modules/research/nanites/public_chamber.dm @@ -0,0 +1,174 @@ +/obj/machinery/public_nanite_chamber + name = "public nanite chamber" + desc = "A device that can rapidly implant cloud-synced nanites without an external operator." + circuit = /obj/item/circuitboard/machine/public_nanite_chamber + icon = 'icons/obj/machines/nanite_chamber.dmi' + icon_state = "nanite_chamber" + use_power = IDLE_POWER_USE + anchored = TRUE + density = TRUE + idle_power_usage = 50 + active_power_usage = 300 + occupant_typecache = list(/mob/living) + + var/cloud_id = 1 + var/locked = FALSE + var/breakout_time = 1200 + var/busy = FALSE + var/busy_icon_state + var/message_cooldown = 0 + +/obj/machinery/public_nanite_chamber/RefreshParts() + var/obj/item/circuitboard/machine/public_nanite_chamber/board = circuit + if(board) + cloud_id = board.cloud_id + +/obj/machinery/public_nanite_chamber/proc/set_busy(status, working_icon) + busy = status + busy_icon_state = working_icon + update_icon() + +/obj/machinery/public_nanite_chamber/proc/inject_nanites() + if(stat & (NOPOWER|BROKEN)) + return + if((stat & MAINT) || panel_open) + return + if(!occupant || busy) + return + + var/locked_state = locked + locked = TRUE + + //TODO OMINOUS MACHINE SOUNDS + set_busy(TRUE, "[initial(icon_state)]_raising") + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "[initial(icon_state)]_active"),20) + addtimer(CALLBACK(src, .proc/set_busy, TRUE, "[initial(icon_state)]_falling"),60) + addtimer(CALLBACK(src, .proc/complete_injection, locked_state),80) + +/obj/machinery/public_nanite_chamber/proc/complete_injection(locked_state) + //TODO MACHINE DING + locked = locked_state + set_busy(FALSE) + if(!occupant) + return + occupant.AddComponent(/datum/component/nanites, 75, cloud_id) + +/obj/machinery/public_nanite_chamber/update_icon() + cut_overlays() + + if((stat & MAINT) || panel_open) + add_overlay("maint") + + else if(!(stat & (NOPOWER|BROKEN))) + if(busy || locked) + add_overlay("red") + if(locked) + add_overlay("bolted") + else + add_overlay("green") + + + + //running and someone in there + if(occupant) + if(busy) + icon_state = busy_icon_state + else + icon_state = initial(icon_state)+ "_occupied" + return + + //running + icon_state = initial(icon_state)+ (state_open ? "_open" : "") + +/obj/machinery/public_nanite_chamber/power_change() + . = ..() + update_icon() + +/obj/machinery/public_nanite_chamber/proc/toggle_open(mob/user) + if(panel_open) + to_chat(user, "Close the maintenance panel first.") + return + + if(state_open) + close_machine() + return + + else if(locked) + to_chat(user, "The bolts are locked down, securing the door shut.") + return + + open_machine() + +/obj/machinery/public_nanite_chamber/container_resist(mob/living/user) + if(!locked) + open_machine() + return + if(busy) + return + user.changeNext_move(CLICK_CD_BREAKOUT) + user.last_special = world.time + CLICK_CD_BREAKOUT + user.visible_message("You see [user] kicking against the door of [src]!", \ + "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ + "You hear a metallic creaking from [src].") + if(do_after(user,(breakout_time), target = src)) + if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked || busy) + return + locked = FALSE + user.visible_message("[user] successfully broke out of [src]!", \ + "You successfully break out of [src]!") + open_machine() + +/obj/machinery/public_nanite_chamber/close_machine(mob/living/carbon/user) + if(!state_open) + return FALSE + + ..() + + . = TRUE + + addtimer(CALLBACK(src, .proc/try_inject_nanites), 30) //If someone is shoved in give them a chance to get out before the injection starts + +/obj/machinery/public_nanite_chamber/proc/try_inject_nanites() + if(occupant) + var/mob/living/L = occupant + if(SEND_SIGNAL(L, COMSIG_HAS_NANITES)) + return + if((MOB_ORGANIC in L.mob_biotypes) || (MOB_UNDEAD in L.mob_biotypes)) + inject_nanites() + +/obj/machinery/public_nanite_chamber/open_machine() + if(state_open) + return FALSE + + ..() + + return TRUE + +/obj/machinery/public_nanite_chamber/relaymove(mob/user as mob) + if(user.stat || locked) + if(message_cooldown <= world.time) + message_cooldown = world.time + 50 + to_chat(user, "[src]'s door won't budge!") + return + open_machine() + +/obj/machinery/public_nanite_chamber/attackby(obj/item/I, mob/user, params) + if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... + update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed + return + + if(default_pry_open(I)) + return + + if(default_deconstruction_crowbar(I)) + return + + return ..() + +/obj/machinery/public_nanite_chamber/interact(mob/user) + toggle_open(user) + +/obj/machinery/public_nanite_chamber/MouseDrop_T(mob/target, mob/user) + if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) + return + close_machine(target) \ No newline at end of file diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 5403b09b0d5..f1d8fe3b78e 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -816,6 +816,91 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 +/////////////////////////Nanites///////////////////////// +/datum/techweb_node/nanite_base + id = "nanite_base" + display_name = "Basic Nanite Programming" + description = "The basics of nanite construction and programming." + prereq_ids = list("datatheory","robotics") + design_ids = list("nanite_disk","nanite_remote","nanite_scanner",\ + "nanite_chamber","public_nanite_chamber","nanite_chamber_control","nanite_programmer","nanite_program_hub","nanite_cloud_control",\ + "relay_nanites", "monitoring_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + +/datum/techweb_node/nanite_smart + id = "nanite_smart" + display_name = "Smart Nanite Programming" + description = "Nanite programs that require nanites to perform complex actions, act independently, roam or seek targets." + prereq_ids = list("nanite_base","adv_robotics") + design_ids = list("purging_nanites", "metabolic_nanites", "stealth_nanites", "memleak_nanites","sensor_voice_nanites", "voice_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) + export_price = 4000 + +/datum/techweb_node/nanite_mesh + id = "nanite_mesh" + display_name = "Mesh Nanite Programming" + description = "Nanite programs that require static structures and membranes." + prereq_ids = list("nanite_base","engineering") + design_ids = list("hardening_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + +/datum/techweb_node/nanite_bio + id = "nanite_bio" + display_name = "Biological Nanite Programming" + description = "Nanite programs that require complex biological interaction." + prereq_ids = list("nanite_base","biotech") + design_ids = list("regenerative_nanites", "bloodheal_nanites", "coagulating_nanites","poison_nanites","flesheating_nanites",\ + "sensor_crit_nanites","sensor_death_nanites", "sensor_health_nanites", "sensor_damage_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + +/datum/techweb_node/nanite_neural + id = "nanite_neural" + display_name = "Neural Nanite Programming" + description = "Nanite programs affecting nerves and brain matter." + prereq_ids = list("nanite_bio") + design_ids = list("nervous_nanites", "brainheal_nanites", "paralyzing_nanites", "stun_nanites", "selfscan_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + +/datum/techweb_node/nanite_synaptic + id = "nanite_synaptic" + display_name = "Synaptic Nanite Programming" + description = "Nanite programs affecting mind and thoughts." + prereq_ids = list("nanite_neural","neural_programming") + design_ids = list("mindshield_nanites", "pacifying_nanites", "blinding_nanites", "sleep_nanites", "mute_nanites", "speech_nanites","hallucination_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + +/datum/techweb_node/nanite_harmonic + id = "nanite_harmonic" + display_name = "Harmonic Nanite Programming" + description = "Nanite programs that require seamless integration between nanites and biology." + prereq_ids = list("nanite_bio","nanite_smart","nanite_mesh") + design_ids = list("fakedeath_nanites","aggressive_nanites","defib_nanites","regenerative_plus_nanites","brainheal_plus_nanites","purging_plus_nanites","adrenaline_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) + export_price = 8000 + +/datum/techweb_node/nanite_combat + id = "nanite_military" + display_name = "Military Nanite Programming" + description = "Nanite programs that perform military-grade functions." + prereq_ids = list("nanite_harmonic", "syndicate_basic") + design_ids = list("explosive_nanites","pyro_nanites","meltdown_nanites","viral_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) + export_price = 12500 + +/datum/techweb_node/nanite_hazard + id = "nanite_hazard" + display_name = "Hazard Nanite Programs" + description = "Extremely advanced Nanite programs with the potential of being extremely dangerous." + prereq_ids = list("nanite_harmonic", "alientech") + design_ids = list("spreading_nanites","mindcontrol_nanites","mitosis_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + export_price = 15000 + ////////////////////////Alien technology//////////////////////// /datum/techweb_node/alientech //AYYYYYYYYLMAOO tech id = "alientech" diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 8c9849ce027..f4db9ddbeed 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -41,7 +41,7 @@ if(!target.mind) user.visible_message("[target] doesn't respond to the brainwashing, as if [target.p_they()] lacked a mind...") return FALSE - if(target.isloyal()) + if(target.has_trait(TRAIT_MINDSHIELD)) user.visible_message("You hear a faint buzzing from a device inside [target]'s brain, and the brainwashing is erased.") return FALSE user.visible_message("[user] successfully brainwashes [target]!", "You succeed in brainwashing [target].") diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 5c9a7b9ba2f0ad837e7fd5a633c84a8f6dbee31b..047f08094662b38053bdae13b3d87a530d485cac 100644 GIT binary patch literal 14773 zcmd73cUY58*De|mq^T$%RY0Y8K>*V5@vXUv!%&eI;_qzGVP+$8ZGcPj$0JsQx z^2itfplSR2FrKGM6h-R20RXxOfzQk#j~u-1y<9vYE*|axfPZ>M%8(bY%H__XHHiYa zRQ-jiWxtdrBWrjxhB6@4TCR8>OirS* zTDf8uGe!9(q$N06J9dr+R$ogk%&dGfmlZXW(H)y1Ybz+I1wLL8N;=bZ)+D?xh!6Ww^p$+;nU_O>5k6@(CuhM`%ti zhH3eja2xeLe(@(baq>ir^YltmizWz(|A$9V)QV{yV7&fZ(EEJH$fY~KcnVaKuXc%ukCf4G~QxYeg(r$KVAxIG*d6Dagg zHlxP4x~smtS4f~oxNA)GBge=0`@BPD zGJFs`%b3RR2fwIU%^q|9M{3EdmHUB0sSjS?Z(Q#7Uu4*L_dq$SOt-x4R*fh^7t0HdEhOO90Z3C2iMftRrWQv`hWJ~fq_MDx|rgJyX-nnFz zdT|T%l|xmQRsNjKfX>F5LLPrc(c{5*vwX-q zm75y68)u{ObGV+n0Vd~V7e)4+FYJ^((%v*@S`8ZIpzV}oD2S@E{q73li;~UX(w)Tq zbHPi82R+cSkf7`kIcJKKwf#7ESytQsVbyyD?}t?qrSZ7OY&A+pEnautCgH+sb(Xy@ zW?ErgB1MsJK3px)QZkWNGPYs($B_0=Pax2B8vdZ-oxF4+&Co2N1z5DP&h=SI;(c9i zK|(=zVMt?2>X$n4&1d=_+Eb!7!+8%aif`UFZ28=8cqFOtaJ;np!ZXCb1>~ea`RA{a z(gr*VaA`oTU#|=X%9zg$g*d(E;VL(0oJkumL_Mye| zav;$$Ml|Z`Du?;o%TGIOelU;7x^Zu^%g{+ZouFlqG@Ua+GprZCV8x;p!Hu+Kw*2+U zWO8%eN%NH@=|pE2PnqjwEIsNTaSzNEbU-Ug8)yO_gKvRxU$I2`nQQyS_CXu7p@Je& z!^3=qfc5j0UEZvg4zXh?UGXL^enP6N#xDmhmDREG2zy?9y2Gd~(`cZ!4nW+Qp=j8A zBcVo}DRQ7o{L9JOUHjI$J|jiAjlChG&~M_MJOO;bY_Ofz#kiAO4WXbVME1D=mN?yH z>$cTvB7Fi4E{MXd9?Z(tN!QB3?AR($x)kT63V-w)0JshSJ<@#UpT0ByF8JB_x7`D$ zhc(uUAH%Y{H6uUUF*2&!M;_OF{`H_dNhrd0fd`T*p#bP@t`?J-1QEn$E?|gtd|!{%LrYs43702v9!~!Pt8$#n7EA3xE z^&5m9%W6N-FHxIYd{LjxE3;+AkIi8!h!^G~M8c+Rv^s1sVJvbDQUAhc8^4t#V0i~N zN}R946tZcK5MRyw%7m4F#(>LDaqR!R8X-bduLeOK&>wQ}<>fL}7}w0tYpy9Thq5$U z8lB0T<4>zF1{3i)_#tN-;t)((12TQ11Es8fI$w_1!PPYlX8CL^V1S-hLwJXyql*O< z75ebQo-~24!lYGiClH*Mm-kqyX>!n&+fh_cqjJe!W~iAxh@37}nD)mY5Z2yBKI}qu zW}=`Q-yDDZddQ+Nft}l(!kPTj7KM-{PT`(bb!}PFJ34;tGVKsVJi6(kuXgY&G*+Fk zU0sDSGu6LE8J)4*ucDY(@C3E4^$4?t3+fd9iKX^_CeK*HZKg)Ti8NJZpP(mdKa^D_ zv36Nq2y`|`v89H+tOX#r?bzxRF34-UI6O959gkxtd2i395q*%Y6%WO(4a?#81i=%9 zL$GZw4;^?+@wN>)Tf@UhFLf7IzVuy&b?(r--N8z~)zgX^4Yv9jQlkoq?{E6B=sp(N zS?p3(7&U_1n)*+FBx0rNWZjXJz;ONML*InY9V2CDzX#*7 z+ud@FZ~CYe55^F4`s#$&d^odqt}Ib!NJPSkPQ0hrHN?2!G;{v&;otXZBu$#$G`e|q z%xoWJtrw&vPv6Vo{LR72+Tgv8dx3^-dvzK#nV&RI-nts-YvQ5@y9w3wOVXUGr+Xj? z<@pe;dp&REe>a=(?;o50&t>ad>1YpFeh-M;2LQGacbU!umPD8@{}%@N-!nB{Oyox- zw~)F7>vwAHJWzGduyPqe`?i=x-;=FX)_vko|F!Rvcw||iYa2#RjnvjMh}u=&yKqW$ z)xNZ_MJz?OAcyc2CFeaHs>*2zL$PhQ#bk+&*+XOLPss=BP@M^Tl>hCfU_CTV3%QZp z9qV}FL>3zqocn{3K0ULtnRuG=N(^OKS5AC6O)w!}#R!;tlIAG>xwD9S4%T}x_p{VR z6JOXGY%^~T^OoGZG8FJTqU(_8JvK>Ppw8{;MN=qMg>rqW4j+dqdCa|^{sBc6buYqV> z(2);-IATv@S);K>78bKw9yGx2!bW>c0U=_6(rw@)FW%Cv$)i}0T?euCAkNh0c}c*pkw>-M6n;25+An>$j!%&?UI;+byMY_T zCj@_BC93J&jzYeb(Cwos2awv8ec6eQUdKxx41d~{c zScJ{uyz$!78=*z?32=_$eDGn`PKugXXB;+db&Ucn*M^mp zcx$PD8^OU|`p}tw8n|NT54gk%tvg0>Xxr7{aD79*&~7y2{w{t@(Qo7RfK8+7y{oU! z3ElS}IARpOMiY}siIYWWPV>@eY2P0KpMMkG_5%Z?a9y#&=VF|&xGb0z-guW$dQ}n_ zEbwMkHv`SZth?Xuy8Br@jXKylsP`BH8h!;bB%C3l{({O{eCQY$4p|3PzZ^*P(gxre zme$)xw4mgZc3-H56+YbY`Wp-;maOUoSQ$uq=J}gT=GWb~oZ`)X`}Jc_$r4M{Der=w zw=N3qm5zfk{h|&@)xYQYURK|A0H87|&JF;u%>mH-7Y34Xd0U0SlN^EjB|c#0H*Y>{ z5nUp8C6iH(J%v5UY?7;HI}z)_BZuW0%rL%1X>6Lb=mF>aAfTT39%lt3@!o5{Ir_m> zD`b)eupZhQy(T1>c@uQjb~5xuSRLQdB@CkM9r#ow4Ii1brVX&ZTOv5E_sD5Diu_&L z{Y6H(!XUq)tcnI*Gbh2>?+&`#BA3^+tA9GA;a^nbZTn7jdr&OxAV2*1y$;TUMqQCv z!}z6-7<;*Iw}6oD4n9?6`vdZi29tgUv8drP`q)>K>V~jH;SE-qS$ny55$68>o3Z7_ zM26*CK$j?EO;Jhfx)ed3)c&d|UugZ%$gFGF^<$!n_iH_c6zNlQ$%M}>RNKwR$7lNJ z;>C-m*uE8FSCEwS!f+foSWobj%yR}4E3dA*I9Bj9E?(ljRn}szqU(ft-?2>%#EZFm z*>{RFF;jTJa{tNTyV)FvSNA6KiEOs$B^6H*>8y_*&pY8|zw71zeqM1BzeY0ynLgE2 z5vuI#G?+}8oO6(Y?T(JyXxY_$XuzMi?ZS#xR#z?tmJgC?Zb_poSOi7{HPrJla_eGv zw0$)oC%0n1)qtL37e+3Z8No6ob;SxIo=G~qyZ4~3w=z#Zv?nXHRs;nQRu;MAx3QUi z^KkqImxtlBd6Q6;C-d=_NaeeHOpUzw27!R^A1hMfZj~yum#VQIZY8CqeVoIm2Y(cU zj^Av}EGLNgBhJ2N-zP8e*Y2I_2w06C-osvrS0ny#W)FdQajIwv?a#fa_kOQGatQnx>vjFk>Dn2?eea2#&tv-0*Q zM+*s`3bg70-}TdJC!uzCeQebzXcNb){T|?xkOboA&)?{AemgS_i$ID4RppXjDWupK znVA(*#~>z1QFJ%@)7s?tI0){CKUsvKs22sVOhRL$>iF-eS&HZ4!<3!MCW=i*7PWbW zLOqSgmSPfm3h;s_1{%2df12oQfE0@BOqJtkRhP?X73Dfe1t}(wbjNHF{#g;WJSVXh z#;(QjPI{LOLLw#^q&Qqs!+!V?>yk(@Qh&E z$|}k-W92Yo{~DvAmsxPWuqvMUXr918u(dgl|Rlfx0JwB(~@SeJj9WXUF!>hl*yb&T}&}U3hA0 zD&*%yW$}zldUJ~(obhhttv|e0DPM%$UO#nR*VIm}*YzZgJ{%C+^S6pNXwHqZ1j>QV z?9s8$f;QhiRDL*DioYhrc}(0p0W4?N=*MV23fCcN|PtQ6=vG^f?^S z)`cs1ER>nq20WHB{Y4=OzSD~P`kEQ&`zS78qiWL}S7?Ax`qLRbHli(9E^psiR9^nn zcunO?Npv*Zh4_hHP~7wJxtpNZ6{*>F?;0Zzn@ET^eoAhAC3c|4g3vCgXR_9I?L_nL zty!dp+-dixE6`OjHl}jRTAiN}tV0#$6%`Yk<4V{jj3$jvF~o9Kw*LOl0Rhk`50`Z| zPGmZ8?dND87+E|%sF{86j~}FjP4!?@P#2#0{6VxqUVh|)lL)M5b6oWZOnKhdN=g=X zSwLle6Kf^8*+94Lr0~dCn;W3lFkbYR&ik)oJElf3?knZ5zg@63Ih8OKpPH+zfVgtrr`H<7S>kr|wvsK#2O*fG7W-|{wZ*tEyUU)wEki$iLL~aLo&(`?)*6;24l8Iu| zEDDfxsIw8u_sqtoyr4idUxfeN;mAZQ!@zU)?_*gbK9-cI1Y#smNgGK~tybIIAL6=p zyjH`pvv@nem{j$cg7pN!A(;)KIx2G8!&|mDeJ6r1)5R2e5WaQ z-&8*}{at@2$NCP+_Nz?Gz7mc%8%9;>l#I{|v`uoT1_2tbmB%zXDPe6yJg&M=>F=IF zCeGI25wV!EYIJM@aI}~o0sENAc)mE;rJ>fXsJOUCV^2|0u@RkURpuZFJzZA8kB^V@ zi@l$c_ZrMPqAtk8!tTaDNRP?7tG+s({mJt1cz&9X?ydN>sp_8+!)ql>Gk4bkAmi%1 zk~L0OlWZ>7n;7bv=-=j8r!I>d1 z77hyueb-f)hmY9lwkdTUi!X#-etlXdTGPOx%|>f!Flpk{qyb#xp6r4J_C6dW%x0q> zy^}6jKt}^0dGrsxn$a+-Uu_I3LtTK!%b=*niMqoiw_t%54WLyrP8DH718Cz?aeA*+ zs44Ln&_hW0ex)v^kuVqE(%1oU9hzYS zC&$|x$KDm(cf>o{h|1nS{8~qLoZdLQeTAysNF;8P(|(ZZn#%Mdqh8Q40tn>~=r8}e zw;vbJg9g1Oc}+%0dTg6_N74RSEJ5Q)uU3u#UyVe zwsUZ$FY%=|XvT9rXb&CyLA*`liG+)>j%wO%-wf9H@9eEY)W+vp3jU~~@(v5;usRB+ zovTntHXukMKM$m<<0swJZSX|rZZCt*G}GeO=}Pw|rLtLBE)mENzgJo@U#Wj_M1jYb zi1@MhRozm^2|2$Q;&+p5POXrpzFsd4EY%>c%&ImHGzvf`%Cv~H2(`U5$-2Q@nFQCN zUuKjpjt@8c+O!rSWXOfTFEP7+m0nDb=No%L)bK|{_t{X_M}+v)gs7WqTpV$MQFnjX zZ!sEJcE3R-;9_O>Z_I9cmK49`*v(*luqti%&vz;JS6y;vvo}5B z6h^u4d8FNRnF!TxEDOpeOG{0|Yy8*hDz;3cYZ4cCtUCR_u-2~(xQ47}e7)q0A+zn0y7 zqWFDhtIN)L^1Lp3z5!|Z8$;q;`CRCn!dL=bjbSEQ*St?*hrgQPw;%{--Npz^fgBL$|OESisL$< zO*fsM8L-br&-nipz-xiwN@dMB^+{W|MaLaEJ?bu8y`Dg3Rj-kp*fFoP`xZdhK^_rt zLzpr_Ahdbmr1hk@mE34f_18dkBo68q{;u6WDQJ>wr06iYk`$x5Pbv8N@ z(;`5ZgPjgN`$=Nwg@@k{GWwz$ApU-rwqOOLU2jO@b^RpKm%44cAYP}CE z+*%4_o!CO4DzeCnEolz+T&CS+mG}=bM)x*OqC@AQSNWESA0~1@@iei((lAN5I zm@1nlUzeSk+SeW)vE_8^|I`@W93hG2k5whu>Ac@~+#Jq!K`*EKW8Roc2RM|Fyl8$J zpjYUSPiLZ&`T+#e{O+9(lHeCEj}LLt;~j8~AFa)hVvipEZYd>_JWbJ(C>pTHO3Yxp zQ=DgHIojN>;pD-dZxlMlIq#qq%_{_JDkD_b1vmDsP2=J+SK|2!0P@e67q*S%}So=?-H`K= zplS4j{Hd%3D8cP%hU)W4Ywzfa`W0q=&o&y>rI2%wj;m(tsjd|xzl%+dj%Pi(8ZUN~ zsofj)`7=k_Zm##L7HHkQQJPW=Xd8~+!#g-XY*aD{G+tA( znI&OPklCgR(Z07ClAACFlXLl{f1$u~i|WomsN{=yJqDeEb2f()zieSPW%Q@733W@| zpPAJOb6E}x@66l`)P!)mO@YS^z%8n{)Z|-|ZD5Lf(~hZ4;D&=KHWNk;xG1P$4Tp?9 zRo?KwxWw9-59+RbfT zn`^K#wWYrMd-*nzcDGMScuW&{QqHJ5+}0?I)KIiyXXR}NuhhLlPp43> z%Tn#@II2sDK?wJW_4tl5-^1gTZc@j)x$_vI`x3XYEI@05S1{<|%nzG$M$6#{~FJ#FoG-IyAV@aihaW!Lw0ca)VebH`|| zU*|l|Jq3pgvkW3+>CvaKzfcfs{eaB(q>bXp+(}VkIm`^&{VJRhFko{$NL#Mh{wt>X zzL+F+a7Hx|FpZa}3oGR)iVXsF@NogUCDU@emc|?0Ml*e+RD(qN@!Eo3!uBK@F^iuK}@>FU6QE60!#f&H3)wy`?cUW_8M6%(`eUxBFo1$BIBOF`CP{;Qg5+*blg|oTFa-N@h z-B&&Sea`LG)x)F-)RtU1%r6n;PFk#WZ)qYHDz%nUpDk(1LEXur|7_48HY@Pwda<(J zP!@L_*f+Qyu9F|HlYh-!v#_)C11}%@AeOSf7%FH1G(V#GpMqy= zf#(MAp1_{K$!EP94eFn1k{MrovTEdt^BT%b6HsMo4dMj$g_DNQyhX{rGAMFZrM>s zU{T~qb$Fgf=Di{qjxVf&VCGu3&4(wXdwdr}CFz}BvGLflKRetIC0<{ILazzt4*BQd z2G!#5>-AXy{SU}$_Wd)1M9=AnzrNMp1$lnKWm3QW0fw(9xi$m8jD>z(6pwr2pb;fM z?Vu=m{4R1Wf~vwQ_EA-tU}l0~%Z?j#&@}|Led;NaphLPrecE3@Zzkx7Tw9Y$&}sM_ zJE7*Ld(cgo? zPj}3nZiD&puDFS#xMx3#8X6j4lo5?rVq@>&8~2|-f39Dr38$utKO9kPru&Jr3wF#L z2a$Kbnae0P+n1DgKjjK|A~#m@3#2>&;-mL|ZOyej&-+g-d95Mr@TfLOSUnYQ z?q6_6torG4&n;3%$GX(-xw&*14YS!R`W=mz^-;%)RPQDK2%ELzNrZ5E=mp(d)^+mq zmg3;Jou}=NNX-lpXVT@X`kEg_xLZY?UohWM2KREj0Ip4@UjOp5`g$%ND#n`O^e9FQ`v(@7c2pHd3ITSJ<#pGv$VEV1p2FM|=^o+V>c0t%Fve zo5Wk6UseLv^=CG*g~vFvvU(V52vNjMWhG5kWUK~dE_%}_ofrMuEnUE-)dO)%8;gEl zWkf3>^7Ll2y|M9^{tBcqZS?zq-G@WPB_)zgk|~$Ub}3&lyWKrzUuuvP(h|}!)_40f z?ISBt8go4N7jsK{oGoA)1Y;I0&!&OaIDugiB+;f9LVJ*K2M- z>{g`P|Lsb{2NYACNEIH=&g8FpVA5-lA;V}TgEiJ9Q1=0*HBwULA z!Ck*L0A6TR!&K=?%2lN<&dk7Z<_>7OCVZdw2@1>BM_7atNQm?=c=Cxm-FidhLaKQF zy}d#JdO-_&$8C3lMq_qn6}^5js$aP9t5o+ z{+O+#!}O<6)8tbu+D)awJujn1h*)##J?J^gNr#i^+r z1a$lXR2xrvc7x`zaL2qzzM|ccJeE4$4$3(n}6x0l^AEkdmGYJ_d?G!qsBc3ptgHxhCI~ z!XI;IF#AZLF1z)~J(|U`jMNby)W}Hx(zt3TxqKRB6z9d3Mm5q!^n5AhKvqqK>b+(1 zy+DEE=XZ}>tn`^IrGcQ=|3(<6R~D=Oc$5^Y7`VB))hXTRdyWs+$tMaIqtm_9*AQpF zBn$E2Gh^MMERI}*GOuQe3>f}9t@^&}(=XJWLjmI>r|YCCn!x?8b#%B%w-HX+4-6|E zJ|VI=U6Se@?EIR^Uk~X4^8SA*4U2+Smisv(gf!}Zql{ zD-SgkMQ?RQ!!_~;2`_kJQm!SlYsBM;rNESimSeG$*^8)1*S^ch|88mjji)IPFJBS@ zI@_?IMZ<3j{dJOqk02dy?1hUk9wx~5k`=hz#j=T8c|RE9TK9zs(Y``?=6b4}=A`V$8&_>w2eGaR@{scViBMp6Ur z@unK~FNCg?u6KKEjqyQNd&D3Xf`#kda;btgtcRxN5WEPN%me#ZXU3sbTz2Nr+fEBv z)zI;h$M9A`zh>Fy{Ri^_n2g5KT5r0ujb0ra|K;%4&d#6Ifp;E`K4jrsjRO3E7^E@f zpik^9RkcUonuwGqkVz*tg-T``Ld8ZUCA{49cLNWNVzu^Ahog~BjWdbH>@ipYcfs;l z^07+>WLWcT+#_q^=T7d?2sY_u7Bk6;&}Vk-@5p>cQ_4wbsbtC{kE>FsqU(mklWY)Q zHa+N#&W(x*)AIPkSh%V09J0K)RpT~o8DjDROF$NHoCJ!&%&~VbQ;A(Id2kNs{(9|z zh)7XaF@c`bG>6Ky`hTzuK46?oGihXVQCHh_0QJs^jzZD)ZCg+A;ml7XeY-4ZDlDJd zEAFubAnTsXnP;DHN_V$%au<4@QCZ=mELI9=F$Z_>6x;$fS2W0$uC9Xfk;>}P3sX|= zYJN`;w}g(W@%#Mli$NAaL`Fvkv@=To-pbQrRVN=)R0g`*CT4HW&LX1UF(1NpC2NE6 z@ED09eJiBwR}PA6NPbRnt8JKw6oO`9%rVqJ;udvYV`fu>uzhcH6@=OtVDWhBB0uNt zR1SI3_1nqY+rBJo_O`QgC5-2nx|`@-C$|DRu(=fIy^7dZ2^80aZw&Knru=(Rh5~Xy1x2ga zhW4u!G(#NaE}Vy443xr{@~QWBh1AOBqSjF(J6j)TPNLi!S}zUxv`Q^IBe30rqbwd) z$Tj`wOLXDAa_MJzfJi=Pu|Xnj%+pjh4TH9na#hTNZ1ns3gTQBBSeH4%V&yLgKL1 ze1bW7y|SrG;y#3sWT#`{hZd7R<712pmHXHiFBn)_7`ec*vDI;4YJ2WO5WxWNlS4dz zUWb)Xf*AWG5*8@!|v$*da``>=MBJ5;hyLuvnq882-48nOli2@k? zAO|A8N_xng`IEt+O!5kkTC411mG|aIF`{6g#i%fD&U>qT@KY3jP&0l%0$4WR^9~_1U~KAZ6|#Mwu!Ijs$}iUB#lGJ6?OVgaFenrRhh9!Ia$fmZX<0OiPNL_ z98_nF`a&@IAaz&?Bo_LN6-cb4q6r@A6oa%1xGCslh*{OBq_H9%^P!pGLbk zpgCLcYiSc$1Qh?LalMr(@Kph1LUJPpXIb-R)MNrHxL5-cLNw}ZY$426N=j>X&bAaW zHDisdCtW_UmMb!v%$G&PR6`>)veW{;A7LZc z7Hc*nx6oVzD8I1+s2r-5JU{dRtV@&g>S`MEfLzBy;tj4rg48vp8D9L=-oJ(F+~+r? zDFsi>Tn=3P?)Fj3iN344j|X+gS$)#CIX-S|TgPyoA#=7Q?q3iO*Qrt-%a0fQJK7g` z6n>qxXAyUCK_+kTxh?NV&HM7qm(N*}Auiu&^N1m%%IY4-*e+)!F_om(=)9NSLxIq%g|tlsxdW0x zLD+Wr5sCGr&@$@T)}VNIOHsyksoQ`WpP38`0f5>|6aq?L5A|u(Gd(S zR9KOE$t7K6WQA&uK7~e90@9gS+P-^c;XKNjPE;s$Sv$>dU8O0qvxYOXOS5FHqYc$I z>OG+7-bb}09-90eRN>3)cFJU!t~MN86#8?a~g?CA8qa36uQ^Aq&

`;q|nNDGrBhFL*F(=S`_j`Rev1{EA`nb7wy5ZP=iadH3FP znl;LrYYW{?6y6jx!3xC_cFF)$2cR`zWX})6`#W{LRaG2C{ECPp#gf^EhX{f)Y3a1z z{Q-lhy_}H7H*sOKUinK(=47(p^m!KiJ6;-99?~NfVmYdzVR~K;z>j~9f9#wRhmG{Q zi;Zk0V;-#@q3RpdE@R$=<8K@ob^dSCMF=5=|ABu~c$%9hv`nRxp(xmk>L;{D$uC>)+yL zBk(*in6GZvXkm{S^}FR8w&(skd#PtO&Tf!|RfOjS$@(?lpn8qD{|6Yiy2DZAs@F~% zViom2c(gB>f16N6`~3gGeNUzhXQzrhqpw^Cm|uR!#mx1WT0KTIre5*y_ZR$|DBWwp zB%rnn@wOYEj<*vixW6n?U`Inm@*(I}<`7jlB_;wj$(;BF`t z>0_}*5!BF=S52}*&QV+0mH!X)Pr|V6AyxFZbD95Q`o3i52=UQt&*At#L4*>9fQ1*# yobWFCdWSyF$u#PiiGT6;y8zgaTZ9Q5QqK8cdoU-y&eH(u2lQC~QN;th(EkRSRY1=G literal 14401 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≧`t+?GxC$TFcEIa|F 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 JdSo5;zX0U&h>QRL diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index 3312818369c81410520da39dae72330410785493..c3374e9c1c56ed17c31aa85163836030cb05f47c 100644 GIT binary patch literal 114704 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 tXw<3H1aP?Rjs?yU?7Snhe*)Nv#Ek#| literal 111737 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℞DmW)@poa4TgFm|e!$*z4~| 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 a9*x0Zm!&wR^D*o8gwk`>XXSFHA^#6E;{nD1 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index acf3a09274e5559c4566ba7f84fcb07e6157f281..710c8ee5e1abe5f8e50b3f597134df0509f8a2d1 100644 GIT binary patch delta 22776 zcmb4qXH*nH)9#RwtcZYQP(jj?Q8I{#f`Eb`h%5+*=ry|XjjJ=N7!Pd!!b+lD_ph#y4{vXc@608szw4>JG|GJER0 zc2PEWHg&ReaIv(v0|1ZY?D%H8wCQkuQBb`-7lF(6=#PX^O~r{jx^0f`jrozlGJ_Y(|z7PRNK=9Zp6xFaE<4{OsK1-42s%th?@1 z^-7S~hBl`44ud6Cz6T>JX+X??Au;%U!)w^sA>(qhhtFCW;zf*H!;@l5Slgx@+e4!B z>7d`!qrhzkmf=A-!@ls@eHx3h!>yND@_@&j(cLdV(K^hdNrR)~fk zcSXU%?9jUe>zQ8_${*6tKEL=A!QdliI~y%o$|`KxB{V|$<8CW^Vti5z>D!;TRp`^B z?qyq&x+p}n%Z~@kW(Hi8P-ow5vIt2IM{Pur*K(WN6^GVx+#2ilHJ)sP4wT zPRV7q0*C7~N#Celm(LguDtSKo7|V0iP>~kp`&a{&g$;-_jvlsP4)-5_6Y$Nuff+54 zpscgcr>S|+Dd6xftIl)ZmgBCO;s=!PbgEDDfcH(BsFJ&5o!uKRvjy)*z}nr1$uZK> z%`N*Ex`TmYIxNQfiOJ7s%=+_M=ScG&`5~>Wy+Dqx*L%e`2z3Yy)X?u@*we{mNt$nz zPTF-1la~gbdp}%8_bc(2%YgN2iB;=PMdFFPHVy7)&x&p(eWr62Z--gWA83~YOFJvB zZ;VH}m6FpZrdYY3NvRysigz^8d^T|COt19eU_-$-&iWH2UD{NfmKdJu*WCW61ia;= zV*yVEuTN(4r#&%@9p)0amVf;oG3+On3-*hMYhL)B&%kX*ld}*354gefJ1(1vQw<_* zwt;J}u9?d6h|K)~D$7aCM$OA6V)NAA3osP*eLwi}>8@|oVkS?I$BqdZm4Eu6DT#?@ zqg+I^p^6Rnpn!v(eA9cGha^Tqkwq5V@Xc

}UOeblt7$EW)?kJg-je*)=w;jx4J0 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 delta 21131 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 diff --git a/icons/obj/machines/nanite_chamber.dmi b/icons/obj/machines/nanite_chamber.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f42dcd48485b4f5fa0848d7ce2b733ac12a82e7f GIT binary patch literal 14572 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 F{}(x+=llQw literal 0 HcmV?d00001 diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi index a150880d39531501461e19116b601aad7b4a1730..b756c77e20ff2746bad7ea74b5535f31ae64eabb 100644 GIT binary patch literal 28393 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≥Bdlc3=MxrF(@!#ct~DUT9+;b>%t6 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 r=this.tryEntries[a],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var o=b.call(r,"catchLoc"),s=b.call(r,"finallyLoc");if(o&&s){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&b.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),f(n),O}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var a=n.completion;if("throw"===a.type){var r=a.arg;f(n)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:h(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=g),O}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(t,e,n){t(129),e.exports=t(24).RegExp.escape},{129:129,24:24}],4:[function(t,e,n){e.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},{}],5:[function(t,e,n){var a=t(19);e.exports=function(t,e){if("number"!=typeof t&&"Number"!=a(t))throw TypeError(e);return+t}},{19:19}],6:[function(t,e,n){var a=t(127)("unscopables"),r=Array.prototype;void 0==r[a]&&t(43)(r,a,{}),e.exports=function(t){r[a][t]=!0}},{127:127,43:43}],7:[function(t,e,n){e.exports=function(t,e,n,a){if(!(t instanceof e)||void 0!==a&&a in t)throw TypeError(n+": incorrect invocation!");return t}},{}],8:[function(t,e,n){var a=t(52);e.exports=function(t){if(!a(t))throw TypeError(t+" is not an object!");return t}},{52:52}],9:[function(t,e,n){"use strict";var a=t(117),r=t(112),i=t(116);e.exports=[].copyWithin||function(t,e){var n=a(this),o=i(n.length),s=r(t,o),u=r(e,o),p=arguments.length>2?arguments[2]:void 0,c=Math.min((void 0===p?o:r(p,o))-u,o-s),l=1;for(s>u&&u+c>s&&(l=-1,u+=c-1,s+=c-1);c-- >0;)u in n?n[s]=n[u]:delete n[s],s+=l,u+=l;return n}},{112:112,116:116,117:117}],10:[function(t,e,n){"use strict";var a=t(117),r=t(112),i=t(116);e.exports=function(t){for(var e=a(this),n=i(e.length),o=arguments.length,s=r(o>1?arguments[1]:void 0,n),u=o>2?arguments[2]:void 0,p=void 0===u?n:r(u,n);p>s;)e[s++]=t;return e}},{112:112,116:116,117:117}],11:[function(t,e,n){var a=t(40);e.exports=function(t,e){var n=[];return a(t,!1,n.push,n,e),n}},{40:40}],12:[function(t,e,n){var a=t(115),r=t(116),i=t(112);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||0;return!t&&-1}}},{112:112,115:115,116:116}],13:[function(t,e,n){var a=t(26),r=t(48),i=t(117),o=t(116),s=t(16);e.exports=function(t,e){var n=1==t,u=2==t,p=3==t,c=4==t,l=6==t,f=5==t||l,d=e||s;return function(e,s,h){for(var m,g,v=i(e),b=r(v),y=a(s,h,3),x=o(b.length),_=0,w=n?d(e,x):u?d(e,0):void 0;x>_;_++)if((f||_ in b)&&(m=b[_],g=y(m,_,v),t))if(n)w[_]=g;else if(g)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(c)return!1;return l?-1:p||c?c:w}}},{116:116,117:117,16:16,26:26,48:48}],14:[function(t,e,n){var a=t(4),r=t(117),i=t(48),o=t(116);e.exports=function(t,e,n,s,u){a(e);var p=r(t),c=i(p),l=o(p.length),f=u?l-1:0,d=u?-1:1;if(2>n)for(;;){if(f in c){s=c[f],f+=d;break}if(f+=d,u?0>f:f>=l)throw TypeError("Reduce of empty array with no initial value")}for(;u?f>=0:l>f;f+=d)f in c&&(s=e(s,c[f],f,p));return s}},{116:116,117:117,4:4,48:48}],15:[function(t,e,n){var a=t(52),r=t(50),i=t(127)("species");e.exports=function(t){var e;return r(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!r(e.prototype)||(e=void 0),a(e)&&(e=e[i],null===e&&(e=void 0))),void 0===e?Array:e}},{127:127,50:50,52:52}],16:[function(t,e,n){var a=t(15);e.exports=function(t,e){return new(a(t))(e)}},{15:15}],17:[function(t,e,n){"use strict";var a=t(4),r=t(52),i=t(47),o=[].slice,s={},u=function(t,e,n){if(!(e in s)){for(var a=[],r=0;e>r;r++)a[r]="a["+r+"]";s[e]=Function("F,a","return new F("+a.join(",")+")")}return s[e](t,n)};e.exports=Function.bind||function(t){var e=a(this),n=o.call(arguments,1),s=function(){var a=n.concat(o.call(arguments));return this instanceof s?u(e,a.length,a):i(e,a,t)};return r(e.prototype)&&(s.prototype=e.prototype),s}},{4:4,47:47,52:52}],18:[function(t,e,n){var a=t(19),r=t(127)("toStringTag"),i="Arguments"==a(function(){return arguments}()),o=function(t,e){try{return t[e]}catch(n){}};e.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=o(e=Object(t),r))?n:i?a(e):"Object"==(s=a(e))&&"function"==typeof e.callee?"Arguments":s}},{127:127,19:19}],19:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],20:[function(t,e,n){"use strict";var a=t(72).f,r=t(71),i=t(91),o=t(26),s=t(7),u=t(40),p=t(56),c=t(58),l=t(98),f=t(30),d=t(66).fastKey,h=t(124),m=f?"_s":"size",g=function(t,e){var n,a=d(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,p){var c=t(function(t,a){s(t,c,e,"_i"),t._t=e,t._i=r(null),t._f=void 0,t._l=void 0,t[m]=0,void 0!=a&&u(a,n,t[p],t)});return i(c.prototype,{clear:function(){for(var t=h(this,e),n=t._i,a=t._f;a;a=a.n)a.r=!0,a.p&&(a.p=a.p.n=void 0),delete n[a.i];t._f=t._l=void 0,t[m]=0},"delete":function(t){var n=h(this,e),a=g(n,t);if(a){var r=a.n,i=a.p;delete n._i[a.i],a.r=!0,i&&(i.n=r),r&&(r.p=i),n._f==a&&(n._f=r),n._l==a&&(n._l=i),n[m]--}return!!a},forEach:function(t){h(this,e);for(var n,a=o(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(a(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!g(h(this,e),t)}}),f&&a(c.prototype,"size",{get:function(){return h(this,e)[m]}}),c},def:function(t,e,n){var a,r,i=g(t,e);return i?i.v=n:(t._l=i={i:r=d(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[m]++,"F"!==r&&(t._i[r]=i)),t},getEntry:g,setStrong:function(t,e,n){p(t,e,function(t,n){this._t=h(t,e),this._k=n,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?c(0,n.k):"values"==e?c(0,n.v):c(0,[n.k,n.v]):(t._t=void 0,c(1))},n?"entries":"values",!n,!0),l(e)}}},{124:124,26:26,30:30,40:40,56:56,58:58,66:66,7:7,71:71,72:72,91:91,98:98}],21:[function(t,e,n){var a=t(18),r=t(11);e.exports=function(t){return function(){if(a(this)!=t)throw TypeError(t+"#toJSON isn't generic");return r(this)}}},{11:11,18:18}],22:[function(t,e,n){"use strict";var a=t(91),r=t(66).getWeak,i=t(8),o=t(52),s=t(7),u=t(40),p=t(13),c=t(42),l=t(124),f=p(5),d=p(6),h=0,m=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},v=function(t,e){return f(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=v(this,t);return e?e[1]:void 0},has:function(t){return!!v(this,t)},set:function(t,e){var n=v(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=d(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,i){var p=t(function(t,a){s(t,p,e,"_i"),t._t=e,t._i=h++,t._l=void 0,void 0!=a&&u(a,n,t[i],t)});return a(p.prototype,{"delete":function(t){if(!o(t))return!1;var n=r(t);return n===!0?m(l(this,e))["delete"](t):n&&c(n,this._i)&&delete n[this._i]},has:function(t){if(!o(t))return!1;var n=r(t);return n===!0?m(l(this,e)).has(t):n&&c(n,this._i)}}),p},def:function(t,e,n){var a=r(i(e),!0);return a===!0?m(t).set(e,n):a[t._i]=n,t},ufstore:m}},{124:124,13:13,40:40,42:42,52:52,66:66,7:7,8:8,91:91}],23:[function(t,e,n){"use strict";var a=t(41),r=t(34),i=t(92),o=t(91),s=t(66),u=t(40),p=t(7),c=t(52),l=t(36),f=t(57),d=t(99),h=t(46);e.exports=function(t,e,n,m,g,v){var b=a[t],y=b,x=g?"set":"add",_=y&&y.prototype,w={},k=function(t){var e=_[t];i(_,t,"delete"==t?function(t){return v&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return v&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return v&&!c(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 y&&(v||_.forEach&&!l(function(){(new y).entries().next()}))){var S=new y,E=S[x](v?{}:-0,1)!=S,P=l(function(){S.has(1)}),C=f(function(t){new y(t)}),A=!v&&l(function(){for(var t=new y,e=5;e--;)t[x](e,e);return!t.has(-0)});C||(y=e(function(e,n){p(e,y,t);var a=h(new b,e,y);return void 0!=n&&u(n,g,a[x],a),a}),y.prototype=_,_.constructor=y),(P||A)&&(k("delete"),k("has"),g&&k("get")),(A||E)&&k(x),v&&_.clear&&delete _.clear}else y=m.getConstructor(e,t,g,x),o(y.prototype,n),s.NEED=!0;return d(y,t),w[t]=y,r(r.G+r.W+r.F*(y!=b),w),v||m.setStrong(y,t,g),y}},{34:34,36:36,40:40,41:41,46:46,52:52,57:57,66:66,7:7,91:91,92:92,99:99}],24:[function(t,e,n){var a=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=a)},{}],25:[function(t,e,n){"use strict";var a=t(72),r=t(90);e.exports=function(t,e,n){e in t?a.f(t,e,r(0,n)):t[e]=n}},{72:72,90:90}],26:[function(t,e,n){var a=t(4);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)}}},{4:4}],27:[function(t,e,n){"use strict";var a=t(36),r=Date.prototype.getTime,i=Date.prototype.toISOString,o=function(t){return t>9?t:"0"+t};e.exports=a(function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-5e13-1))})||!a(function(){i.call(new Date(NaN))})?function(){if(!isFinite(r.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),a=0>e?"-":e>9999?"+":"";return a+("00000"+Math.abs(e)).slice(a?-6:-4)+"-"+o(t.getUTCMonth()+1)+"-"+o(t.getUTCDate())+"T"+o(t.getUTCHours())+":"+o(t.getUTCMinutes())+":"+o(t.getUTCSeconds())+"."+(n>99?n:"0"+o(n))+"Z"}:i},{36:36}],28:[function(t,e,n){"use strict";var a=t(8),r=t(118),i="number";e.exports=function(t){if("string"!==t&&t!==i&&"default"!==t)throw TypeError("Incorrect hint");return r(a(this),t!=i)}},{118:118,8:8}],29:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],30:[function(t,e,n){e.exports=!t(36)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{36:36}],31:[function(t,e,n){var a=t(52),r=t(41).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{41:41,52:52}],32:[function(t,e,n){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],33:[function(t,e,n){var a=t(81),r=t(78),i=t(82);e.exports=function(t){var e=a(t),n=r.f;if(n)for(var o,s=n(t),u=i.f,p=0;s.length>p;)u.call(t,o=s[p++])&&e.push(o);return e}},{78:78,81:81,82:82}],34:[function(t,e,n){var a=t(41),r=t(24),i=t(43),o=t(92),s=t(26),u="prototype",p=function(t,e,n){var c,l,f,d,h=t&p.F,m=t&p.G,g=t&p.S,v=t&p.P,b=t&p.B,y=m?a:g?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&&void 0!==y[c],f=(l?y:n)[c],d=b&&l?s(f,a):v&&"function"==typeof f?s(Function.call,f):f,y&&o(y,c,f,t&p.U),x[c]!=f&&i(x,c,d),v&&_[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,p.U=64,p.R=128,e.exports=p},{24:24,26:26,41:41,43:43,92:92}],35:[function(t,e,n){var a=t(127)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{127:127}],36:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],37:[function(t,e,n){"use strict";var a=t(43),r=t(92),i=t(36),o=t(29),s=t(127);e.exports=function(t,e,n){var u=s(t),p=n(o,u,""[t]),c=p[0],l=p[1];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,c),a(RegExp.prototype,u,2==e?function(t,e){return l.call(t,this,e)}:function(t){return l.call(t,this)}))}},{127:127,29:29,36:36,43:43,92:92}],38:[function(t,e,n){"use strict";var a=t(8);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}},{8:8}],39:[function(t,e,n){"use strict";function a(t,e,n,p,c,l,f,d){for(var h,m,g=c,v=0,b=f?s(f,d,3):!1;p>v;){if(v in n){if(h=b?b(n[v],v,e):n[v],m=!1,i(h)&&(m=h[u],m=void 0!==m?!!m:r(h)),m&&l>0)g=a(t,e,h,o(h.length),g,l-1)-1;else{if(g>=9007199254740991)throw TypeError();t[g]=h}g++}v++}return g}var r=t(50),i=t(52),o=t(116),s=t(26),u=t(127)("isConcatSpreadable");e.exports=a},{116:116,127:127,26:26,50:50,52:52}],40:[function(t,e,n){var a=t(26),r=t(54),i=t(49),o=t(8),s=t(116),u=t(128),p={},c={},n=e.exports=function(t,e,n,l,f){var d,h,m,g,v=f?function(){return t}:u(t),b=a(n,l,e?2:1),y=0;if("function"!=typeof v)throw TypeError(t+" is not iterable!");if(i(v)){for(d=s(t.length);d>y;y++)if(g=e?b(o(h=t[y])[0],h[1]):b(t[y]),g===p||g===c)return g}else for(m=v.call(t);!(h=m.next()).done;)if(g=r(m,b,h.value,e),g===p||g===c)return g};n.BREAK=p,n.RETURN=c},{116:116,128:128,26:26,49:49,54:54,8:8}],41:[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)},{}],42:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],43:[function(t,e,n){var a=t(72),r=t(90);e.exports=t(30)?function(t,e,n){return a.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{30:30,72:72,90:90}],44:[function(t,e,n){var a=t(41).document;e.exports=a&&a.documentElement},{41:41}],45:[function(t,e,n){e.exports=!t(30)&&!t(36)(function(){return 7!=Object.defineProperty(t(31)("div"),"a",{get:function(){return 7}}).a})},{30:30,31:31,36:36}],46:[function(t,e,n){var a=t(52),r=t(97).set;e.exports=function(t,e,n){var i,o=e.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&a(i)&&r&&r(t,i),t}},{52:52,97:97}],47:[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)}},{}],48:[function(t,e,n){var a=t(19);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{19:19}],49:[function(t,e,n){var a=t(59),r=t(127)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{127:127,59:59}],50:[function(t,e,n){var a=t(19);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{19:19}],51:[function(t,e,n){var a=t(52),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{52:52}],52:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],53:[function(t,e,n){var a=t(52),r=t(19),i=t(127)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{127:127,19:19,52:52}],54:[function(t,e,n){var a=t(8);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}}},{8:8}],55:[function(t,e,n){"use strict";var a=t(71),r=t(90),i=t(99),o={};t(43)(o,t(127)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a(o,{next:r(1,n)}),i(t,e+" Iterator")}},{127:127,43:43,71:71,90:90,99:99}],56:[function(t,e,n){"use strict";var a=t(60),r=t(34),i=t(92),o=t(43),s=t(59),u=t(55),p=t(99),c=t(79),l=t(127)("iterator"),f=!([].keys&&"next"in[].keys()),d="@@iterator",h="keys",m="values",g=function(){return this};e.exports=function(t,e,n,v,b,y,x){u(n,e,v);var _,w,k,S=function(t){if(!f&&t in A)return A[t];switch(t){case h:return function(){return new n(this,t)};case m:return function(){return new n(this,t)}}return function(){return new n(this,t)}},E=e+" Iterator",P=b==m,C=!1,A=t.prototype,O=A[l]||A[d]||b&&A[b],T=O||S(b),R=b?P?S("entries"):T:void 0,M="Array"==e?A.entries||O:O;if(M&&(k=c(M.call(new t)),k!==Object.prototype&&k.next&&(p(k,E,!0),a||"function"==typeof k[l]||o(k,l,g))),P&&O&&O.name!==m&&(C=!0,T=function(){return O.call(this)}),a&&!x||!f&&!C&&A[l]||o(A,l,T),s[e]=T,s[E]=g,b)if(_={values:P?T:S(m),keys:y?T:S(h),entries:R},x)for(w in _)w in A||i(A,w,_[w]);else r(r.P+r.F*(f||C),e,_);return _}},{127:127,34:34,43:43,55:55,59:59,60:60,79:79,92:92,99:99}],57:[function(t,e,n){var a=t(127)("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}},{127:127}],58:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],59:[function(t,e,n){e.exports={}},{}],60:[function(t,e,n){e.exports=!1},{}],61:[function(t,e,n){var a=Math.expm1;e.exports=!a||a(10)>22025.465794806718||a(10)<22025.465794806718||-2e-17!=a(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}:a},{}],62:[function(t,e,n){var a=t(65),r=Math.pow,i=r(2,-52),o=r(2,-23),s=r(2,127)*(2-o),u=r(2,-126),p=function(t){return t+1/i-1/i};e.exports=Math.fround||function(t){var e,n,r=Math.abs(t),c=a(t);return u>r?c*p(r/u/o)*u*o:(e=(1+o/i)*r,n=e-(e-r),n>s||n!=n?c*(1/0):c*n)}},{65:65}],63:[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)}},{}],64:[function(t,e,n){e.exports=Math.scale||function(t,e,n,a,r){return 0===arguments.length||t!=t||e!=e||n!=n||a!=a||r!=r?NaN:t===1/0||t===-(1/0)?t:(t-e)*(r-a)/(n-e)+a}},{}],65:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],66:[function(t,e,n){var a=t(122)("meta"),r=t(52),i=t(42),o=t(72).f,s=0,u=Object.isExtensible||function(){return!0},p=!t(36)(function(){return u(Object.preventExtensions({}))}),c=function(t){o(t,a,{value:{i:"O"+ ++s,w:{}}})},l=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,a)){if(!u(t))return"F";if(!e)return"E";c(t)}return t[a].i},f=function(t,e){if(!i(t,a)){if(!u(t))return!0;if(!e)return!1;c(t)}return t[a].w},d=function(t){return p&&h.NEED&&u(t)&&!i(t,a)&&c(t),t},h=e.exports={KEY:a,NEED:!1,fastKey:l,getWeak:f,onFreeze:d}},{122:122,36:36,42:42,52:52,72:72}],67:[function(t,e,n){var a=t(159),r=t(34),i=t(101)("metadata"),o=i.store||(i.store=new(t(265))),s=function(t,e,n){var r=o.get(t);if(!r){if(!n)return;o.set(t,r=new a)}var i=r.get(e);if(!i){if(!n)return;r.set(e,i=new a)}return i},u=function(t,e,n){var a=s(e,n,!1);return void 0===a?!1:a.has(t)},p=function(t,e,n){var a=s(e,n,!1);return void 0===a?void 0:a.get(t)},c=function(t,e,n,a){s(n,a,!0).set(t,e)},l=function(t,e){var n=s(t,e,!1),a=[];return n&&n.forEach(function(t,e){a.push(e)}),a},f=function(t){return void 0===t||"symbol"==typeof t?t:t+""},d=function(t){r(r.S,"Reflect",t)};e.exports={store:o,map:s,has:u,get:p,set:c,keys:l,key:f,exp:d}},{101:101,159:159,265:265,34:34}],68:[function(t,e,n){var a=t(41),r=t(111).set,i=a.MutationObserver||a.WebKitMutationObserver,o=a.process,s=a.Promise,u="process"==t(19)(o);e.exports=function(){var t,e,n,p=function(){var a,r;for(u&&(a=o.domain)&&a.exit();t;){r=t.fn,t=t.next;try{r()}catch(i){throw t?n():e=void 0,i}}e=void 0,a&&a.enter()};if(u)n=function(){o.nextTick(p)};else if(!i||a.navigator&&a.navigator.standalone)if(s&&s.resolve){var c=s.resolve(void 0);n=function(){c.then(p)}}else n=function(){r.call(a,p)};else{var l=!0,f=document.createTextNode("");new i(p).observe(f,{characterData:!0}),n=function(){f.data=l=!l}}return function(a){var r={fn:a,next:void 0};e&&(e.next=r),t||(t=r,n()),e=r}}},{111:111,19:19,41:41}],69:[function(t,e,n){"use strict";function a(t){var e,n;this.promise=new t(function(t,a){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=a}),this.resolve=r(e),this.reject=r(n)}var r=t(4);e.exports.f=function(t){return new a(t)}},{4:4}],70:[function(t,e,n){"use strict";var a=t(81),r=t(78),i=t(82),o=t(117),s=t(48),u=Object.assign;e.exports=!u||t(36)(function(){var t={},e={},n=Symbol(),a="abcdefghijklmnopqrst";return t[n]=7,a.split("").forEach(function(t){e[t]=t}),7!=u({},t)[n]||Object.keys(u({},e)).join("")!=a})?function(t,e){for(var n=o(t),u=arguments.length,p=1,c=r.f,l=i.f;u>p;)for(var f,d=s(arguments[p++]),h=c?a(d).concat(c(d)):a(d),m=h.length,g=0;m>g;)l.call(d,f=h[g++])&&(n[f]=d[f]);return n}:u},{117:117,36:36,48:48,78:78,81:81,82:82}],71:[function(t,e,n){var a=t(8),r=t(73),i=t(32),o=t(100)("IE_PROTO"),s=function(){},u="prototype",p=function(){var e,n=t(31)("iframe"),a=i.length,r="<",o=">";for(n.style.display="none",t(44).appendChild(n),n.src="javascript:",e=n.contentWindow.document,e.open(),e.write(r+"script"+o+"document.F=Object"+r+"/script"+o),e.close(),p=e.F;a--;)delete p[u][i[a]];return p()};e.exports=Object.create||function(t,e){var n;return null!==t?(s[u]=a(t),n=new s,s[u]=null,n[o]=t):n=p(),void 0===e?n:r(n,e)}},{100:100,31:31,32:32,44:44,73:73,8:8}],72:[function(t,e,n){var a=t(8),r=t(45),i=t(118),o=Object.defineProperty;n.f=t(30)?Object.defineProperty:function(t,e,n){if(a(t),e=i(e,!0),a(n),r)try{return o(t,e,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},{118:118,30:30,45:45,8:8}],73:[function(t,e,n){var a=t(72),r=t(8),i=t(81);e.exports=t(30)?Object.defineProperties:function(t,e){r(t);for(var n,o=i(e),s=o.length,u=0;s>u;)a.f(t,n=o[u++],e[n]);return t}},{30:30,72:72,8:8,81:81}],74:[function(t,e,n){"use strict";e.exports=t(60)||!t(36)(function(){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete t(41)[e]})},{36:36,41:41,60:60}],75:[function(t,e,n){var a=t(82),r=t(90),i=t(115),o=t(118),s=t(42),u=t(45),p=Object.getOwnPropertyDescriptor;n.f=t(30)?p:function(t,e){if(t=i(t),e=o(e,!0),u)try{return p(t,e)}catch(n){}return s(t,e)?r(!a.f.call(t,e),t[e]):void 0}},{115:115,118:118,30:30,42:42,45:45,82:82,90:90}],76:[function(t,e,n){var a=t(115),r=t(77).f,i={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.f=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{115:115,77:77}],77:[function(t,e,n){var a=t(80),r=t(32).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return a(t,r)}},{32:32,80:80}],78:[function(t,e,n){n.f=Object.getOwnPropertySymbols},{}],79:[function(t,e,n){var a=t(42),r=t(117),i=t(100)("IE_PROTO"),o=Object.prototype;e.exports=Object.getPrototypeOf||function(t){return t=r(t),a(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?o:null}},{100:100,117:117,42:42}],80:[function(t,e,n){var a=t(42),r=t(115),i=t(12)(!1),o=t(100)("IE_PROTO");e.exports=function(t,e){var n,s=r(t),u=0,p=[];for(n in s)n!=o&&a(s,n)&&p.push(n);for(;e.length>u;)a(s,n=e[u++])&&(~i(p,n)||p.push(n));return p}},{100:100,115:115,12:12,42:42}],81:[function(t,e,n){var a=t(80),r=t(32);e.exports=Object.keys||function(t){return a(t,r)}},{32:32,80:80}],82:[function(t,e,n){n.f={}.propertyIsEnumerable},{}],83:[function(t,e,n){var a=t(34),r=t(24),i=t(36);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)}},{24:24,34:34,36:36}],84:[function(t,e,n){var a=t(81),r=t(115),i=t(82).f;e.exports=function(t){return function(e){for(var n,o=r(e),s=a(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}}},{115:115,81:81,82:82}],85:[function(t,e,n){var a=t(77),r=t(78),i=t(8),o=t(41).Reflect;e.exports=o&&o.ownKeys||function(t){var e=a.f(i(t)),n=r.f;return n?e.concat(n(t)):e}},{41:41,77:77,78:78,8:8}],86:[function(t,e,n){var a=t(41).parseFloat,r=t(109).trim;e.exports=1/a(t(110)+"-0")!==-(1/0)?function(t){var e=r(t+"",3),n=a(e);return 0===n&&"-"==e.charAt(0)?-0:n}:a},{109:109,110:110,41:41}],87:[function(t,e,n){var a=t(41).parseInt,r=t(109).trim,i=t(110),o=/^[-+]?0[xX]/;e.exports=8!==a(i+"08")||22!==a(i+"0x16")?function(t,e){var n=r(t+"",3);return a(n,e>>>0||(o.test(n)?16:10))}:a},{109:109,110:110,41:41}],88:[function(t,e,n){e.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},{}],89:[function(t,e,n){var a=t(8),r=t(52),i=t(69);e.exports=function(t,e){if(a(t),r(e)&&e.constructor===t)return e;var n=i.f(t),o=n.resolve;return o(e),n.promise}},{52:52,69:69,8:8}],90:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],91:[function(t,e,n){var a=t(92);e.exports=function(t,e,n){for(var r in e)a(t,r,e[r],n);return t}},{92:92}],92:[function(t,e,n){var a=t(41),r=t(43),i=t(42),o=t(122)("src"),s="toString",u=Function[s],p=(""+u).split(s);t(24).inspectSource=function(t){return u.call(t)},(e.exports=function(t,e,n,s){var u="function"==typeof n;u&&(i(n,"name")||r(n,"name",e)),t[e]!==n&&(u&&(i(n,o)||r(n,o,t[e]?""+t[e]:p.join(e+""))),t===a?t[e]=n:s?t[e]?t[e]=n:r(t,e,n):(delete t[e],r(t,e,n)))})(Function.prototype,s,function(){ -return"function"==typeof this&&this[o]||u.call(this)})},{122:122,24:24,41:41,42:42,43:43}],93:[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)}}},{}],94:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],95:[function(t,e,n){"use strict";var a=t(34),r=t(4),i=t(26),o=t(40);e.exports=function(t){a(a.S,t,{from:function(t){var e,n,a,s,u=arguments[1];return r(this),e=void 0!==u,e&&r(u),void 0==t?new this:(n=[],e?(a=0,s=i(u,arguments[2],2),o(t,!1,function(t){n.push(s(t,a++))})):o(t,!1,n.push,n),new this(n))}})}},{26:26,34:34,4:4,40:40}],96:[function(t,e,n){"use strict";var a=t(34);e.exports=function(t){a(a.S,t,{of:function(){for(var t=arguments.length,e=Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},{34:34}],97:[function(t,e,n){var a=t(52),r=t(8),i=function(t,e){if(r(t),!a(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,a){try{a=t(26)(Function.call,t(75).f(Object.prototype,"__proto__").set,2),a(e,[]),n=!(e instanceof Array)}catch(r){n=!0}return function(t,e){return i(t,e),n?t.__proto__=e:a(t,e),t}}({},!1):void 0),check:i}},{26:26,52:52,75:75,8:8}],98:[function(t,e,n){"use strict";var a=t(41),r=t(72),i=t(30),o=t(127)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.f(e,o,{configurable:!0,get:function(){return this}})}},{127:127,30:30,41:41,72:72}],99:[function(t,e,n){var a=t(72).f,r=t(42),i=t(127)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{127:127,42:42,72:72}],100:[function(t,e,n){var a=t(101)("keys"),r=t(122);e.exports=function(t){return a[t]||(a[t]=r(t))}},{101:101,122:122}],101:[function(t,e,n){var a=t(24),r=t(41),i="__core-js_shared__",o=r[i]||(r[i]={});(e.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:a.version,mode:t(60)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},{24:24,41:41,60:60}],102:[function(t,e,n){var a=t(8),r=t(4),i=t(127)("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)}},{127:127,4:4,8:8}],103:[function(t,e,n){"use strict";var a=t(36);e.exports=function(t,e){return!!t&&a(function(){e?t.call(null,function(){},1):t.call(null)})}},{36:36}],104:[function(t,e,n){var a=t(114),r=t(29);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)}}},{114:114,29:29}],105:[function(t,e,n){var a=t(53),r=t(29);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{29:29,53:53}],106:[function(t,e,n){var a=t(34),r=t(36),i=t(29),o=/"/g,s=function(t,e,n,a){var r=i(t)+"",s="<"+e;return""!==n&&(s+=" "+n+'="'+(a+"").replace(o,""")+'"'),s+">"+r+""};e.exports=function(t,e){var n={};n[t]=e(s),a(a.P+a.F*r(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",n)}},{29:29,34:34,36:36}],107:[function(t,e,n){var a=t(116),r=t(108),i=t(29);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||""==p)return s;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}},{108:108,116:116,29:29}],108:[function(t,e,n){"use strict";var a=t(114),r=t(29);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}},{114:114,29:29}],109:[function(t,e,n){var a=t(34),r=t(29),i=t(36),o=t(110),s="["+o+"]",u="​…",p=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e,n){var r={},s=i(function(){return!!o[t]()||u[t]()!=u}),p=r[t]=s?e(f):o[t];n&&(r[n]=p),a(a.P+a.F*s,"String",r)},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},{110:110,29:29,34:34,36:36}],110:[function(t,e,n){e.exports=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff"},{}],111:[function(t,e,n){var a,r,i,o=t(26),s=t(47),u=t(44),p=t(31),c=t(41),l=c.process,f=c.setImmediate,d=c.clearImmediate,h=c.MessageChannel,m=c.Dispatch,g=0,v={},b="onreadystatechange",y=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},x=function(t){y.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++g]=function(){s("function"==typeof t?t:Function(t),e)},a(g),g},d=function(t){delete v[t]},"process"==t(19)(l)?a=function(t){l.nextTick(o(y,t,1))}:m&&m.now?a=function(t){m.now(o(y,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=x,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",x,!1)):a=b in p("script")?function(t){u.appendChild(p("script"))[b]=function(){u.removeChild(this),y.call(t)}}:function(t){setTimeout(o(y,t,1),0)}),e.exports={set:f,clear:d}},{19:19,26:26,31:31,41:41,44:44,47:47}],112:[function(t,e,n){var a=t(114),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{114:114}],113:[function(t,e,n){var a=t(114),r=t(116);e.exports=function(t){if(void 0===t)return 0;var e=a(t),n=r(e);if(e!==n)throw RangeError("Wrong length!");return n}},{114:114,116:116}],114:[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)}},{}],115:[function(t,e,n){var a=t(48),r=t(29);e.exports=function(t){return a(r(t))}},{29:29,48:48}],116:[function(t,e,n){var a=t(114),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{114:114}],117:[function(t,e,n){var a=t(29);e.exports=function(t){return Object(a(t))}},{29:29}],118:[function(t,e,n){var a=t(52);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")}},{52:52}],119:[function(t,e,n){"use strict";if(t(30)){var a=t(60),r=t(41),i=t(36),o=t(34),s=t(121),u=t(120),p=t(26),c=t(7),l=t(90),f=t(43),d=t(91),h=t(114),m=t(116),g=t(113),v=t(112),b=t(118),y=t(42),x=t(18),_=t(52),w=t(117),k=t(49),S=t(71),E=t(79),P=t(77).f,C=t(128),A=t(122),O=t(127),T=t(13),R=t(12),M=t(102),L=t(140),j=t(59),D=t(57),N=t(98),F=t(10),I=t(9),B=t(72),q=t(75),U=B.f,V=q.f,G=r.RangeError,z=r.TypeError,W=r.Uint8Array,H="ArrayBuffer",Q="Shared"+H,K="BYTES_PER_ELEMENT",Y="prototype",$=Array[Y],J=u.ArrayBuffer,X=u.DataView,Z=T(0),tt=T(2),et=T(3),nt=T(4),at=T(5),rt=T(6),it=R(!0),ot=R(!1),st=L.values,ut=L.keys,pt=L.entries,ct=$.lastIndexOf,lt=$.reduce,ft=$.reduceRight,dt=$.join,ht=$.sort,mt=$.slice,gt=$.toString,vt=$.toLocaleString,bt=O("iterator"),yt=O("toStringTag"),xt=A("typed_constructor"),_t=A("def_constructor"),wt=s.CONSTR,kt=s.TYPED,St=s.VIEW,Et="Wrong length!",Pt=T(1,function(t,e){return Rt(M(t,t[_t]),e)}),Ct=i(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),At=!!W&&!!W[Y].set&&i(function(){new W(1).set({})}),Ot=function(t,e){var n=h(t);if(0>n||n%e)throw G("Wrong offset!");return n},Tt=function(t){if(_(t)&&kt in t)return t;throw z(t+" is not a typed array!")},Rt=function(t,e){if(!(_(t)&&xt in t))throw z("It is not a typed array constructor!");return new t(e)},Mt=function(t,e){return Lt(M(t,t[_t]),e)},Lt=function(t,e){for(var n=0,a=e.length,r=Rt(t,a);a>n;)r[n]=e[n++];return r},jt=function(t,e,n){U(t,e,{get:function(){return this._d[n]}})},Dt=function(t){var e,n,a,r,i,o,s=w(t),u=arguments.length,c=u>1?arguments[1]:void 0,l=void 0!==c,f=C(s);if(void 0!=f&&!k(f)){for(o=f.call(s),a=[],e=0;!(i=o.next()).done;e++)a.push(i.value);s=a}for(l&&u>2&&(c=p(c,arguments[2],2)),e=0,n=m(s.length),r=Rt(this,n);n>e;e++)r[e]=l?c(s[e],e):s[e];return r},Nt=function(){for(var t=0,e=arguments.length,n=Rt(this,e);e>t;)n[t]=arguments[t++];return n},Ft=!!W&&i(function(){vt.call(new W(1))}),It=function(){return vt.apply(Ft?mt.call(Tt(this)):Tt(this),arguments)},Bt={copyWithin:function(t,e){return I.call(Tt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return nt(Tt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return F.apply(Tt(this),arguments)},filter:function(t){return Mt(this,tt(Tt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return at(Tt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return rt(Tt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Z(Tt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ot(Tt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return it(Tt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return dt.apply(Tt(this),arguments)},lastIndexOf:function(t){return ct.apply(Tt(this),arguments)},map:function(t){return Pt(Tt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return lt.apply(Tt(this),arguments)},reduceRight:function(t){return ft.apply(Tt(this),arguments)},reverse:function(){for(var t,e=this,n=Tt(e).length,a=Math.floor(n/2),r=0;a>r;)t=e[r],e[r++]=e[--n],e[n]=t;return e},some:function(t){return et(Tt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return ht.call(Tt(this),t)},subarray:function(t,e){var n=Tt(this),a=n.length,r=v(t,a);return new(M(n,n[_t]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,m((void 0===e?a:v(e,a))-r))}},qt=function(t,e){return Mt(this,mt.call(Tt(this),t,e))},Ut=function(t){Tt(this);var e=Ot(arguments[1],1),n=this.length,a=w(t),r=m(a.length),i=0;if(r+e>n)throw G(Et);for(;r>i;)this[e+i]=a[i++]},Vt={entries:function(){return pt.call(Tt(this))},keys:function(){return ut.call(Tt(this))},values:function(){return st.call(Tt(this))}},Gt=function(t,e){return _(t)&&t[kt]&&"symbol"!=typeof e&&e in t&&+e+""==e+""},zt=function(t,e){return Gt(t,e=b(e,!0))?l(2,t[e]):V(t,e)},Wt=function(t,e,n){return!(Gt(t,e=b(e,!0))&&_(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?U(t,e,n):(t[e]=n.value,t)};wt||(q.f=zt,B.f=Wt),o(o.S+o.F*!wt,"Object",{getOwnPropertyDescriptor:zt,defineProperty:Wt}),i(function(){gt.call({})})&&(gt=vt=function(){return dt.call(this)});var Ht=d({},Bt);d(Ht,Vt),f(Ht,bt,Vt.values),d(Ht,{slice:qt,set:Ut,constructor:function(){},toString:gt,toLocaleString:It}),jt(Ht,"buffer","b"),jt(Ht,"byteOffset","o"),jt(Ht,"byteLength","l"),jt(Ht,"length","e"),U(Ht,yt,{get:function(){return this[kt]}}),e.exports=function(t,e,n,u){u=!!u;var p=t+(u?"Clamped":"")+"Array",l="get"+t,d="set"+t,h=r[p],v=h||{},b=h&&E(h),y=!h||!s.ABV,w={},k=h&&h[Y],C=function(t,n){var a=t._d;return a.v[l](n*e+a.o,Ct)},A=function(t,n,a){var r=t._d;u&&(a=(a=Math.round(a))<0?0:a>255?255:255&a),r.v[d](n*e+r.o,a,Ct)},O=function(t,e){U(t,e,{get:function(){return C(this,e)},set:function(t){return A(this,e,t)},enumerable:!0})};y?(h=n(function(t,n,a,r){c(t,h,p,"_d");var i,o,s,u,l=0,d=0;if(_(n)){if(!(n instanceof J||(u=x(n))==H||u==Q))return kt in n?Lt(h,n):Dt.call(h,n);i=n,d=Ot(a,e);var v=n.byteLength;if(void 0===r){if(v%e)throw G(Et);if(o=v-d,0>o)throw G(Et)}else if(o=m(r)*e,o+d>v)throw G(Et);s=o/e}else s=g(n),o=s*e,i=new J(o);for(f(t,"_d",{b:i,o:d,l:o,e:s,v:new X(i)});s>l;)O(t,l++)}),k=h[Y]=S(Ht),f(k,"constructor",h)):i(function(){h(1)})&&i(function(){new h(-1)})&&D(function(t){new h,new h(null),new h(1.5),new h(t)},!0)||(h=n(function(t,n,a,r){c(t,h,p);var i;return _(n)?n instanceof J||(i=x(n))==H||i==Q?void 0!==r?new v(n,Ot(a,e),r):void 0!==a?new v(n,Ot(a,e)):new v(n):kt in n?Lt(h,n):Dt.call(h,n):new v(g(n))}),Z(b!==Function.prototype?P(v).concat(P(b)):P(v),function(t){t in h||f(h,t,v[t])}),h[Y]=k,a||(k.constructor=h));var T=k[bt],R=!!T&&("values"==T.name||void 0==T.name),M=Vt.values;f(h,xt,!0),f(k,kt,p),f(k,St,!0),f(k,_t,h),(u?new h(1)[yt]==p:yt in k)||U(k,yt,{get:function(){return p}}),w[p]=h,o(o.G+o.W+o.F*(h!=v),w),o(o.S,p,{BYTES_PER_ELEMENT:e}),o(o.S+o.F*i(function(){v.of.call(h,1)}),p,{from:Dt,of:Nt}),K in k||f(k,K,e),o(o.P,p,Bt),N(p),o(o.P+o.F*At,p,{set:Ut}),o(o.P+o.F*!R,p,Vt),a||k.toString==gt||(k.toString=gt),o(o.P+o.F*i(function(){new h(1).slice()}),p,{slice:qt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()})||!i(function(){k.toLocaleString.call([1,2])})),p,{toLocaleString:It}),j[p]=R?T:M,a||R||f(k,bt,M)}}else e.exports=function(){}},{10:10,102:102,112:112,113:113,114:114,116:116,117:117,118:118,12:12,120:120,121:121,122:122,127:127,128:128,13:13,140:140,18:18,26:26,30:30,34:34,36:36,41:41,42:42,43:43,49:49,52:52,57:57,59:59,60:60,7:7,71:71,72:72,75:75,77:77,79:79,9:9,90:90,91:91,98:98}],120:[function(t,e,n){"use strict";function a(t,e,n){var a,r,i,o=Array(n),s=8*n-e-1,u=(1<>1,c=23===e?U(2,-24)-U(2,-77):0,l=0,f=0>t||0===t&&0>1/t?1:0;for(t=q(t),t!=t||t===I?(r=t!=t?1:0,a=u):(a=V(G(t)/z),t*(i=U(2,-a))<1&&(a--,i*=2),t+=a+p>=1?c/i:c*U(2,1-p),t*i>=2&&(a++,i/=2),a+p>=u?(r=0,a=u):a+p>=1?(r=(t*i-1)*U(2,e),a+=p):(r=t*U(2,p-1)*U(2,e),a=0));e>=8;o[l++]=255&r,r/=256,e-=8);for(a=a<0;o[l++]=255&a,a/=256,s-=8);return o[--l]|=128*f,o}function r(t,e,n){var a,r=8*n-e-1,i=(1<>1,s=r-7,u=n-1,p=t[u--],c=127&p;for(p>>=7;s>0;c=256*c+t[u],u--,s-=8);for(a=c&(1<<-s)-1,c>>=-s,s+=e;s>0;a=256*a+t[u],u--,s-=8);if(0===c)c=1-o;else{if(c===i)return a?NaN:p?-I:I;a+=U(2,e),c-=o}return(p?-1:1)*a*U(2,c-e)}function i(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function o(t){return[255&t]}function s(t){return[255&t,t>>8&255]}function u(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function p(t){return a(t,52,8)}function c(t){return a(t,23,4)}function l(t,e,n){P(t[R],e,{get:function(){return this[n]}})}function f(t,e,n,a){var r=+n,i=S(r);if(i+e>t[Y])throw F(L);var o=t[K]._b,s=i+t[$],u=o.slice(s,s+e);return a?u:u.reverse()}function d(t,e,n,a,r,i){var o=+n,s=S(o);if(s+e>t[Y])throw F(L);for(var u=t[K]._b,p=s+t[$],c=a(+r),l=0;e>l;l++)u[p+l]=c[i?l:e-l-1]}var h=t(41),m=t(30),g=t(60),v=t(121),b=t(43),y=t(91),x=t(36),_=t(7),w=t(114),k=t(116),S=t(113),E=t(77).f,P=t(72).f,C=t(10),A=t(99),O="ArrayBuffer",T="DataView",R="prototype",M="Wrong length!",L="Wrong index!",j=h[O],D=h[T],N=h.Math,F=h.RangeError,I=h.Infinity,B=j,q=N.abs,U=N.pow,V=N.floor,G=N.log,z=N.LN2,W="buffer",H="byteLength",Q="byteOffset",K=m?"_b":W,Y=m?"_l":H,$=m?"_o":Q;if(v.ABV){if(!x(function(){j(1)})||!x(function(){new j(-1)})||x(function(){return new j,new j(1.5),new j(NaN),j.name!=O})){j=function(t){return _(this,j),new B(S(t))};for(var J,X=j[R]=B[R],Z=E(B),tt=0;Z.length>tt;)(J=Z[tt++])in j||b(j,J,B[J]);g||(X.constructor=j)}var et=new D(new j(2)),nt=D[R].setInt8;et.setInt8(0,2147483648),et.setInt8(1,2147483649),(et.getInt8(0)||!et.getInt8(1))&&y(D[R],{setInt8:function(t,e){nt.call(this,t,e<<24>>24)},setUint8:function(t,e){nt.call(this,t,e<<24>>24)}},!0)}else j=function(t){_(this,j,O);var e=S(t);this._b=C.call(Array(e),0),this[Y]=e},D=function(t,e,n){_(this,D,T),_(t,j,T);var a=t[Y],r=w(e);if(0>r||r>a)throw F("Wrong offset!");if(n=void 0===n?a-r:k(n),r+n>a)throw F(M);this[K]=t,this[$]=r,this[Y]=n},m&&(l(j,H,"_l"),l(D,W,"_b"),l(D,H,"_l"),l(D,Q,"_o")),y(D[R],{getInt8:function(t){return f(this,1,t)[0]<<24>>24},getUint8:function(t){return f(this,1,t)[0]},getInt16:function(t){var e=f(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=f(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return i(f(this,4,t,arguments[1]))},getUint32:function(t){return i(f(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return r(f(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return r(f(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){d(this,1,t,o,e)},setUint8:function(t,e){d(this,1,t,o,e)},setInt16:function(t,e){d(this,2,t,s,e,arguments[2])},setUint16:function(t,e){d(this,2,t,s,e,arguments[2])},setInt32:function(t,e){d(this,4,t,u,e,arguments[2])},setUint32:function(t,e){d(this,4,t,u,e,arguments[2])},setFloat32:function(t,e){d(this,4,t,c,e,arguments[2])},setFloat64:function(t,e){d(this,8,t,p,e,arguments[2])}});A(j,O),A(D,T),b(D[R],v.VIEW,!0),n[O]=j,n[T]=D},{10:10,113:113,114:114,116:116,121:121,30:30,36:36,41:41,43:43,60:60,7:7,72:72,77:77,91:91,99:99}],121:[function(t,e,n){for(var a,r=t(41),i=t(43),o=t(122),s=o("typed_array"),u=o("view"),p=!(!r.ArrayBuffer||!r.DataView),c=p,l=0,f=9,d="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");f>l;)(a=r[d[l++]])?(i(a.prototype,s,!0),i(a.prototype,u,!0)):c=!1;e.exports={ABV:p,CONSTR:c,TYPED:s,VIEW:u}},{122:122,41:41,43:43}],122:[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))}},{}],123:[function(t,e,n){var a=t(41),r=a.navigator;e.exports=r&&r.userAgent||""},{41:41}],124:[function(t,e,n){var a=t(52);e.exports=function(t,e){if(!a(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},{52:52}],125:[function(t,e,n){var a=t(41),r=t(24),i=t(60),o=t(126),s=t(72).f;e.exports=function(t){var e=r.Symbol||(r.Symbol=i?{}:a.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:o.f(t)})}},{126:126,24:24,41:41,60:60,72:72}],126:[function(t,e,n){n.f=t(127)},{127:127}],127:[function(t,e,n){var a=t(101)("wks"),r=t(122),i=t(41).Symbol,o="function"==typeof i,s=e.exports=function(t){return a[t]||(a[t]=o&&i[t]||(o?i:r)("Symbol."+t))};s.store=a},{101:101,122:122,41:41}],128:[function(t,e,n){var a=t(18),r=t(127)("iterator"),i=t(59);e.exports=t(24).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{127:127,18:18,24:24,59:59}],129:[function(t,e,n){var a=t(34),r=t(93)(/[\\^$*+?.()|[\]{}]/g,"\\$&");a(a.S,"RegExp",{escape:function(t){return r(t)}})},{34:34,93:93}],130:[function(t,e,n){var a=t(34);a(a.P,"Array",{copyWithin:t(9)}),t(6)("copyWithin")},{34:34,6:6,9:9}],131:[function(t,e,n){"use strict";var a=t(34),r=t(13)(4);a(a.P+a.F*!t(103)([].every,!0),"Array",{every:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],132:[function(t,e,n){var a=t(34);a(a.P,"Array",{fill:t(10)}),t(6)("fill")},{10:10,34:34,6:6}],133:[function(t,e,n){"use strict";var a=t(34),r=t(13)(2);a(a.P+a.F*!t(103)([].filter,!0),"Array",{filter:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],134:[function(t,e,n){"use strict";var a=t(34),r=t(13)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{findIndex:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(6)(i)},{13:13,34:34,6:6}],135:[function(t,e,n){"use strict";var a=t(34),r=t(13)(5),i="find",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(6)(i)},{13:13,34:34,6:6}],136:[function(t,e,n){"use strict";var a=t(34),r=t(13)(0),i=t(103)([].forEach,!0);a(a.P+a.F*!i,"Array",{forEach:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],137:[function(t,e,n){"use strict";var a=t(26),r=t(34),i=t(117),o=t(54),s=t(49),u=t(116),p=t(25),c=t(128);r(r.S+r.F*!t(57)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,r,l,f=i(t),d="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,g=void 0!==m,v=0,b=c(f);if(g&&(m=a(m,h>2?arguments[2]:void 0,2)),void 0==b||d==Array&&s(b))for(e=u(f.length),n=new d(e);e>v;v++)p(n,v,g?m(f[v],v):f[v]);else for(l=b.call(f),n=new d;!(r=l.next()).done;v++)p(n,v,g?o(l,m,[r.value,v],!0):r.value);return n.length=v,n}})},{116:116,117:117,128:128,25:25,26:26,34:34,49:49,54:54,57:57}],138:[function(t,e,n){"use strict";var a=t(34),r=t(12)(!1),i=[].indexOf,o=!!i&&1/[1].indexOf(1,-0)<0;a(a.P+a.F*(o||!t(103)(i)),"Array",{indexOf:function(t){return o?i.apply(this,arguments)||0:r(this,t,arguments[1])}})},{103:103,12:12,34:34}],139:[function(t,e,n){var a=t(34);a(a.S,"Array",{isArray:t(50)})},{34:34,50:50}],140:[function(t,e,n){"use strict";var a=t(6),r=t(58),i=t(59),o=t(115);e.exports=t(56)(Array,"Array",function(t,e){this._t=o(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),i.Arguments=i.Array,a("keys"),a("values"),a("entries")},{115:115,56:56,58:58,59:59,6:6}],141:[function(t,e,n){"use strict";var a=t(34),r=t(115),i=[].join;a(a.P+a.F*(t(48)!=Object||!t(103)(i)),"Array",{join:function(t){return i.call(r(this),void 0===t?",":t)}})},{103:103,115:115,34:34,48:48}],142:[function(t,e,n){"use strict";var a=t(34),r=t(115),i=t(114),o=t(116),s=[].lastIndexOf,u=!!s&&1/[1].lastIndexOf(1,-0)<0;a(a.P+a.F*(u||!t(103)(s)),"Array",{lastIndexOf:function(t){if(u)return s.apply(this,arguments)||0;var e=r(this),n=o(e.length),a=n-1;for(arguments.length>1&&(a=Math.min(a,i(arguments[1]))),0>a&&(a=n+a);a>=0;a--)if(a in e&&e[a]===t)return a||0;return-1}})},{103:103,114:114,115:115,116:116,34:34}],143:[function(t,e,n){"use strict";var a=t(34),r=t(13)(1);a(a.P+a.F*!t(103)([].map,!0),"Array",{map:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],144:[function(t,e,n){"use strict";var a=t(34),r=t(25);a(a.S+a.F*t(36)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);e>t;)r(n,t,arguments[t++]);return n.length=e,n}})},{25:25,34:34,36:36}],145:[function(t,e,n){"use strict";var a=t(34),r=t(14);a(a.P+a.F*!t(103)([].reduceRight,!0),"Array",{reduceRight:function(t){return r(this,t,arguments.length,arguments[1],!0)}})},{103:103,14:14,34:34}],146:[function(t,e,n){"use strict";var a=t(34),r=t(14);a(a.P+a.F*!t(103)([].reduce,!0),"Array",{reduce:function(t){return r(this,t,arguments.length,arguments[1],!1)}})},{103:103,14:14,34:34}],147:[function(t,e,n){"use strict";var a=t(34),r=t(44),i=t(19),o=t(112),s=t(116),u=[].slice;a(a.P+a.F*t(36)(function(){r&&u.call(r)}),"Array",{slice:function(t,e){var n=s(this.length),a=i(this);if(e=void 0===e?n:e,"Array"==a)return u.call(this,t,e);for(var r=o(t,n),p=o(e,n),c=s(p-r),l=Array(c),f=0;c>f;f++)l[f]="String"==a?this.charAt(r+f):this[r+f];return l}})},{112:112,116:116,19:19,34:34,36:36,44:44}],148:[function(t,e,n){"use strict";var a=t(34),r=t(13)(3);a(a.P+a.F*!t(103)([].some,!0),"Array",{some:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],149:[function(t,e,n){"use strict";var a=t(34),r=t(4),i=t(117),o=t(36),s=[].sort,u=[1,2,3];a(a.P+a.F*(o(function(){u.sort(void 0)})||!o(function(){u.sort(null)})||!t(103)(s)),"Array",{sort:function(t){return void 0===t?s.call(i(this)):s.call(i(this),r(t))}})},{103:103,117:117,34:34,36:36,4:4}],150:[function(t,e,n){t(98)("Array")},{98:98}],151:[function(t,e,n){var a=t(34);a(a.S,"Date",{now:function(){return(new Date).getTime()}})},{34:34}],152:[function(t,e,n){var a=t(34),r=t(27);a(a.P+a.F*(Date.prototype.toISOString!==r),"Date",{toISOString:r})},{27:27,34:34}],153:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118);a(a.P+a.F*t(36)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var e=r(this),n=i(e);return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},{117:117,118:118,34:34,36:36}],154:[function(t,e,n){var a=t(127)("toPrimitive"),r=Date.prototype;a in r||t(43)(r,a,t(28))},{127:127,28:28,43:43}],155:[function(t,e,n){var a=Date.prototype,r="Invalid Date",i="toString",o=a[i],s=a.getTime;new Date(NaN)+""!=r&&t(92)(a,i,function(){var t=s.call(this);return t===t?o.call(this):r})},{92:92}],156:[function(t,e,n){var a=t(34);a(a.P,"Function",{bind:t(17)})},{17:17,34:34}],157:[function(t,e,n){"use strict";var a=t(52),r=t(79),i=t(127)("hasInstance"),o=Function.prototype;i in o||t(72).f(o,i,{value:function(t){if("function"!=typeof this||!a(t))return!1;if(!a(this.prototype))return t instanceof this;for(;t=r(t);)if(this.prototype===t)return!0;return!1}})},{127:127,52:52,72:72,79:79}],158:[function(t,e,n){var a=t(72).f,r=Function.prototype,i=/^\s*function ([^ (]*)/,o="name";o in r||t(30)&&a(r,o,{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(t){return""}}})},{30:30,72:72}],159:[function(t,e,n){"use strict";var a=t(20),r=t(124),i="Map";e.exports=t(23)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=a.getEntry(r(this,i),t);return e&&e.v},set:function(t,e){return a.def(r(this,i),0===t?0:t,e)}},a,!0)},{124:124,20:20,23:23}],160:[function(t,e,n){var a=t(34),r=t(63),i=Math.sqrt,o=Math.acosh;a(a.S+a.F*!(o&&710==Math.floor(o(Number.MAX_VALUE))&&o(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:r(t-1+i(t-1)*i(t+1))}})},{34:34,63:63}],161:[function(t,e,n){function a(t){return isFinite(t=+t)&&0!=t?0>t?-a(-t):Math.log(t+Math.sqrt(t*t+1)):t}var r=t(34),i=Math.asinh;r(r.S+r.F*!(i&&1/i(0)>0),"Math",{asinh:a})},{34:34}],162:[function(t,e,n){var a=t(34),r=Math.atanh;a(a.S+a.F*!(r&&1/r(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{34:34}],163:[function(t,e,n){var a=t(34),r=t(65);a(a.S,"Math",{cbrt:function(t){return r(t=+t)*Math.pow(Math.abs(t),1/3)}})},{34:34,65:65}],164:[function(t,e,n){var a=t(34);a(a.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{34:34}],165:[function(t,e,n){var a=t(34),r=Math.exp;a(a.S,"Math",{cosh:function(t){return(r(t=+t)+r(-t))/2}})},{34:34}],166:[function(t,e,n){var a=t(34),r=t(61);a(a.S+a.F*(r!=Math.expm1),"Math",{expm1:r})},{34:34,61:61}],167:[function(t,e,n){var a=t(34);a(a.S,"Math",{fround:t(62)})},{34:34,62:62}],168:[function(t,e,n){var a=t(34),r=Math.abs;a(a.S,"Math",{hypot:function(t,e){for(var n,a,i=0,o=0,s=arguments.length,u=0;s>o;)n=r(arguments[o++]),n>u?(a=u/n,i=i*a*a+1,u=n):n>0?(a=n/u,i+=a*a):i+=n;return u===1/0?1/0:u*Math.sqrt(i)}})},{34:34}],169:[function(t,e,n){var a=t(34),r=Math.imul;a(a.S+a.F*t(36)(function(){return-5!=r(4294967295,5)||2!=r.length}),"Math",{imul:function(t,e){var n=65535,a=+t,r=+e,i=n&a,o=n&r;return 0|i*o+((n&a>>>16)*o+i*(n&r>>>16)<<16>>>0)}})},{34:34,36:36}],170:[function(t,e,n){var a=t(34);a(a.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},{34:34}],171:[function(t,e,n){var a=t(34);a(a.S,"Math",{log1p:t(63)})},{34:34,63:63}],172:[function(t,e,n){var a=t(34);a(a.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{34:34}],173:[function(t,e,n){var a=t(34);a(a.S,"Math",{sign:t(65)})},{34:34,65:65}],174:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S+a.F*t(36)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(r(t)-r(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{34:34,36:36,61:61}],175:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S,"Math",{tanh:function(t){var e=r(t=+t),n=r(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{34:34,61:61}],176:[function(t,e,n){var a=t(34);a(a.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{34:34}],177:[function(t,e,n){"use strict";var a=t(41),r=t(42),i=t(19),o=t(46),s=t(118),u=t(36),p=t(77).f,c=t(75).f,l=t(72).f,f=t(109).trim,d="Number",h=a[d],m=h,g=h.prototype,v=i(t(71)(g))==d,b="trim"in String.prototype,y=function(t){var e=s(t,!1);if("string"==typeof e&&e.length>2){e=b?e.trim():f(e,3);var n,a,r,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:a=2,r=49;break;case 79:case 111:a=8,r=55;break;default:return+e}for(var o,u=e.slice(2),p=0,c=u.length;c>p;p++)if(o=u.charCodeAt(p),48>o||o>r)return NaN;return parseInt(u,a)}}return+e};if(!h(" 0o1")||!h("0b1")||h("+0x1")){h=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof h&&(v?u(function(){g.valueOf.call(n)}):i(n)!=d)?o(new m(y(e)),n,h):y(e)};for(var x,_=t(30)?p(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;_.length>w;w++)r(m,x=_[w])&&!r(h,x)&&l(h,x,c(m,x));h.prototype=g,g.constructor=h,t(92)(a,d,h)}},{109:109,118:118,19:19,30:30,36:36,41:41,42:42,46:46,71:71,72:72,75:75,77:77,92:92}],178:[function(t,e,n){var a=t(34);a(a.S,"Number",{EPSILON:Math.pow(2,-52)})},{34:34}],179:[function(t,e,n){var a=t(34),r=t(41).isFinite;a(a.S,"Number",{isFinite:function(t){return"number"==typeof t&&r(t)}})},{34:34,41:41}],180:[function(t,e,n){var a=t(34);a(a.S,"Number",{isInteger:t(51)})},{34:34,51:51}],181:[function(t,e,n){var a=t(34);a(a.S,"Number",{isNaN:function(t){return t!=t}})},{34:34}],182:[function(t,e,n){var a=t(34),r=t(51),i=Math.abs;a(a.S,"Number",{isSafeInteger:function(t){return r(t)&&i(t)<=9007199254740991}})},{34:34,51:51}],183:[function(t,e,n){var a=t(34);a(a.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{34:34}],184:[function(t,e,n){var a=t(34);a(a.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{34:34}],185:[function(t,e,n){var a=t(34),r=t(86);a(a.S+a.F*(Number.parseFloat!=r),"Number",{parseFloat:r})},{34:34,86:86}],186:[function(t,e,n){var a=t(34),r=t(87);a(a.S+a.F*(Number.parseInt!=r),"Number",{parseInt:r})},{34:34,87:87}],187:[function(t,e,n){"use strict";var a=t(34),r=t(114),i=t(5),o=t(108),s=1..toFixed,u=Math.floor,p=[0,0,0,0,0,0],c="Number.toFixed: incorrect invocation!",l="0",f=function(t,e){for(var n=-1,a=e;++n<6;)a+=t*p[n],p[n]=a%1e7,a=u(a/1e7)},d=function(t){for(var e=6,n=0;--e>=0;)n+=p[e],p[e]=u(n/t),n=n%t*1e7},h=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==p[t]){var n=p[t]+"";e=""===e?n:e+o.call(l,7-n.length)+n}return e},m=function(t,e,n){return 0===e?n:e%2===1?m(t,e-1,n*t):m(t*t,e/2,n)},g=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e};a(a.P+a.F*(!!s&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0))||!t(36)(function(){s.call({})})),"Number",{toFixed:function(t){var e,n,a,s,u=i(this,c),p=r(t),v="",b=l;if(0>p||p>20)throw RangeError(c);if(u!=u)return"NaN";if(-1e21>=u||u>=1e21)return u+"";if(0>u&&(v="-",u=-u),u>1e-21)if(e=g(u*m(2,69,1))-69,n=0>e?u*m(2,-e,1):u/m(2,e,1),n*=4503599627370496,e=52-e,e>0){for(f(0,n),a=p;a>=7;)f(1e7,0),a-=7;for(f(m(10,a,1),0),a=e-1;a>=23;)d(1<<23),a-=23;d(1<0?(s=b.length,b=v+(p>=s?"0."+o.call(l,p-s)+b:b.slice(0,s-p)+"."+b.slice(s-p))):b=v+b,b}})},{108:108,114:114,34:34,36:36,5:5}],188:[function(t,e,n){"use strict";var a=t(34),r=t(36),i=t(5),o=1..toPrecision;a(a.P+a.F*(r(function(){return"1"!==o.call(1,void 0)})||!r(function(){o.call({})})),"Number",{toPrecision:function(t){var e=i(this,"Number#toPrecision: incorrect invocation!");return void 0===t?o.call(e):o.call(e,t)}})},{34:34,36:36,5:5}],189:[function(t,e,n){var a=t(34);a(a.S+a.F,"Object",{assign:t(70)})},{34:34,70:70}],190:[function(t,e,n){var a=t(34);a(a.S,"Object",{create:t(71)})},{34:34,71:71}],191:[function(t,e,n){var a=t(34);a(a.S+a.F*!t(30),"Object",{defineProperties:t(73)})},{30:30,34:34,73:73}],192:[function(t,e,n){var a=t(34);a(a.S+a.F*!t(30),"Object",{defineProperty:t(72).f})},{30:30,34:34,72:72}],193:[function(t,e,n){var a=t(52),r=t(66).onFreeze;t(83)("freeze",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{52:52,66:66,83:83}],194:[function(t,e,n){var a=t(115),r=t(75).f;t(83)("getOwnPropertyDescriptor",function(){return function(t,e){return r(a(t),e)}})},{115:115,75:75,83:83}],195:[function(t,e,n){t(83)("getOwnPropertyNames",function(){return t(76).f})},{76:76,83:83}],196:[function(t,e,n){var a=t(117),r=t(79);t(83)("getPrototypeOf",function(){return function(t){return r(a(t))}})},{117:117,79:79,83:83}],197:[function(t,e,n){var a=t(52);t(83)("isExtensible",function(t){return function(e){return a(e)?t?t(e):!0:!1}}); -},{52:52,83:83}],198:[function(t,e,n){var a=t(52);t(83)("isFrozen",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{52:52,83:83}],199:[function(t,e,n){var a=t(52);t(83)("isSealed",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{52:52,83:83}],200:[function(t,e,n){var a=t(34);a(a.S,"Object",{is:t(94)})},{34:34,94:94}],201:[function(t,e,n){var a=t(117),r=t(81);t(83)("keys",function(){return function(t){return r(a(t))}})},{117:117,81:81,83:83}],202:[function(t,e,n){var a=t(52),r=t(66).onFreeze;t(83)("preventExtensions",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{52:52,66:66,83:83}],203:[function(t,e,n){var a=t(52),r=t(66).onFreeze;t(83)("seal",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{52:52,66:66,83:83}],204:[function(t,e,n){var a=t(34);a(a.S,"Object",{setPrototypeOf:t(97).set})},{34:34,97:97}],205:[function(t,e,n){"use strict";var a=t(18),r={};r[t(127)("toStringTag")]="z",r+""!="[object z]"&&t(92)(Object.prototype,"toString",function(){return"[object "+a(this)+"]"},!0)},{127:127,18:18,92:92}],206:[function(t,e,n){var a=t(34),r=t(86);a(a.G+a.F*(parseFloat!=r),{parseFloat:r})},{34:34,86:86}],207:[function(t,e,n){var a=t(34),r=t(87);a(a.G+a.F*(parseInt!=r),{parseInt:r})},{34:34,87:87}],208:[function(t,e,n){"use strict";var a,r,i,o,s=t(60),u=t(41),p=t(26),c=t(18),l=t(34),f=t(52),d=t(4),h=t(7),m=t(40),g=t(102),v=t(111).set,b=t(68)(),y=t(69),x=t(88),_=t(123),w=t(89),k="Promise",S=u.TypeError,E=u.process,P=E&&E.versions,C=P&&P.v8||"",A=u[k],O="process"==c(E),T=function(){},R=r=y.f,M=!!function(){try{var e=A.resolve(1),n=(e.constructor={})[t(127)("species")]=function(t){t(T,T)};return(O||"function"==typeof PromiseRejectionEvent)&&e.then(T)instanceof n&&0!==C.indexOf("6.6")&&-1===_.indexOf("Chrome/66")}catch(a){}}(),L=function(t){var e;return f(t)&&"function"==typeof(e=t.then)?e:!1},j=function(t,e){if(!t._n){t._n=!0;var n=t._c;b(function(){for(var a=t._v,r=1==t._s,i=0,o=function(e){var n,i,o,s=r?e.ok:e.fail,u=e.resolve,p=e.reject,c=e.domain;try{s?(r||(2==t._h&&F(t),t._h=1),s===!0?n=a:(c&&c.enter(),n=s(a),c&&(c.exit(),o=!0)),n===e.promise?p(S("Promise-chain cycle")):(i=L(n))?i.call(n,u,p):u(n)):p(a)}catch(l){c&&!o&&c.exit(),p(l)}};n.length>i;)o(n[i++]);t._c=[],t._n=!1,e&&!t._h&&D(t)})}},D=function(t){v.call(u,function(){var e,n,a,r=t._v,i=N(t);if(i&&(e=x(function(){O?E.emit("unhandledRejection",r,t):(n=u.onunhandledrejection)?n({promise:t,reason:r}):(a=u.console)&&a.error&&a.error("Unhandled promise rejection",r)}),t._h=O||N(t)?2:1),t._a=void 0,i&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(t){v.call(u,function(){var e;O?E.emit("rejectionHandled",t):(e=u.onrejectionhandled)&&e({promise:t,reason:t._v})})},I=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),j(e,!0))},B=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw S("Promise can't be resolved itself");(e=L(t))?b(function(){var a={_w:n,_d:!1};try{e.call(t,p(B,a,1),p(I,a,1))}catch(r){I.call(a,r)}}):(n._v=t,n._s=1,j(n,!1))}catch(a){I.call({_w:n,_d:!1},a)}}};M||(A=function(t){h(this,A,k,"_h"),d(t),a.call(this);try{t(p(B,this,1),p(I,this,1))}catch(e){I.call(this,e)}},a=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},a.prototype=t(91)(A.prototype,{then:function(t,e){var n=R(g(this,A));return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,n.domain=O?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&j(this,!1),n.promise},"catch":function(t){return this.then(void 0,t)}}),i=function(){var t=new a;this.promise=t,this.resolve=p(B,t,1),this.reject=p(I,t,1)},y.f=R=function(t){return t===A||t===o?new i(t):r(t)}),l(l.G+l.W+l.F*!M,{Promise:A}),t(99)(A,k),t(98)(k),o=t(24)[k],l(l.S+l.F*!M,k,{reject:function(t){var e=R(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(s||!M),k,{resolve:function(t){return w(s&&this===o?A:this,t)}}),l(l.S+l.F*!(M&&t(57)(function(t){A.all(t)["catch"](T)})),k,{all:function(t){var e=this,n=R(e),a=n.resolve,r=n.reject,i=x(function(){var n=[],i=0,o=1;m(t,!1,function(t){var s=i++,u=!1;n.push(void 0),o++,e.resolve(t).then(function(t){u||(u=!0,n[s]=t,--o||a(n))},r)}),--o||a(n)});return i.e&&r(i.v),n.promise},race:function(t){var e=this,n=R(e),a=n.reject,r=x(function(){m(t,!1,function(t){e.resolve(t).then(n.resolve,a)})});return r.e&&a(r.v),n.promise}})},{102:102,111:111,123:123,127:127,18:18,24:24,26:26,34:34,4:4,40:40,41:41,52:52,57:57,60:60,68:68,69:69,7:7,88:88,89:89,91:91,98:98,99:99}],209:[function(t,e,n){var a=t(34),r=t(4),i=t(8),o=(t(41).Reflect||{}).apply,s=Function.apply;a(a.S+a.F*!t(36)(function(){o(function(){})}),"Reflect",{apply:function(t,e,n){var a=r(t),u=i(n);return o?o(a,e,u):s.call(a,e,u)}})},{34:34,36:36,4:4,41:41,8:8}],210:[function(t,e,n){var a=t(34),r=t(71),i=t(4),o=t(8),s=t(52),u=t(36),p=t(17),c=(t(41).Reflect||{}).construct,l=u(function(){function t(){}return!(c(function(){},[],t)instanceof t)}),f=!u(function(){c(function(){})});a(a.S+a.F*(l||f),"Reflect",{construct:function(t,e){i(t),o(e);var n=arguments.length<3?t:i(arguments[2]);if(f&&!l)return c(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var a=[null];return a.push.apply(a,e),new(p.apply(t,a))}var u=n.prototype,d=r(s(u)?u:Object.prototype),h=Function.apply.call(t,d,e);return s(h)?h:d}})},{17:17,34:34,36:36,4:4,41:41,52:52,71:71,8:8}],211:[function(t,e,n){var a=t(72),r=t(34),i=t(8),o=t(118);r(r.S+r.F*t(36)(function(){Reflect.defineProperty(a.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t),e=o(e,!0),i(n);try{return a.f(t,e,n),!0}catch(r){return!1}}})},{118:118,34:34,36:36,72:72,8:8}],212:[function(t,e,n){var a=t(34),r=t(75).f,i=t(8);a(a.S,"Reflect",{deleteProperty:function(t,e){var n=r(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{34:34,75:75,8:8}],213:[function(t,e,n){"use strict";var a=t(34),r=t(8),i=function(t){this._t=r(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t(55)(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),a(a.S,"Reflect",{enumerate:function(t){return new i(t)}})},{34:34,55:55,8:8}],214:[function(t,e,n){var a=t(75),r=t(34),i=t(8);r(r.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return a.f(i(t),e)}})},{34:34,75:75,8:8}],215:[function(t,e,n){var a=t(34),r=t(79),i=t(8);a(a.S,"Reflect",{getPrototypeOf:function(t){return r(i(t))}})},{34:34,79:79,8:8}],216:[function(t,e,n){function a(t,e){var n,s,c=arguments.length<3?t:arguments[2];return p(t)===c?t[e]:(n=r.f(t,e))?o(n,"value")?n.value:void 0!==n.get?n.get.call(c):void 0:u(s=i(t))?a(s,e,c):void 0}var r=t(75),i=t(79),o=t(42),s=t(34),u=t(52),p=t(8);s(s.S,"Reflect",{get:a})},{34:34,42:42,52:52,75:75,79:79,8:8}],217:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{has:function(t,e){return e in t}})},{34:34}],218:[function(t,e,n){var a=t(34),r=t(8),i=Object.isExtensible;a(a.S,"Reflect",{isExtensible:function(t){return r(t),i?i(t):!0}})},{34:34,8:8}],219:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{ownKeys:t(85)})},{34:34,85:85}],220:[function(t,e,n){var a=t(34),r=t(8),i=Object.preventExtensions;a(a.S,"Reflect",{preventExtensions:function(t){r(t);try{return i&&i(t),!0}catch(e){return!1}}})},{34:34,8:8}],221:[function(t,e,n){var a=t(34),r=t(97);r&&a(a.S,"Reflect",{setPrototypeOf:function(t,e){r.check(t,e);try{return r.set(t,e),!0}catch(n){return!1}}})},{34:34,97:97}],222:[function(t,e,n){function a(t,e,n){var u,f,d=arguments.length<4?t:arguments[3],h=i.f(c(t),e);if(!h){if(l(f=o(t)))return a(f,e,n,d);h=p(0)}if(s(h,"value")){if(h.writable===!1||!l(d))return!1;if(u=i.f(d,e)){if(u.get||u.set||u.writable===!1)return!1;u.value=n,r.f(d,e,u)}else r.f(d,e,p(0,n));return!0}return void 0===h.set?!1:(h.set.call(d,n),!0)}var r=t(72),i=t(75),o=t(79),s=t(42),u=t(34),p=t(90),c=t(8),l=t(52);u(u.S,"Reflect",{set:a})},{34:34,42:42,52:52,72:72,75:75,79:79,8:8,90:90}],223:[function(t,e,n){var a=t(41),r=t(46),i=t(72).f,o=t(77).f,s=t(53),u=t(38),p=a.RegExp,c=p,l=p.prototype,f=/a/g,d=/a/g,h=new p(f)!==f;if(t(30)&&(!h||t(36)(function(){return d[t(127)("match")]=!1,p(f)!=f||p(d)==d||"/a/i"!=p(f,"i")}))){p=function(t,e){var n=this instanceof p,a=s(t),i=void 0===e;return!n&&a&&t.constructor===p&&i?t:r(h?new c(a&&!i?t.source:t,e):c((a=t instanceof p)?t.source:t,a&&i?u.call(t):e),n?this:l,p)};for(var m=(function(t){t in p||i(p,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})}),g=o(c),v=0;g.length>v;)m(g[v++]);l.constructor=p,p.prototype=l,t(92)(a,"RegExp",p)}t(98)("RegExp")},{127:127,30:30,36:36,38:38,41:41,46:46,53:53,72:72,77:77,92:92,98:98}],224:[function(t,e,n){t(30)&&"g"!=/./g.flags&&t(72).f(RegExp.prototype,"flags",{configurable:!0,get:t(38)})},{30:30,38:38,72:72}],225:[function(t,e,n){t(37)("match",1,function(t,e,n){return[function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")},n]})},{37:37}],226:[function(t,e,n){t(37)("replace",2,function(t,e,n){return[function(a,r){"use strict";var i=t(this),o=void 0==a?void 0:a[e];return void 0!==o?o.call(a,i,r):n.call(i+"",a,r)},n]})},{37:37}],227:[function(t,e,n){t(37)("search",1,function(t,e,n){return[function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")},n]})},{37:37}],228:[function(t,e,n){t(37)("split",2,function(e,n,a){"use strict";var r=t(53),i=a,o=[].push,s="split",u="length",p="lastIndex";if("c"=="abbc"[s](/(b)*/)[1]||4!="test"[s](/(?:)/,-1)[u]||2!="ab"[s](/(?:ab)*/)[u]||4!="."[s](/(.?)(.?)/)[u]||"."[s](/()()/)[u]>1||""[s](/.?/)[u]){var c=void 0===/()??/.exec("")[1];a=function(t,e){var n=this+"";if(void 0===t&&0===e)return[];if(!r(t))return i.call(n,t,e);var a,s,l,f,d,h=[],m=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),g=0,v=void 0===e?4294967295:e>>>0,b=RegExp(t.source,m+"g");for(c||(a=RegExp("^"+b.source+"$(?!\\s)",m));(s=b.exec(n))&&(l=s.index+s[0][u],!(l>g&&(h.push(n.slice(g,s.index)),!c&&s[u]>1&&s[0].replace(a,function(){for(d=1;d1&&s.index=v)));)b[p]===s.index&&b[p]++;return g===n[u]?(f||!b.test(""))&&h.push(""):h.push(n.slice(g)),h[u]>v?h.slice(0,v):h}}else"0"[s](void 0,0)[u]&&(a=function(t,e){return void 0===t&&0===e?[]:i.call(this,t,e)});return[function(t,r){var i=e(this),o=void 0==t?void 0:t[n];return void 0!==o?o.call(t,i,r):a.call(i+"",t,r)},a]})},{37:37,53:53}],229:[function(t,e,n){"use strict";t(224);var a=t(8),r=t(38),i=t(30),o="toString",s=/./[o],u=function(e){t(92)(RegExp.prototype,o,e,!0)};t(36)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?u(function(){var t=a(this);return"/".concat(t.source,"/","flags"in t?t.flags:!i&&t instanceof RegExp?r.call(t):void 0)}):s.name!=o&&u(function(){return s.call(this)})},{224:224,30:30,36:36,38:38,8:8,92:92}],230:[function(t,e,n){"use strict";var a=t(20),r=t(124),i="Set";e.exports=t(23)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(r(this,i),t=0===t?0:t,t)}},a)},{124:124,20:20,23:23}],231:[function(t,e,n){"use strict";t(106)("anchor",function(t){return function(e){return t(this,"a","name",e)}})},{106:106}],232:[function(t,e,n){"use strict";t(106)("big",function(t){return function(){return t(this,"big","","")}})},{106:106}],233:[function(t,e,n){"use strict";t(106)("blink",function(t){return function(){return t(this,"blink","","")}})},{106:106}],234:[function(t,e,n){"use strict";t(106)("bold",function(t){return function(){return t(this,"b","","")}})},{106:106}],235:[function(t,e,n){"use strict";var a=t(34),r=t(104)(!1);a(a.P,"String",{codePointAt:function(t){return r(this,t)}})},{104:104,34:34}],236:[function(t,e,n){"use strict";var a=t(34),r=t(116),i=t(105),o="endsWith",s=""[o];a(a.P+a.F*t(35)(o),"String",{endsWith:function(t){var e=i(this,t,o),n=arguments.length>1?arguments[1]:void 0,a=r(e.length),u=void 0===n?a:Math.min(r(n),a),p=t+"";return s?s.call(e,p,u):e.slice(u-p.length,u)===p}})},{105:105,116:116,34:34,35:35}],237:[function(t,e,n){"use strict";t(106)("fixed",function(t){return function(){return t(this,"tt","","")}})},{106:106}],238:[function(t,e,n){"use strict";t(106)("fontcolor",function(t){return function(e){return t(this,"font","color",e)}})},{106:106}],239:[function(t,e,n){"use strict";t(106)("fontsize",function(t){return function(e){return t(this,"font","size",e)}})},{106:106}],240:[function(t,e,n){var a=t(34),r=t(112),i=String.fromCharCode,o=String.fromCodePoint;a(a.S+a.F*(!!o&&1!=o.length),"String",{fromCodePoint:function(t){for(var e,n=[],a=arguments.length,o=0;a>o;){if(e=+arguments[o++],r(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{112:112,34:34}],241:[function(t,e,n){"use strict";var a=t(34),r=t(105),i="includes";a(a.P+a.F*t(35)(i),"String",{includes:function(t){return!!~r(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{105:105,34:34,35:35}],242:[function(t,e,n){"use strict";t(106)("italics",function(t){return function(){return t(this,"i","","")}})},{106:106}],243:[function(t,e,n){"use strict";var a=t(104)(!0);t(56)(String,"String",function(t){this._t=t+"",this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=a(e,n),this._i+=t.length,{value:t,done:!1})})},{104:104,56:56}],244:[function(t,e,n){"use strict";t(106)("link",function(t){return function(e){return t(this,"a","href",e)}})},{106:106}],245:[function(t,e,n){var a=t(34),r=t(115),i=t(116);a(a.S,"String",{raw:function(t){for(var e=r(t.raw),n=i(e.length),a=arguments.length,o=[],s=0;n>s;)o.push(e[s++]+""),a>s&&o.push(arguments[s]+"");return o.join("")}})},{115:115,116:116,34:34}],246:[function(t,e,n){var a=t(34);a(a.P,"String",{repeat:t(108)})},{108:108,34:34}],247:[function(t,e,n){"use strict";t(106)("small",function(t){return function(){return t(this,"small","","")}})},{106:106}],248:[function(t,e,n){"use strict";var a=t(34),r=t(116),i=t(105),o="startsWith",s=""[o];a(a.P+a.F*t(35)(o),"String",{startsWith:function(t){var e=i(this,t,o),n=r(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),a=t+"";return s?s.call(e,a,n):e.slice(n,n+a.length)===a}})},{105:105,116:116,34:34,35:35}],249:[function(t,e,n){"use strict";t(106)("strike",function(t){return function(){return t(this,"strike","","")}})},{106:106}],250:[function(t,e,n){"use strict";t(106)("sub",function(t){return function(){return t(this,"sub","","")}})},{106:106}],251:[function(t,e,n){"use strict";t(106)("sup",function(t){return function(){return t(this,"sup","","")}})},{106:106}],252:[function(t,e,n){"use strict";t(109)("trim",function(t){return function(){return t(this,3)}})},{109:109}],253:[function(t,e,n){"use strict";var a=t(41),r=t(42),i=t(30),o=t(34),s=t(92),u=t(66).KEY,p=t(36),c=t(101),l=t(99),f=t(122),d=t(127),h=t(126),m=t(125),g=t(33),v=t(50),b=t(8),y=t(52),x=t(115),_=t(118),w=t(90),k=t(71),S=t(76),E=t(75),P=t(72),C=t(81),A=E.f,O=P.f,T=S.f,R=a.Symbol,M=a.JSON,L=M&&M.stringify,j="prototype",D=d("_hidden"),N=d("toPrimitive"),F={}.propertyIsEnumerable,I=c("symbol-registry"),B=c("symbols"),q=c("op-symbols"),U=Object[j],V="function"==typeof R,G=a.QObject,z=!G||!G[j]||!G[j].findChild,W=i&&p(function(){return 7!=k(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,n){var a=A(U,e);a&&delete U[e],O(t,e,n),a&&t!==U&&O(U,e,a)}:O,H=function(t){var e=B[t]=k(R[j]);return e._k=t,e},Q=V&&"symbol"==typeof R.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof R},K=function(t,e,n){return t===U&&K(q,e,n),b(t),e=_(e,!0),b(n),r(B,e)?(n.enumerable?(r(t,D)&&t[D][e]&&(t[D][e]=!1),n=k(n,{enumerable:w(0,!1)})):(r(t,D)||O(t,D,w(1,{})),t[D][e]=!0),W(t,e,n)):O(t,e,n)},Y=function(t,e){b(t);for(var n,a=g(e=x(e)),r=0,i=a.length;i>r;)K(t,n=a[r++],e[n]);return t},$=function(t,e){return void 0===e?k(t):Y(k(t),e)},J=function(t){var e=F.call(this,t=_(t,!0));return this===U&&r(B,t)&&!r(q,t)?!1:e||!r(this,t)||!r(B,t)||r(this,D)&&this[D][t]?e:!0},X=function(t,e){if(t=x(t),e=_(e,!0),t!==U||!r(B,e)||r(q,e)){var n=A(t,e);return!n||!r(B,e)||r(t,D)&&t[D][e]||(n.enumerable=!0),n}},Z=function(t){for(var e,n=T(x(t)),a=[],i=0;n.length>i;)r(B,e=n[i++])||e==D||e==u||a.push(e);return a},tt=function(t){for(var e,n=t===U,a=T(n?q:x(t)),i=[],o=0;a.length>o;)r(B,e=a[o++])&&(n?r(U,e):!0)&&i.push(B[e]);return i};V||(R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=f(arguments.length>0?arguments[0]:void 0),e=function(n){this===U&&e.call(q,n),r(this,D)&&r(this[D],t)&&(this[D][t]=!1),W(this,t,w(1,n))};return i&&z&&W(U,t,{configurable:!0,set:e}),H(t)},s(R[j],"toString",function(){return this._k}),E.f=X,P.f=K,t(77).f=S.f=Z,t(82).f=J,t(78).f=tt,i&&!t(60)&&s(U,"propertyIsEnumerable",J,!0),h.f=function(t){return H(d(t))}),o(o.G+o.W+o.F*!V,{Symbol:R});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;et.length>nt;)d(et[nt++]);for(var at=C(d.store),rt=0;at.length>rt;)m(at[rt++]);o(o.S+o.F*!V,"Symbol",{"for":function(t){return r(I,t+="")?I[t]:I[t]=R(t)},keyFor:function(t){if(!Q(t))throw TypeError(t+" is not a symbol!");for(var e in I)if(I[e]===t)return e},useSetter:function(){z=!0},useSimple:function(){z=!1}}),o(o.S+o.F*!V,"Object",{create:$,defineProperty:K,defineProperties:Y,getOwnPropertyDescriptor:X,getOwnPropertyNames:Z,getOwnPropertySymbols:tt}),M&&o(o.S+o.F*(!V||p(function(){var t=R();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))})),"JSON",{stringify:function(t){for(var e,n,a=[t],r=1;arguments.length>r;)a.push(arguments[r++]);return n=e=a[1],!y(e)&&void 0===t||Q(t)?void 0:(v(e)||(e=function(t,e){return"function"==typeof n&&(e=n.call(this,t,e)),Q(e)?void 0:e}),a[1]=e,L.apply(M,a))}}),R[j][N]||t(43)(R[j],N,R[j].valueOf),l(R,"Symbol"),l(Math,"Math",!0),l(a.JSON,"JSON",!0)},{101:101,115:115,118:118,122:122,125:125,126:126,127:127,30:30,33:33,34:34,36:36,41:41,42:42,43:43,50:50,52:52,60:60,66:66,71:71,72:72,75:75,76:76,77:77,78:78,8:8,81:81,82:82,90:90,92:92,99:99}],254:[function(t,e,n){"use strict";var a=t(34),r=t(121),i=t(120),o=t(8),s=t(112),u=t(116),p=t(52),c=t(41).ArrayBuffer,l=t(102),f=i.ArrayBuffer,d=i.DataView,h=r.ABV&&c.isView,m=f.prototype.slice,g=r.VIEW,v="ArrayBuffer";a(a.G+a.W+a.F*(c!==f),{ArrayBuffer:f}),a(a.S+a.F*!r.CONSTR,v,{isView:function(t){return h&&h(t)||p(t)&&g in t}}),a(a.P+a.U+a.F*t(36)(function(){return!new f(2).slice(1,void 0).byteLength}),v,{slice:function(t,e){if(void 0!==m&&void 0===e)return m.call(o(this),t);for(var n=o(this).byteLength,a=s(t,n),r=s(void 0===e?n:e,n),i=new(l(this,f))(u(r-a)),p=new d(this),c=new d(i),h=0;r>a;)c.setUint8(h++,p.getUint8(a++));return i}}),t(98)(v)},{102:102,112:112,116:116,120:120,121:121,34:34,36:36,41:41,52:52,8:8,98:98}],255:[function(t,e,n){var a=t(34);a(a.G+a.W+a.F*!t(121).ABV,{DataView:t(120).DataView})},{120:120,121:121,34:34}],256:[function(t,e,n){t(119)("Float32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],257:[function(t,e,n){t(119)("Float64",8,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],258:[function(t,e,n){t(119)("Int16",2,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],259:[function(t,e,n){t(119)("Int32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],260:[function(t,e,n){t(119)("Int8",1,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],261:[function(t,e,n){t(119)("Uint16",2,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],262:[function(t,e,n){t(119)("Uint32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],263:[function(t,e,n){t(119)("Uint8",1,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],264:[function(t,e,n){t(119)("Uint8",1,function(t){return function(e,n,a){return t(this,e,n,a)}},!0)},{119:119}],265:[function(t,e,n){"use strict";var a,r=t(13)(0),i=t(92),o=t(66),s=t(70),u=t(22),p=t(52),c=t(36),l=t(124),f="WeakMap",d=o.getWeak,h=Object.isExtensible,m=u.ufstore,g={},v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},b={get:function(t){if(p(t)){var e=d(t);return e===!0?m(l(this,f)).get(t):e?e[this._i]:void 0}},set:function(t,e){return u.def(l(this,f),t,e)}},y=e.exports=t(23)(f,v,b,u,!0,!0);c(function(){return 7!=(new y).set((Object.freeze||Object)(g),7).get(g)})&&(a=u.getConstructor(v,f),s(a.prototype,b),o.NEED=!0,r(["delete","has","get","set"],function(t){var e=y.prototype,n=e[t];i(e,t,function(e,r){if(p(e)&&!h(e)){this._f||(this._f=new a);var i=this._f[t](e,r);return"set"==t?this:i}return n.call(this,e,r)})}))},{124:124,13:13,22:22,23:23,36:36,52:52,66:66,70:70,92:92}],266:[function(t,e,n){"use strict";var a=t(22),r=t(124),i="WeakSet";t(23)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(r(this,i),t,!0)}},a,!1,!0)},{124:124,22:22,23:23}],267:[function(t,e,n){"use strict";var a=t(34),r=t(39),i=t(117),o=t(116),s=t(4),u=t(16);a(a.P,"Array",{flatMap:function(t){var e,n,a=i(this);return s(t),e=o(a.length),n=u(a,0),r(n,a,a,e,0,1,t,arguments[1]),n}}),t(6)("flatMap")},{116:116,117:117,16:16,34:34,39:39,4:4,6:6}],268:[function(t,e,n){"use strict";var a=t(34),r=t(39),i=t(117),o=t(116),s=t(114),u=t(16);a(a.P,"Array",{flatten:function(){var t=arguments[0],e=i(this),n=o(e.length),a=u(e,0);return r(a,e,e,n,0,void 0===t?1:s(t)),a}}),t(6)("flatten")},{114:114,116:116,117:117,16:16,34:34,39:39,6:6}],269:[function(t,e,n){"use strict";var a=t(34),r=t(12)(!0);a(a.P,"Array",{includes:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(6)("includes")},{12:12,34:34,6:6}],270:[function(t,e,n){var a=t(34),r=t(68)(),i=t(41).process,o="process"==t(19)(i);a(a.G,{asap:function(t){var e=o&&i.domain;r(e?e.bind(t):t)}})},{19:19,34:34,41:41,68:68}],271:[function(t,e,n){var a=t(34),r=t(19);a(a.S,"Error",{isError:function(t){return"Error"===r(t)}})},{19:19,34:34}],272:[function(t,e,n){var a=t(34);a(a.G,{global:t(41)})},{34:34,41:41}],273:[function(t,e,n){t(95)("Map")},{95:95}],274:[function(t,e,n){t(96)("Map")},{96:96}],275:[function(t,e,n){var a=t(34);a(a.P+a.R,"Map",{toJSON:t(21)("Map")})},{21:21,34:34}],276:[function(t,e,n){var a=t(34);a(a.S,"Math",{clamp:function(t,e,n){return Math.min(n,Math.max(e,t))}})},{34:34}],277:[function(t,e,n){var a=t(34);a(a.S,"Math",{DEG_PER_RAD:Math.PI/180})},{34:34}],278:[function(t,e,n){var a=t(34),r=180/Math.PI;a(a.S,"Math",{degrees:function(t){return t*r}})},{34:34}],279:[function(t,e,n){var a=t(34),r=t(64),i=t(62);a(a.S,"Math",{fscale:function(t,e,n,a,o){return i(r(t,e,n,a,o))}})},{34:34,62:62,64:64}],280:[function(t,e,n){var a=t(34);a(a.S,"Math",{iaddh:function(t,e,n,a){var r=t>>>0,i=e>>>0,o=n>>>0;return i+(a>>>0)+((r&o|(r|o)&~(r+o>>>0))>>>31)|0}})},{34:34}],281:[function(t,e,n){var a=t(34);a(a.S,"Math",{imulh:function(t,e){var n=65535,a=+t,r=+e,i=a&n,o=r&n,s=a>>16,u=r>>16,p=(s*o>>>0)+(i*o>>>16);return s*u+(p>>16)+((i*u>>>0)+(p&n)>>16)}})},{34:34}],282:[function(t,e,n){var a=t(34);a(a.S,"Math",{isubh:function(t,e,n,a){var r=t>>>0,i=e>>>0,o=n>>>0;return i-(a>>>0)-((~r&o|~(r^o)&r-o>>>0)>>>31)|0}})},{34:34}],283:[function(t,e,n){var a=t(34);a(a.S,"Math",{RAD_PER_DEG:180/Math.PI})},{34:34}],284:[function(t,e,n){var a=t(34),r=Math.PI/180;a(a.S,"Math",{radians:function(t){return t*r}})},{34:34}],285:[function(t,e,n){var a=t(34);a(a.S,"Math",{scale:t(64)})},{34:34,64:64}],286:[function(t,e,n){var a=t(34);a(a.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},{34:34}],287:[function(t,e,n){var a=t(34);a(a.S,"Math",{umulh:function(t,e){var n=65535,a=+t,r=+e,i=a&n,o=r&n,s=a>>>16,u=r>>>16,p=(s*o>>>0)+(i*o>>>16);return s*u+(p>>>16)+((i*u>>>0)+(p&n)>>>16)}})},{34:34}],288:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineGetter__:function(t,e){o.f(r(this),t,{get:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],289:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineSetter__:function(t,e){o.f(r(this),t,{set:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],290:[function(t,e,n){var a=t(34),r=t(84)(!0);a(a.S,"Object",{entries:function(t){return r(t)}})},{34:34,84:84}],291:[function(t,e,n){var a=t(34),r=t(85),i=t(115),o=t(75),s=t(25);a(a.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,a=i(t),u=o.f,p=r(a),c={},l=0;p.length>l;)n=u(a,e=p[l++]),void 0!==n&&s(c,e,n);return c}})},{115:115,25:25,34:34,75:75,85:85}],292:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupGetter__:function(t){var e,n=r(this),a=i(t,!0);do if(e=s(n,a))return e.get;while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],293:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupSetter__:function(t){var e,n=r(this),a=i(t,!0);do if(e=s(n,a))return e.set;while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],294:[function(t,e,n){var a=t(34),r=t(84)(!1);a(a.S,"Object",{values:function(t){return r(t)}})},{34:34,84:84}],295:[function(t,e,n){"use strict";var a=t(34),r=t(41),i=t(24),o=t(68)(),s=t(127)("observable"),u=t(4),p=t(8),c=t(7),l=t(91),f=t(43),d=t(40),h=d.RETURN,m=function(t){return null==t?void 0:u(t)},g=function(t){var e=t._c;e&&(t._c=void 0,e())},v=function(t){return void 0===t._o},b=function(t){v(t)||(t._o=void 0,g(t))},y=function(t,e){p(t),this._c=void 0,this._o=t,t=new x(this);try{var n=e(t),a=n;null!=n&&("function"==typeof n.unsubscribe?n=function(){a.unsubscribe()}:u(n),this._c=n)}catch(r){return void t.error(r)}v(this)&&g(this)};y.prototype=l({},{unsubscribe:function(){b(this)}});var x=function(t){this._s=t};x.prototype=l({},{next:function(t){var e=this._s;if(!v(e)){var n=e._o;try{var a=m(n.next);if(a)return a.call(n,t)}catch(r){try{b(e)}finally{throw r}}}},error:function(t){var e=this._s;if(v(e))throw t;var n=e._o;e._o=void 0;try{var a=m(n.error);if(!a)throw t;t=a.call(n,t)}catch(r){try{g(e)}finally{throw r}}return g(e),t},complete:function(t){var e=this._s;if(!v(e)){var n=e._o;e._o=void 0;try{var a=m(n.complete);t=a?a.call(n,t):void 0}catch(r){try{g(e)}finally{throw r}}return g(e),t}}});var _=function(t){c(this,_,"Observable","_f")._f=u(t)};l(_.prototype,{subscribe:function(t){return new y(t,this._f)},forEach:function(t){var e=this;return new(i.Promise||r.Promise)(function(n,a){u(t);var r=e.subscribe({next:function(e){try{return t(e)}catch(n){a(n),r.unsubscribe()}},error:a,complete:n})})}}),l(_,{from:function(t){var e="function"==typeof this?this:_,n=m(p(t)[s]);if(n){var a=p(n.call(t));return a.constructor===e?a:new e(function(t){return a.subscribe(t)})}return new e(function(e){var n=!1;return o(function(){if(!n){try{if(d(t,!1,function(t){return e.next(t),n?h:void 0})===h)return}catch(a){if(n)throw a;return void e.error(a)}e.complete()}}),function(){n=!0}})},of:function(){for(var t=0,e=arguments.length,n=Array(e);e>t;)n[t]=arguments[t++];return new("function"==typeof this?this:_)(function(t){var e=!1;return o(function(){if(!e){for(var a=0;a1?arguments[1]:void 0,!1)}})},{107:107,123:123,34:34}],313:[function(t,e,n){"use strict";var a=t(34),r=t(107),i=t(123);a(a.P+a.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(i),"String",{padStart:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{107:107,123:123,34:34}],314:[function(t,e,n){"use strict";t(109)("trimLeft",function(t){return function(){return t(this,1)}},"trimStart")},{109:109}],315:[function(t,e,n){"use strict";t(109)("trimRight",function(t){return function(){return t(this,2)}},"trimEnd")},{109:109}],316:[function(t,e,n){t(125)("asyncIterator")},{125:125}],317:[function(t,e,n){t(125)("observable")},{125:125}],318:[function(t,e,n){var a=t(34);a(a.S,"System",{global:t(41) -})},{34:34,41:41}],319:[function(t,e,n){t(95)("WeakMap")},{95:95}],320:[function(t,e,n){t(96)("WeakMap")},{96:96}],321:[function(t,e,n){t(95)("WeakSet")},{95:95}],322:[function(t,e,n){t(96)("WeakSet")},{96:96}],323:[function(t,e,n){for(var a=t(140),r=t(81),i=t(92),o=t(41),s=t(43),u=t(59),p=t(127),c=p("iterator"),l=p("toStringTag"),f=u.Array,d={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=r(d),m=0;m2,r=a?o.call(arguments,2):!1;return t(a?function(){("function"==typeof e?e:Function(e)).apply(this,r)}:e,n)}};r(r.G+r.B+r.F*s,{setTimeout:u(a.setTimeout),setInterval:u(a.setInterval)})},{123:123,34:34,41:41}],326:[function(t,e,n){t(253),t(190),t(192),t(191),t(194),t(196),t(201),t(195),t(193),t(203),t(202),t(198),t(199),t(197),t(189),t(200),t(204),t(205),t(156),t(158),t(157),t(207),t(206),t(177),t(187),t(188),t(178),t(179),t(180),t(181),t(182),t(183),t(184),t(185),t(186),t(160),t(161),t(162),t(163),t(164),t(165),t(166),t(167),t(168),t(169),t(170),t(171),t(172),t(173),t(174),t(175),t(176),t(240),t(245),t(252),t(243),t(235),t(236),t(241),t(246),t(248),t(231),t(232),t(233),t(234),t(237),t(238),t(239),t(242),t(244),t(247),t(249),t(250),t(251),t(151),t(153),t(152),t(155),t(154),t(139),t(137),t(144),t(141),t(147),t(149),t(136),t(143),t(133),t(148),t(131),t(146),t(145),t(138),t(142),t(130),t(132),t(135),t(134),t(150),t(140),t(223),t(229),t(224),t(225),t(226),t(227),t(228),t(208),t(159),t(230),t(265),t(266),t(254),t(255),t(260),t(263),t(264),t(258),t(261),t(259),t(262),t(256),t(257),t(209),t(210),t(211),t(212),t(213),t(216),t(214),t(215),t(217),t(218),t(219),t(220),t(222),t(221),t(269),t(267),t(268),t(310),t(313),t(312),t(314),t(315),t(311),t(316),t(317),t(291),t(294),t(290),t(288),t(289),t(292),t(293),t(275),t(309),t(274),t(308),t(320),t(322),t(273),t(307),t(319),t(321),t(272),t(318),t(271),t(276),t(277),t(278),t(279),t(280),t(282),t(281),t(283),t(284),t(285),t(287),t(286),t(296),t(297),t(298),t(299),t(301),t(300),t(303),t(302),t(304),t(305),t(306),t(270),t(295),t(325),t(324),t(323),e.exports=t(24)},{130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,188:188,189:189,190:190,191:191,192:192,193:193,194:194,195:195,196:196,197:197,198:198,199:199,200:200,201:201,202:202,203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,216:216,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,24:24,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294,295:295,296:296,297:297,298:298,299:299,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307,308:308,309:309,310:310,311:311,312:312,313:313,314:314,315:315,316:316,317:317,318:318,319:319,320:320,321:321,322:322,323:323,324:324,325:325}],327:[function(t,e,n){!function(t){"use strict";function e(){return c.createDocumentFragment()}function n(t){return c.createElement(t)}function a(t){if(1===t.length)return r(t[0]);for(var n=e(),a=B.call(t),i=0;i-1}}([].indexOf||function(t){for(q=this.length;q--&&this[q]!==t;);return q}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e=u?e(i):document.fonts.load(p(i,i.family),s).then(function(e){1<=e.length?t(i):setTimeout(f,25)},function(){e(i)})};f()}else n(function(){function n(){var e;(e=-1!=g&&-1!=v||-1!=g&&-1!=b||-1!=v&&-1!=b)&&((e=g!=v&&g!=b&&v!=b)||(null===l&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=l&&(g==y&&v==y&&b==y||g==x&&v==x&&b==x||g==_&&v==_&&b==_)),e=!e),e&&(null!==w.parentNode&&w.parentNode.removeChild(w),clearTimeout(k),t(i))}function f(){if((new Date).getTime()-c>=u)null!==w.parentNode&&w.parentNode.removeChild(w),e(i);else{var t=document.hidden;(!0===t||void 0===t)&&(g=d.a.offsetWidth,v=h.a.offsetWidth,b=m.a.offsetWidth,n()),k=setTimeout(f,50)}}var d=new a(s),h=new a(s),m=new a(s),g=-1,v=-1,b=-1,y=-1,x=-1,_=-1,w=document.createElement("div"),k=0;w.dir="ltr",r(d,p(i,"sans-serif")),r(h,p(i,"serif")),r(m,p(i,"monospace")),w.appendChild(d.a),w.appendChild(h.a),w.appendChild(m.a),document.body.appendChild(w),y=d.a.offsetWidth,x=h.a.offsetWidth,_=m.a.offsetWidth,f(),o(d,function(t){g=t,n()}),r(d,p(i,'"'+i.family+'",sans-serif')),o(h,function(t){v=t,n()}),r(h,p(i,'"'+i.family+'",serif')),o(m,function(t){b=t,n()}),r(m,p(i,'"'+i.family+'",monospace'))})})},window.FontFaceObserver=s,window.FontFaceObserver.prototype.check=s.prototype.a,void 0!==e&&(e.exports=window.FontFaceObserver)}()},{}],330:[function(t,e,n){!function(t,n){function a(t,e){var n=t.createElement("p"),a=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function r(){var t=x.elements;return"string"==typeof t?t.split(" "):t}function i(t,e){var n=x.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),x.elements=n+" "+t,c(e)}function o(t){var e=y[t[v]];return e||(e={},b++,t[v]=b,y[b]=e),e}function s(t,e,a){if(e||(e=n),f)return e.createElement(t);a||(a=o(e));var r;return r=a.cache[t]?a.cache[t].cloneNode():g.test(t)?(a.cache[t]=a.createElem(t)).cloneNode():a.createElem(t),!r.canHaveChildren||m.test(t)||r.tagUrn?r:a.frag.appendChild(r)}function u(t,e){if(t||(t=n),f)return t.createDocumentFragment();e=e||o(t);for(var a=e.frag.cloneNode(),i=0,s=r(),u=s.length;u>i;i++)a.createElement(s[i]);return a}function p(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return x.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(x,e.frag)}function c(t){t||(t=n);var e=o(t);return!x.shivCSS||l||e.hasCSS||(e.hasCSS=!!a(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),f||p(t,e),t}var l,f,d="3.7.3-pre",h=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,g=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",l="hidden"in t,f=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){l=!0,f=!0}}();var x={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:d,shivCSS:h.shivCSS!==!1,supportsUnknownElements:f,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:c,createElement:s,createDocumentFragment:u,addElements:i};t.html5=x,c(n),"object"==typeof e&&e.exports&&(e.exports=x)}("undefined"!=typeof window?window:this,document)},{}],331:[function(t,e,n){(function(t){(function(t){!function(t){function e(t,e,n,a){for(var i,o,s=n.slice(),u=r(e,t),p=0,c=s.length;c>p&&(i=s[p],"object"==typeof i?"function"==typeof i.handleEvent&&i.handleEvent(u):i.call(t,u),!u.stoppedImmediatePropagation);p++);return o=!u.stoppedPropagation,a&&o&&t.parentNode?t.parentNode.dispatchEvent(u):!u.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function a(t,e,a){var r=y(e||t,a);v(t,"textContent",n(function(){return r.get.call(this)},function(t){r.set.call(this,t)}))}function r(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!d&&S.test(document.readyState)&&(d=!d,document.detachEvent(h,u),t=document.createEvent("Event"),t.initEvent(m,!0,!0),document.dispatchEvent(t))}function p(t){return function(){return C[t]||document.body&&document.body[t]||0}}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function l(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var f=!0,d=!1,h="onreadystatechange",m="DOMContentLoaded",g="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},b=Object.defineProperties||function(e,n){for(var a in n)if(x.call(n,a))try{v(e,a,n[a])}catch(r){t.console&&console.log(a+" failed on object:",e,r.message)}},y=Object.getOwnPropertyDescriptor,x=Object.prototype.hasOwnProperty,_=t.Element.prototype,w=t.Text.prototype,k=/^[a-z]+$/,S=/loaded|complete/,E={},P=document.createElement("div"),C=document.documentElement,A=C.removeAttribute,O=C.setAttribute,T=function(t){return{enumerable:!0,writable:!0,configurable:!0,value:t}};a(t.HTMLCommentElement.prototype,_,"nodeValue"),a(t.HTMLScriptElement.prototype,null,"text"),a(w,null,"nodeValue"),a(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(y(t.CSSStyleSheet.prototype,"cssText")));var R=/\b\s*alpha\s*\(\s*opacity\s*=\s*(\d+)\s*\)/;v(t.CSSStyleDeclaration.prototype,"opacity",{get:function(){var t=this.filter.match(R);return t?""+t[1]/100:""},set:function(t){this.zoom=1;var e=!1;t=1>t?" alpha(opacity="+Math.round(100*t)+")":"",this.filter=this.filter.replace(R,function(){return e=!0,t}),!e&&t&&(this.filter+=t)}}),b(_,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:T(function(t,n,a){if("function"==typeof n||"object"==typeof n){var r,o,u=this,p="on"+t,c=u[g]||v(u,g,{value:{}})[g],f=c[p]||(c[p]={}),d=f.h||(f.h=[]);if(!x.call(f,"w")){if(f.w=function(t){return t[g]||e(u,l(u,t),d,!1)},!x.call(E,p))if(k.test(t)){try{r=document.createEventObject(),r[g]=!0,9!=u.nodeType&&(null==u.parentNode&&P.appendChild(u),(o=u.getAttribute(p))&&A.call(u,p)),u.fireEvent(p,r),E[p]=!0}catch(h){for(E[p]=!1;P.hasChildNodes();)P.removeChild(P.firstChild)}null!=o&&O.call(u,p,o)}else E[p]=!1;(f.n=E[p])&&u.attachEvent(p,f.w)}i(d,n)<0&&d[a?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}}),dispatchEvent:T(function(t){var n,a=this,r="on"+t.type,i=a[g],o=i&&i[r],s=!!o;return t.target||(t.target=a),s?o.n?a.fireEvent(r,t):e(a,t,o.h,!0):(n=a.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}),removeEventListener:T(function(t,e,n){if("function"==typeof e||"object"==typeof e){var a=this,r="on"+t,o=a[g],s=o&&o[r],u=s&&s.h,p=u?i(u,e):-1;p>-1&&u.splice(p,1)}})}),b(w,{addEventListener:T(_.addEventListener),dispatchEvent:T(_.dispatchEvent),removeEventListener:T(_.removeEventListener)}),b(t.XMLHttpRequest.prototype,{addEventListener:T(function(t,e,n){var a=this,r="on"+t,o=a[g]||v(a,g,{value:{}})[g],s=o[r]||(o[r]={}),u=s.h||(s.h=[]);i(u,e)<0&&(a[r]||(a[r]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),a.dispatchEvent(e)}),u[n?"unshift":"push"](e))}),dispatchEvent:T(function(t){var n=this,a="on"+t.type,r=n[g],i=r&&r[a],o=!!i;return o&&(i.n?n.fireEvent(a,t):e(n,t,i.h,!0))}),removeEventListener:T(_.removeEventListener)});var M=y(Event.prototype,"button").get;b(t.Event.prototype,{bubbles:T(!0),cancelable:T(!0),preventDefault:T(function(){this.cancelable&&(this.returnValue=!1)}),stopPropagation:T(function(){this.stoppedPropagation=!0,this.cancelBubble=!0}),stopImmediatePropagation:T(function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}),initEvent:T(function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}),pageX:{get:function(){return this._pageX||(this._pageX=this.clientX+t.scrollX-(C.clientLeft||0))}},pageY:{get:function(){return this._pageY||(this._pageY=this.clientY+t.scrollY-(C.clientTop||0))}},which:{get:function(){return this.keyCode?this.keyCode:isNaN(this.button)?void 0:this.button+1}},charCode:{get:function(){return this.keyCode&&"keypress"==this.type?this.keyCode:0}},buttons:{get:function(){return M.call(this)}},button:{get:function(){var t=this.buttons;return 1&t?0:2&t?2:4&t?1:void 0}},defaultPrevented:{get:function(){var t,e=this.returnValue;return!(e===t||e)}},relatedTarget:{get:function(){var t=this.type;return"mouseover"===t?this.fromElement:"mouseout"===t?this.toElement:null}}}),b(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:T(function(e,n,a){var r=this;_.addEventListener.call(r,e,n,a),f&&e===m&&!S.test(r.readyState)&&(f=!1,r.attachEvent(h,u),t==top&&!function i(t){try{r.documentElement.doScroll("left"),u()}catch(e){setTimeout(i,50)}}())}),dispatchEvent:T(_.dispatchEvent),removeEventListener:T(_.removeEventListener),createEvent:T(function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e})}),b(t.Window.prototype,{getComputedStyle:T(function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,p=u.style,c=u.currentStyle,l=u.runtimeStyle;return"opacity"==t?p.opacity||"1":(t=("float"===t?"style-float":t).replace(r,i),e=c?c[t]:p[t],n.test(e)&&!a.test(t)&&(o=p.left,s=l&&l.left,s&&(l.left=c.left),p.left="fontSize"===t?"1em":e,e=p.pixelLeft+"px",p.left=o,s&&(l.left=s)),null==e?e:e+""||"auto")},e.prototype.getPropertyValue=function(){return null},function(n,a){return a?new e(n):new t(n)}}()),addEventListener:T(function(n,a,r){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,l(s,t),o,!1)&&void 0}),o=s[u][g]||(s[u][g]=[]),i(o,a)<0&&o[r?"unshift":"push"](a)}),dispatchEvent:T(function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}),removeEventListener:T(function(e,n,a){var r="on"+e,o=(t[r]||Object)[g],s=o?i(o,n):-1;s>-1&&o.splice(s,1)}),pageXOffset:{get:p("scrollLeft")},pageYOffset:{get:p("scrollTop")},scrollX:{get:p("scrollLeft")},scrollY:{get:p("scrollTop")},innerWidth:{get:p("clientWidth")},innerHeight:{get:p("clientHeight")}}),t.HTMLElement=t.Element,function(t,e,n){for(n=0;na;a++)e.appendChild(n[a].cloneNode(!0));return e},n.cloneRange=function(){var t=new e;return t._start=this._start,t._end=this._end,t},n.deleteContents=function(){for(var e=this._start.parentNode,n=t(this._start,this._end),a=0,r=n.length;r>a;a++)e.removeChild(n[a])},n.extractContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),a=0,r=n.length;r>a;a++)e.appendChild(n[a]);return e},n.setEndAfter=function(t){this._end=t},n.setEndBefore=function(t){this._end=t.previousSibling},n.setStartAfter=function(t){this._start=t.nextSibling},n.setStartBefore=function(t){this._start=t}}}()}}(this.window||t)}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],332:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=s)return(0,u["default"])({points:n});for(var l=1;s-1>=l;l++)i.push((0,p.times)(a,(0,p.minus)(n[l],n[l-1])));for(var f=[(0,p.plus)(n[0],c(i[0],i[1]))],l=1;s-2>=l;l++)f.push((0,p.minus)(n[l],(0,p.average)([i[l],i[l-1]])));f.push((0,p.minus)(n[s-1],c(i[s-2],i[s-3])));var d=f[0],h=f[1],m=n[0],g=n[1],v=(e=(0,o["default"])()).moveto.apply(e,r(m)).curveto(d[0],d[1],h[0],h[1],g[0],g[1]);return{path:(0,p.range)(2,s).reduce(function(t,e){var a=f[e],r=n[e];return t.smoothcurveto(a[0],a[1],r[0],r[1])},v),centroid:(0,p.average)(n)}},e.exports=n["default"]},{335:335,336:336,337:337}],333:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t(334),o=a(i),s=t(335),u=1e-5,p=function(t,e){var n=t.map(e),a=n.sort(function(t,e){var n=r(t,2),a=n[0],i=(n[1],r(e,2)),o=i[0];i[1];return a-o}),i=a.length,o=a[0][0],p=a[i-1][0],c=(0,s.minBy)(a,function(t){return t[1]}),l=(0,s.maxBy)(a,function(t){return t[1]});return o==p&&(p+=u),c==l&&(l+=u),{points:a,xmin:o,xmax:p,ymin:c,ymax:l}};n["default"]=function(t){var e=t.data,n=t.xaccessor,a=t.yaccessor,i=t.width,u=t.height,c=t.closed,l=t.min,f=t.max;n||(n=function(t){var e=r(t,2),n=e[0];e[1];return n}),a||(a=function(t){var e=r(t,2),n=(e[0],e[1]);return n});var d=function(t){return[n(t),a(t)]},h=e.map(function(t){return p(t,d)}),m=(0,s.minBy)(h,function(t){return t.xmin}),g=(0,s.maxBy)(h,function(t){return t.xmax}),v=null==l?(0,s.minBy)(h,function(t){return t.ymin}):l,b=null==f?(0,s.maxBy)(h,function(t){return t.ymax}):f;c&&(v=Math.min(v,0),b=Math.max(b,0));var y=c?0:v,x=(0,o["default"])([m,g],[0,i]),_=(0,o["default"])([v,b],[u,0]),w=function(t){var e=r(t,2),n=e[0],a=e[1];return[x(n),_(a)]};return{arranged:h,scale:w,xscale:x,yscale:_,base:y}},e.exports=n["default"]},{334:334,335:335}],334:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t,e){var n=a(t,2),r=n[0],o=n[1],s=a(e,2),u=s[0],p=s[1],c=function(t){return u+(p-u)*(t-r)/(o-r)};return c.inverse=function(){return i([u,p],[r,o])},c};n["default"]=r,e.exports=n["default"]},{}],335:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(t){return t.reduce(function(t,e){return t+e},0)},i=function(t){return t.reduce(function(t,e){return Math.min(t,e)})},o=function(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function(t,e){return t.reduce(function(t,n){return t+e(n)},0)},u=function(t,e){return t.reduce(function(t,n){return Math.min(t,e(n))},1/0)},p=function(t,e){return t.reduce(function(t,n){return Math.max(t,e(n))},-(1/0))},c=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return[r+s,i+u]},l=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return[r-s,i-u]},f=function(t,e){var n=a(e,2),r=n[0],i=n[1];return[t*r,t*i]},d=function(t){var e=a(t,2),n=e[0],r=e[1];return Math.sqrt(n*n+r*r)},h=function(t){return t.reduce(c,[0,0])},m=function(t){return f(1/t.length,t.reduce(c))},g=function(t,e){return f(t,[Math.sin(e),-Math.cos(e)])},v=function(t,e){var n=t||{};for(var a in n){var r=n[a];e[a]=r(e.index,e.item,e.group)}return e},b=function(t,e,n){for(var a=[],r=t;e>r;r++)a.push(r);return n&&a.push(e),a},y=function(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=Object.keys(t)[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var u=o.value,p=t[u];n.push(e(u,p))}}catch(c){r=!0,i=c}finally{ -try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},x=function(t){return y(t,function(t,e){return[t,e]})},_=function(t){return t};n.sum=r,n.min=i,n.max=o,n.sumBy=s,n.minBy=u,n.maxBy=p,n.plus=c,n.minus=l,n.times=f,n.id=_,n.length=d,n.sumVectors=h,n.average=m,n.onCircle=g,n.enhance=v,n.range=b,n.mapObject=y,n.pairs=x,n["default"]={sum:r,min:i,max:o,sumBy:s,minBy:u,maxBy:p,plus:c,minus:l,times:f,id:_,length:d,sumVectors:h,average:m,onCircle:g,enhance:v,range:b,mapObject:y,pairs:x}},{}],336:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t){var e=t||[],n=function(t,e){var n=t.slice(0,t.length);return n.push(e),n},r=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return r===s&&i===u},o=function(t,e){for(var n=t.length;"0"===t.charAt(n-1);)n-=1;return"."===t.charAt(n-1)&&(n-=1),t.substr(0,n)},s=function(t,e){var n=t.toFixed(e);return o(n)},u=function(t){var e=t.command,n=t.params,a=n.map(function(t){return s(t,6)});return e+" "+a.join(" ")},p=function(t,e){var n=t.command,r=t.params,i=a(e,2),o=i[0],s=i[1];switch(n){case"M":return[r[0],r[1]];case"L":return[r[0],r[1]];case"H":return[r[0],s];case"V":return[o,r[0]];case"Z":return null;case"C":return[r[4],r[5]];case"S":return[r[2],r[3]];case"Q":return[r[2],r[3]];case"T":return[r[0],r[1]];case"A":return[r[5],r[6]]}},c=function(t,e){return function(n){var a="object"==typeof n?t.map(function(t){return n[t]}):arguments;return e.apply(null,a)}},l=function(t){return i(n(e,t))};return{moveto:c(["x","y"],function(t,e){return l({command:"M",params:[t,e]})}),lineto:c(["x","y"],function(t,e){return l({command:"L",params:[t,e]})}),hlineto:c(["x"],function(t){return l({command:"H",params:[t]})}),vlineto:c(["y"],function(t){return l({command:"V",params:[t]})}),closepath:function(){return l({command:"Z",params:[]})},curveto:c(["x1","y1","x2","y2","x","y"],function(t,e,n,a,r,i){return l({command:"C",params:[t,e,n,a,r,i]})}),smoothcurveto:c(["x2","y2","x","y"],function(t,e,n,a){return l({command:"S",params:[t,e,n,a]})}),qcurveto:c(["x1","y1","x","y"],function(t,e,n,a){return l({command:"Q",params:[t,e,n,a]})}),smoothqcurveto:c(["x","y"],function(t,e){return l({command:"T",params:[t,e]})}),arc:c(["rx","ry","xrot","largeArcFlag","sweepFlag","x","y"],function(t,e,n,a,r,i,o){return l({command:"A",params:[t,e,n,a,r,i,o]})}),print:function(){return e.map(u).join(" ")},points:function(){var t=[],n=[0,0],a=!0,r=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var u=o.value,c=p(u,n);n=c,c&&t.push(c)}}catch(l){r=!0,i=l}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return t},instructions:function(){return e.slice(0,e.length)},connect:function(t){var e=this.points(),n=e[e.length-1],a=t.points()[0],o=t.instructions().slice(1);return r(n,a)||o.unshift({command:"L",params:a}),i(this.instructions().concat(o))}}};n["default"]=function(){return r()},e.exports=n["default"]},{}],337:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];for(var r,i;i=n.shift();)for(r in i)Mo.call(i,r)&&(t[r]=i[r]);return t}function r(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function i(t){return"[object Array]"===Lo.call(t)}function o(t){return jo.test(Lo.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function p(t){return t&&"[object Object]"===Lo.call(t)}function c(t,e){return t.replace(/%s/g,function(){return e.shift()})}function l(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];throw t=c(t,n),Error(t)}function f(){Mg.DEBUG&&Oo.apply(null,arguments)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),To(t,n)}function h(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),Do[t]||(Do[t]=!0,To(t,n))}function m(){Mg.DEBUG&&d.apply(null,arguments)}function g(){Mg.DEBUG&&h.apply(null,arguments)}function v(t,e,n){var a=b(t,e,n);return a?a[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function x(t){var e,n,a,r,i,o;for(e=t.split("."),(n=zo[e.length])||(n=_(e.length)),i=[],a=function(t,n){return t?"*":e[n]},r=n.length;r--;)o=n[r].map(a).join("."),i.hasOwnProperty(o)||(i.push(o),i[o]=!0);return i}function _(t){var e,n,a,r,i,o,s,u,p="";if(!zo[t]){for(a=[];p.length=i;i+=1){for(n=i.toString(2);n.lengtho;o++)u.push(r(n[o]));a[i]=u}zo[t]=a}return zo[t]}function w(t,e,n,a){var r=t[e];if(!r||!r.equalsOrStartsWith(a)&&r.equalsOrStartsWith(n))return t[e]=r?r.replace(n,a):a,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function S(t){return null==t?t:(Qo.hasOwnProperty(t)||(Qo[t]=new Ko(t)),Qo[t])}function E(t,e){function n(e,n){var a,r,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(a=t.viewmodel.wrapped[n.str],r=a?a.get():t.viewmodel.get(n),o=r?Object.keys(r):null),o&&o.forEach(function(t){"_ractive"===t&&i(r)||e.push(n.join(t))}),e}var a,r,o;for(a=e.str.split("."),o=[$o];r=a.shift();)"*"===r?o=o.reduce(n,[]):o[0]===$o?o[0]=S(r):o=o.map(P(r));return o}function P(t){return function(e){return e.join(t)}}function C(t){return t?t.replace(Wo,".$1"):""}function A(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var a=void 0,r=void 0;if(/\*/.test(e))return r={},E(t,S(C(e))).forEach(function(e){var a=t.viewmodel.get(e);if(!u(a))throw Error(Xo);r[e.str]=a+n}),t.set(r);if(a=t.get(e),!u(a))throw Error(Xo);return t.set(e,+a+n)}function O(t,e){return Jo(this,t,void 0===e?1:+e)}function T(t){this.event=t,this.method="on"+t,this.deprecate=as[t]}function R(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function M(t,e){for(var n=0,a=t.length;a>n;n++)if(t[n]==e)return!0;return!1}function L(t,e){var n;if(!i(t)||!i(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function j(t){return"string"==typeof t?[t]:void 0===t?[]:t}function D(t){return t[t.length-1]}function N(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function F(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function I(t){setTimeout(t,0)}function B(t,e){return function(){for(var n;n=t.shift();)n(e)}}function q(t,e,n,a){var r;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof rs)e.then(n,a);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{r=e.then}catch(i){return void a(i)}if("function"==typeof r){var o,s,u;s=function(e){o||(o=!0,q(t,e,n,a))},u=function(t){o||(o=!0,a(t))};try{r.call(e,s,u)}catch(i){if(!o)return a(i),void(o=!0)}}else n(e)}}function U(t,e,n){var a;return e=C(e),"~/"===e.substr(0,2)?(a=S(e.substring(2)),z(t,a.firstKey,n)):"."===e[0]?(a=V(cs(n),e),a&&z(t,a.firstKey,n)):a=G(t,S(e),n),a}function V(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return S(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),S(n.join("."))}return S(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function G(t,e,n,a){var r,i,o,s,u;if(e.isRoot)return e;for(i=e.firstKey;n;)if(r=n.context,n=n.parent,r&&(s=!0,o=t.viewmodel.get(r),o&&("object"==typeof o||"function"==typeof o)&&i in o))return r.join(e.str);return W(t.viewmodel,i)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,i=S(i),u=G(t.parent,i,n,!0))?(t.viewmodel.map(i,{origin:t.parent.viewmodel,keypath:u}),e):a||s?void 0:(t.viewmodel.set(e,void 0),e)}function z(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=S(e),(n=G(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function H(t){t.teardown()}function Q(t){t.unbind()}function K(t){t.unrender()}function Y(t){t.cancel()}function $(t){t.detach()}function J(t){t.detachNodes()}function X(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function Z(){for(var t,e,n;ds.ractives.length;)e=ds.ractives.pop(),n=e.viewmodel.applyChanges(),n&&vs.fire(e,n);for(tt(),t=0;t=0;i--)r=t._subs[e[i]],r&&(s=vt(t,r,n,a)&&s);if(Gs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=S(u).wildcardMatches(),n&&(n.component=t)}gt(t.parent,e,n,a)}}function vt(t,e,n,a){var r=null,i=!1;n&&!n._noArg&&(a=[n].concat(a)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,a)===!1&&(i=!0);return n&&!n._noArg&&i&&(r=n.original)&&(r.preventDefault&&r.preventDefault(),r.stopPropagation&&r.stopPropagation()),!i}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};zs(this,t,e)}function yt(t){var e;return t=S(C(t)),e=this.viewmodel.get(t,Qs),void 0===e&&this.parent&&!this.isolated&&ls(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function xt(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,_t(this)}function _t(t){Ys.fire(t),t.findAllComponents("*").forEach(function(t){_t(t.instance)})}function wt(t,e,n){var a,r;return t=S(C(t)),a=this.viewmodel.get(t),i(a)&&i(e)?(r=bs.start(this,!0),this.viewmodel.merge(t,a,e,n),bs.end(),r):this.set(t,e,n&&n.complete)}function kt(t,e){var n,a;return n=E(t,e),a={},n.forEach(function(e){a[e.str]=t.get(e.str)}),a}function St(t,e,n,a){var r,i,o;e=S(C(e)),a=a||cu,e.isPattern?(r=new uu(t,e,n,a),t.viewmodel.patternObservers.push(r),i=!0):r=new Zs(t,e,n,a),r.init(a.init),t.viewmodel.register(e,r,i?"patternObservers":"observers"),r.ready=!0;var s={cancel:function(){var n;o||(i?(n=t.viewmodel.patternObservers.indexOf(r),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,r,"patternObservers")):t.viewmodel.unregister(e,r,"observers"),o=!0)}};return t._observers.push(s),s}function Et(t,e,n){var a,r,i,o;if(p(t)){n=e,r=t,a=[];for(t in r)r.hasOwnProperty(t)&&(e=r[t],a.push(this.observe(t,e,n)));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",pu(this,t,e,n);if(i=t.split(" "),1===i.length)return pu(this,t,e,n);for(a=[],o=i.length;o--;)t=i[o],t&&a.push(pu(this,t,e,n));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}function Pt(t,e,n){var a=this.observe(t,function(){e.apply(this,arguments),a.cancel()},{init:!1,defer:n&&n.defer});return a}function Ct(t,e){var n,a=this;if(t)n=t.split(" ").map(du).filter(hu),n.forEach(function(t){var n,r;(n=a._subs[t])&&(e?(r=n.indexOf(e),-1!==r&&n.splice(r,1)):a._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function At(t,e){var n,a,r,i=this;if("object"==typeof t){n=[];for(a in t)t.hasOwnProperty(a)&&n.push(this.on(a,t[a]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return r=t.split(" ").map(du).filter(hu),r.forEach(function(t){(i._subs[t]||(i._subs[t]=[])).push(e)}),{cancel:function(){return i.off(t,e)}}}function Ot(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Tt(t,e,n){var a,r,i,o,s,u,p=[];if(a=Rt(t,e,n),!a)return null;for(r=t.length,s=a.length-2-a[1],i=Math.min(r,a[0]),o=i+a[1],u=0;i>u;u+=1)p.push(u);for(;o>u;u+=1)p.push(-1);for(;r>u;u+=1)p.push(u+s);return 0!==s?p.touchedFrom=a[0]:p.touchedFrom=t.length,p}function Rt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Mt(e,n){var a,r,i,o=this;if(i=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),a=bs.start(this,!0),bs.scheduleTask(function(){return Ru.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Lt(s),e.innerHTML=""}return this.cssId&&Ou.apply(),e&&((r=e.__ractive_instances__)?r.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),bs.end(),this.transitionsEnabled=i,a.then(function(){return Mu.fire(o)})}function Lt(t){t.splice(0,t.length).forEach(H)}function jt(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function Dt(t,e){var n,a,r;return a='[data-ractive-css~="{'+e+'}"]',r=function(t){var e,n,r,i,o,s,u,p=[];for(e=[];n=Iu.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(i=e.map(Ft),u=e.length;u--;)s=i.slice(),r=e[u],s[u]=r.base+a+r.modifiers||"",o=i.slice(),o[u]=a+" "+o[u],p.push(s.join(" "),o.join(" "));return p.join(", ")},n=qu.test(t)?t.replace(qu,a):t.replace(Fu,"").replace(Nu,function(t,e){var n,a;return Bu.test(e)?t:(n=e.split(",").map(Nt),a=n.map(r).join(", ")+" ",t.replace(e,a))})}function Nt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function Ft(t){return t.str}function It(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?l("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Bt(t,e){It(e);var n="function"==typeof t,a="function"==typeof e;return e||n||(e={}),n||a?function(){var r=a?qt(e,this):e,i=n?qt(t,this):t;return Ut(r,i)}:Ut(e,t)}function qt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&l("Data function must return an object"),n.constructor!==Object&&g("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Ut(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function Vt(t){var e=So(Ku);return e.parse=function(e,n){return Gt(e,n||t)},e}function Gt(t,e){if(!Hu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hu(t,e||this.options)}function zt(t,e){var n;if(!Xi){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a