From 1c34479376680f50fd84dfb981b57bc90df07b4d Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Tue, 19 Jan 2016 16:42:48 -0600 Subject: [PATCH] Fix uplink code once and for all Fixes #14733 --- code/datums/mind.dm | 28 +- code/datums/uplink_item.dm | 1050 ---------------- code/game/gamemodes/nuclear/nuclear.dm | 25 +- .../gamemodes/nuclear/nuclear_challenge.dm | 24 +- code/game/gamemodes/traitor/traitor.dm | 61 +- code/game/machinery/alarm.dm | 1 - .../machinery/computer/telecrystalconsoles.dm | 27 +- code/game/objects/items.dm | 2 +- .../game/objects/items/devices/radio/radio.dm | 2 + .../items/weapons/implants/implantuplink.dm | 13 +- .../objects/items/weapons/storage/backpack.dm | 117 +- .../awaymissions/mission_code/snowdin.dm | 2 +- .../friendly/drone/extra_drone_types.dm | 23 +- .../devices => modules/uplink}/uplink.dm | 77 +- code/modules/uplink/uplink_item.dm | 1109 +++++++++++++++++ tgstation.dme | 4 +- tgui/assets/tgui.js | 4 +- tgui/src/interfaces/uplink.ract | 6 +- 18 files changed, 1297 insertions(+), 1278 deletions(-) delete mode 100644 code/datums/uplink_item.dm rename code/{game/objects/items/devices => modules/uplink}/uplink.dm (56%) create mode 100644 code/modules/uplink/uplink_item.dm diff --git a/code/datums/mind.dm b/code/datums/mind.dm index ec8c806dbb3..b1f66c493c0 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -560,16 +560,13 @@ istype(current,/mob/living/carbon/human) ) text = "Uplink: give" - var/obj/item/device/uplink/suplink = find_syndicate_uplink() - var/crystals - if (suplink) - crystals = suplink.uses - if (suplink) + var/obj/item/device/uplink/U = find_syndicate_uplink() + if(U) text += "|take" if (check_rights(R_FUN, 0)) - text += ", [crystals] crystals" + text += ", [U.telecrystals] TC" else - text += ", [crystals] crystals" + text += ", [U.telecrystals] TC" text += "." //hiel grammar out += text @@ -1226,19 +1223,16 @@ memory = null//Remove any memory they may have had. log_admin("[key_name(usr)] removed [current]'s uplink.") if("crystals") - if (check_rights(R_FUN, 0)) - var/obj/item/device/uplink/suplink = find_syndicate_uplink() - var/crystals - if (suplink) - crystals = suplink.uses - crystals = input("Amount of telecrystals for [key]","Syndicate uplink", crystals) as null|num - if (!isnull(crystals)) - if (suplink) - suplink.uses = crystals + if(check_rights(R_FUN, 0)) + var/obj/item/device/uplink/U = find_syndicate_uplink() + if(U) + var/crystals = input("Amount of telecrystals for [key]","Syndicate uplink", U.telecrystals) as null|num + if(!isnull(crystals)) + U.telecrystals = crystals message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") if("uplink") - if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors))) + if(!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors))) usr << "Equipping a syndicate failed!" log_admin("[key_name(usr)] attempted to give [current] an uplink.") diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm deleted file mode 100644 index e19bf99b599..00000000000 --- a/code/datums/uplink_item.dm +++ /dev/null @@ -1,1050 +0,0 @@ -var/list/uplink_items = list() - -/proc/get_uplink_items(var/gamemode_override = null) - // If not already initialized.. - if(!uplink_items.len) - // Fill in the list and order it like this: - // A keyed list, acting as categories, which are lists to the datum. - for(var/item in subtypesof(/datum/uplink_item)) - var/datum/uplink_item/I = new item() - if(!I.item) - continue - - if(!uplink_items[I.category]) - uplink_items[I.category] = list() - uplink_items[I.category][I.name] = I - - //Filtered version - var/list/filtered_uplink_items = list() - for(var/category in uplink_items) - for(var/item in uplink_items[category]) - var/datum/uplink_item/I = uplink_items[category][item] - if(I.gamemodes.len) - if(!gamemode_override && ticker && !(ticker.mode.type in I.gamemodes)) - continue - if(gamemode_override && !(gamemode_override in I.gamemodes)) - continue - if(I.excludefrom.len) - if(!gamemode_override && ticker && (ticker.mode.type in I.excludefrom)) - continue - if(gamemode_override && (gamemode_override in I.excludefrom)) - continue - - if(!filtered_uplink_items[category]) - filtered_uplink_items[category] = list() - filtered_uplink_items[category][item] = I - - return filtered_uplink_items - -// You can change the order of the list by putting datums before/after one another OR -// you can use the last variable to make sure it appears last, well have the category appear last. - -/datum/uplink_item - var/name = "item name" - var/category = "item category" - var/desc = "item description" - var/item = null - var/cost = 0 - var/list/gamemodes = list() // Empty list means it is in all the gamemodes. Otherwise place the gamemode name here. - var/list/excludefrom = list() //Empty list does nothing. Place the name of gamemode you don't want this item to be available in here. This is so you dont have to list EVERY mode to exclude something. - var/surplus = 100 //Chance of being included in the surplus crate (when pick() selects it) - var/refundable = FALSE - -/datum/uplink_item/proc/spawn_item(turf/loc, obj/item/device/uplink/U) - if(item) - U.uses -= max(cost, 0) - U.used_TC += cost - feedback_add_details("traitor_uplink_items_bought", "[item]") - return new item(loc) - -/datum/uplink_item/proc/buy(obj/item/device/uplink/U, mob/user) - - ..() - if(!istype(U)) - return 0 - - if (!user || user.incapacitated()) - return 0 - - // If the uplink's holder is in the user's contents - if ((U.loc in user.contents) || (in_range(U.loc, user) && istype(U.loc.loc, /turf))) - user.set_machine(U) - if(cost > U.uses) - return 0 - - var/obj/I = spawn_item(get_turf(user), U) - - if(istype(I, /obj/item)) - if(ishuman(user)) - var/mob/living/carbon/human/A = user - A.put_in_any_hand_if_possible(I) - - if(istype(I,/obj/item/weapon/storage/box/) && I.contents.len>0) - for(var/atom/o in I) - U.purchase_log += "\icon[o]" - else - U.purchase_log += "\icon[I]" - - U.interact(user) - return 1 - return 0 - -/* -// -// UPLINK ITEMS -// -*/ - -//Operator special offers - -/datum/uplink_item/specoffer - category = "Special Offers" - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/specoffer/c20r - name = "C20r bundle" - desc = "The classic C20r, with two magazines, at discount price. Contains free surplus suppressor." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/c20rbundle - cost = 14//normal price 16 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/specoffer/m90gl - name = "M90gl bundle" - desc = "Premium offer. Pick up the M90gl with a magazine, some grenades, and a pack of cigarettes for a premium discount." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle - cost = 15//normal price 18 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/specoffer/bulldog - name = "Bulldog bundle" - desc = "Optimised for people that want to get up close and personal. Contains the popular Bulldog shotgun, a two drums of ammunition, and an elite hardsuit." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/bulldogbundle - cost = 16//normal price 20 THATS TWO FREE DRUMS - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/specoffer/medical - name = "Medical bundle" - desc = "Support your fellow operatives with this medical bundle. Contains a Donksoft machine gun, a box of ammo, and a pair of magboots to rescue your friends in no-gravity environments." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle - cost = 15//normal price 20 THATS A FREE MAGBOOT AND a box OF RIOT DART LMG - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/specoffer/sniper - name = "Sniper bundle" - desc = "Contains a collapsed sniper rifle in an expensive carrying case, a hollowpoint haemorrhage magazine, a soporific knockout magazine, a free surplus supressor, and a worn out suit and tie." - item = /obj/item/weapon/storage/briefcase/sniperbundle - cost = 20//26 normal cost. suppressor is excluded from price. - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/specoffer/chemical - name = "Tiger Cooperation Chemical Bioterror bundle" - desc = "Contains Bioterror spray, Bioterror grenade, chemicals, syringe gun, box of syringes, Donksoft assault rifle, and some darts. Warning: Seal suit and equip internals before use." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/med/bioterrorbundle - cost = 30 //normal price 42 biggest saving here - gamemodes = list(/datum/game_mode/nuclear) - -// DANGEROUS WEAPONS - -/datum/uplink_item/dangerous - category = "Conspicuous and Dangerous Weapons" - -/datum/uplink_item/dangerous/pistol - name = "FK-69 Pistol" - desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible with suppressors." - item = /obj/item/weapon/gun/projectile/automatic/pistol - cost = 9 - -/datum/uplink_item/dangerous/revolver - name = "Syndicate Revolver" - desc = "A brutally simple syndicate revolver that fires .357 Magnum cartridges and has 7 chambers." - item = /obj/item/weapon/gun/projectile/revolver - cost = 13 - surplus = 50 - -/datum/uplink_item/dangerous/shotgun - name = "Bulldog Shotgun" - desc = "A fully-loaded semi-automatic drum fed shotgun. Compatiable with all 12 gauge rounds. Designed for close quarter combat use." - item = /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog - cost = 8 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 40 - -/datum/uplink_item/dangerous/smg - name = "C-20r Submachine Gun" - desc = "A fully-loaded Scarborough Arms bullpup submachine gun that fires .45 rounds with a 20-round magazine and is compatible with suppressors." - item = /obj/item/weapon/gun/projectile/automatic/c20r - cost = 10 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 40 - -/datum/uplink_item/dangerous/smg/unrestricted - item = /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted - gamemodes = list(/datum/game_mode/gang) - -/datum/uplink_item/dangerous/carbine - name = "M-90gl Carbine" - desc = "A fully-loaded three-round burst carbine that uses 30-round 5.56mm magazines with a togglable underslung 40mm grenade launcher." - item = /obj/item/weapon/gun/projectile/automatic/m90 - cost = 12 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 50 - -/datum/uplink_item/dangerous/carbine/unrestricted - item = /obj/item/weapon/gun/projectile/automatic/m90/unrestricted - gamemodes = list(/datum/game_mode/gang) - -/datum/uplink_item/dangerous/machinegun - name = "L6 Squad Automatic Weapon" - desc = "A fully-loaded Aussec Armoury belt-fed machine gun. This deadly weapon has a massive 50-round magazine of devastating 7.62x51mm ammunition." - item = /obj/item/weapon/gun/projectile/automatic/l6_saw - cost = 23 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/dangerous/crossbow - name = "Miniature Energy Crossbow" - desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag unnoticed. It will synthesize and fire bolts tipped with a paralyzing toxin that will \ - briefly stun targets and cause them to slur as if inebriated. It can produce an infinite amount of bolts, but must be manually recharged with each shot." - item = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow - cost = 12 - excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - surplus = 50 - -/datum/uplink_item/dangerous/flamethrower - name = "Flamethrower" - desc = "A flamethrower, fueled by a portion of highly flammable biotoxins stolen previously from Nanotrasen stations. Make a statement by roasting the filth in their own greed. Use with caution." - item = /obj/item/weapon/flamethrower/full/tank - cost = 4 - gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - surplus = 40 - -/datum/uplink_item/dangerous/sword - name = "Energy Sword" - desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise. One can combine two \ - energy swords to create a double energy sword, which must be wielded in two hands but is more robust and deflects all energy projectiles." - item = /obj/item/weapon/melee/energy/sword/saber - cost = 8 - -/datum/uplink_item/dangerous/emp - name = "EMP Kit" - desc = "A box that contains two EMP grenades, an EMP implant and a short ranged recharging device disguised as a flashlight. Useful to disrupt communication and silicon lifeforms." - item = /obj/item/weapon/storage/box/syndie_kit/emp - cost = 5 - -/datum/uplink_item/dangerous/syndicate_minibomb - name = "Syndicate Minibomb" - desc = "The minibomb is a grenade with a five-second fuse. Upon detonation, it will create a small hull breach in addition to dealing high amounts of damage to nearby personnel." - item = /obj/item/weapon/grenade/syndieminibomb - cost = 6 - -/datum/uplink_item/dangerous/foamsmg - name = "Toy Submachine Gun" - desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." - item = /obj/item/weapon/gun/projectile/automatic/c20r/toy - cost = 5 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/dangerous/foammachinegun - name = "Toy Machine Gun" - desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating riot grade darts, that can briefly incapacitate someone in just one volley." - item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy - cost = 10 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/dangerous/viscerators - name = "Viscerator Delivery Grenade" - desc = "A unique grenade that deploys a swarm of viscerators upon activation, which will chase down and shred any non-operatives in the area." - item = /obj/item/weapon/grenade/spawnergrenade/manhacks - cost = 5 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 35 - -/datum/uplink_item/dangerous/bioterrorfoam - name = "Crowd control chemical foam grenade" - desc = "A powerful chemical foam grenade which creates a deadly torrent of foam that will mute, blind, confuse, mutate, and irritate carbon lifeforms. Specially brewed by Tiger Cooperative chemical weapons specialists using additional spore toxin. Ensure suit is sealed before use." - item = /obj/item/weapon/grenade/chem_grenade/bioterrorfoam - cost = 5 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 35 - -/datum/uplink_item/dangerous/bioterror - name = "Biohazardous Chemical Sprayer" - desc = "A chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger Cooperative, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \ - Use with extreme caution, to prevent exposure to yourself and your fellow operatives." - item = /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror - cost = 20 - gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - surplus = 0 - -/datum/uplink_item/stealthy_weapons/operator_virus_grenade - name = "Fungal Tuberculosis grenade" - desc = "A primed bio-grenade packed into a compact box. Comes with five Bio Virus Antidote Kit (BVAK) autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing the BVAK solution." - item = /obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade - cost = 12 - surplus = 35 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/gygax - name = "Gygax Exosuit" - desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent for hit-and-run style attacks. \ - This model lacks a method of space propulsion, and therefore it is advised to repair the mothership's teleporter if you wish to make use of it." - item = /obj/mecha/combat/gygax/dark/loaded - cost = 80 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/dangerous/mauler - name = "Mauler Exosuit" - desc = "A massive and incredibly deadly Syndicate exosuit. Features long-range targetting, thrust vectoring, and deployable smoke." - item = /obj/mecha/combat/marauder/mauler/loaded - cost = 140 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/dangerous/reinforcement/syndieborg - name = "Syndicate Cyborg" - desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel." - item = /obj/item/weapon/antag_spawner/nuke_ops/borg_tele - cost = 80 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/dangerous/reinforcement - name = "Reinforcements" - desc = "Call in an additional team member. They won't come with any gear, so you'll have to save some telecrystals to arm them as well." - item = /obj/item/weapon/antag_spawner/nuke_ops - cost = 25 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - refundable = TRUE - -/datum/uplink_item/dangerous/guardian - name = "Holoparasites" - desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an organic host as a home base and source of fuel." - item = /obj/item/weapon/storage/box/syndie_kit/guardian - excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - cost = 12 - -/datum/uplink_item/dangerous/sniper - name = "Sniper Rifle" - desc = "Ranged fury, syndicate style. guaranteed to cause shock and awe or your TC back!" - item = /obj/item/weapon/gun/projectile/sniper_rifle/syndicate - cost = 16 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 25 - - -// AMMUNITION - -/datum/uplink_item/ammo - category = "Ammunition" - surplus = 40 - -/datum/uplink_item/ammo/pistol - name = "Handgun Magazine - 10mm" - desc = "An additional 8-round 10mm magazine for use in the syndicate pistol. These subsonic rounds are dirt cheap but are half as effective as .357 rounds." - item = /obj/item/ammo_box/magazine/m10mm - cost = 1 - -/datum/uplink_item/ammo/revolver - name = "Speed Loader - .357" - desc = "A speed loader that contains seven additional .357 Magnum rounds for the syndicate revolver. For when you really need a lot of things dead." - item = /obj/item/ammo_box/a357 - cost = 4 - -/datum/uplink_item/ammo/smg - name = "SMG Magazine - .45" - desc = "An additional 20-round .45 magazine for use in the C-20r submachine gun. These bullets pack a lot of punch that can knock most targets down, but do limited overall damage." - item = /obj/item/ammo_box/magazine/smgm45 - cost = 3 - gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - -/datum/uplink_item/ammo/smgammo - name = "Ammo Duffelbag - C20r Ammo Grab Bag" - desc = "A duffelbag filled with C20r to kit out an entire team, at a discounted price." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg - cost = 20 //get about 2 mags for free this shit is imba as fuck Normal price 27 - gamemodes = list(/datum/game_mode/nuclear) - - -/datum/uplink_item/ammo/ammobag - name = "Ammo Duffelbag - Shotgun Ammo Grab Bag" - desc = "A duffelbag filled with Bulldog ammo to kit out an entire team, at a discounted price." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded - cost = 12 //bulk buyer's discount. Very useful if you're buying a mech and dont have TC left to buy people non-shotgun guns - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/bullslug - name = "Drum Magazine - 12g Slugs" - desc = "An additional 8-round slug magazine for use in the Bulldog shotgun. Now 8 times less likely to shoot your pals." - item = /obj/item/ammo_box/magazine/m12g - cost = 2 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/bullbuck - name = "Drum Magazine - 12g Buckshot" - desc = "An additional 8-round buckshot magazine for use in the Bulldog shotgun. Front towards enemy." - item = /obj/item/ammo_box/magazine/m12g/buckshot - cost = 2 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/bullstun - name = "Drum Magazine - 12g Stun Slug" - desc = "An alternative 8-round stun slug magazine for use in the Bulldog shotgun. Saying that they're completely non-lethal would be lying." - item = /obj/item/ammo_box/magazine/m12g/stun - cost = 3 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/bulldragon - name = "Drum Magazine - 12g Dragon's Breath" - desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. I'm a fire starter, twisted fire starter!" - item = /obj/item/ammo_box/magazine/m12g/dragon - cost = 2 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/bioterror - name = "Box of Bioterror Syringes" - desc = "A box full of preloaded syringes, containing various chemicals that seize up the victim's motor and broca systems, making it impossible for them to move or speak for some time." - item = /obj/item/weapon/storage/box/syndie_kit/bioterror - cost = 6 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/carbine - name = "Toploader Magazine - 5.56" - desc = "An additional 30-round 5.56 magazine for use in the M-90gl carbine. These bullets don't have the punch to knock most targets down, but dish out higher overall damage." - item = /obj/item/ammo_box/magazine/m556 - cost = 4 - gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - -/datum/uplink_item/ammo/a40mm - name = "Ammo Box - 40mm grenades" - desc = "A box of 4 additional 40mm HE grenades for use the M-90gl's underbarrel grenade launcher. Your teammates will thank you to not shoot these down small hallways." - item = /obj/item/ammo_box/a40mm - cost = 5 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/fireteam - name = "Ammo Duffelbag - Fireteam Ammo Grab Bag" - desc = "A duffelbag filled with ammo to kit out a fireteam, contains four C20r magazines, two M90gl magazines, a box of 40mm grenades, and sniper ammunition at a discounted price." //M90gl ammo bag is too imba. fuck that. - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/fireteam - cost = 24//you get 4 grenades for free. Normal price 29 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/machinegun - name = "Box Magazine - 7.62x51mm" - desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW machinegun. By the time you need to use this, you'll already be on a pile of corpses." - item = /obj/item/ammo_box/magazine/m762 - cost = 6 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/ammo/machinegun/bleeding - name = "Box Magazine - Bleeding 7.62x51mm" - desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW machinegun equipped with special properties to induce internal bleeding on targets." - item = /obj/item/ammo_box/magazine/m762/bleeding - -/datum/uplink_item/ammo/machinegun/hollow - name = "Box Magazine - Hollow 7.62x51mm" - desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW machinegun equipped with hollow-tips to help with the unarmored masses of crew." - item = /obj/item/ammo_box/magazine/m762/hollow - -/datum/uplink_item/ammo/machinegun/ap - name = "Box Magazine - Armor Penetrating 7.62x51mm" - desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW machinegun equipped with special properties to puncture even the most durable armor." - item = /obj/item/ammo_box/magazine/m762/ap - -/datum/uplink_item/ammo/machinegun/incen - name = "Box Magazine - Incendiary 7.62x51mm" - desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW machinegun, tipped with a special flammable mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn." - item = /obj/item/ammo_box/magazine/m762/incen - -/datum/uplink_item/ammo/toydarts //This used to only be for nuke ops, but had the cost lowered and made available to traitors because >a box of foam darts is more expensive than four carbine magazines - name = "Box of Riot Darts" - desc = "A box of 40 Donksoft foam riot darts, for reloading any compatible foam dart gun. Don't forget to share!" - item = /obj/item/ammo_box/foambox/riot - cost = 2 - surplus = 0 - -/datum/uplink_item/ammo/sniper - name = "Sniper Magazine - .50" - desc = "An additional 6-round .50 magazine for use in the syndicate sniper rifle." - item = /obj/item/ammo_box/magazine/sniper_rounds - cost = 4 //70dmg rounds are no joke - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/sniper/soporific - name = "Sniper Magazine - Soporific Rounds" - desc = "A 3-round magazine of soporific ammo designed for use in the syndicate sniper rifle, put your enemies to sleep today!" - item = /obj/item/ammo_box/magazine/sniper_rounds/soporific - cost = 6 - -/datum/uplink_item/ammo/sniper/haemorrhage - name = "Sniper Magazine - Haemorrhage Rounds" - desc = "A 5-round magazine of haemorrhage ammo designed for use in the syndicate sniper rifle, causes heavy bleeding in the target." - item = /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage - -/datum/uplink_item/ammo/sniper/penetrator - name = "Sniper Magazine - Penetrator Rounds" - desc = "A 5-round magazine of penetrator ammo designed for use in the syndicate sniper rifle. Can pierce walls and multiple enemies." - item = /obj/item/ammo_box/magazine/sniper_rounds/penetrator - cost = 5 - -/datum/uplink_item/ammo/sniper/accelerator - name = "Sniper Magazine - Accelerator Rounds" - desc = "A 5-round magazine of accelerator ammo designed for use in the syndicate sniper rifle. The shot is weak at close range, but gains more power the farther it flies." - item = /obj/item/ammo_box/magazine/sniper_rounds/accelerator - cost = 4 - -// STEALTHY WEAPONS - -/datum/uplink_item/stealthy_weapons - category = "Stealthy and Inconspicuous Weapons" - - -/datum/uplink_item/stealthy_weapons/throwingstars - name = "Box of Throwing Stars" - desc = "A box of shurikens from ancient Earth martial arts. They are highly effective throwing weapons, and will embed into limbs when possible." - item = /obj/item/weapon/storage/box/throwing_stars - cost = 6 - -/datum/uplink_item/stealthy_weapons/edagger - name = "Energy Dagger" - desc = "A dagger made of energy that looks and functions as a pen when off." - item = /obj/item/weapon/pen/edagger - cost = 2 - -/datum/uplink_item/stealthy_weapons/foampistol - name = "Toy Gun with Riot Darts" - desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade darts effective at incapacitating a target." - item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot - cost = 3 - surplus = 10 - excludefrom = list(/datum/game_mode/gang) - -/datum/uplink_item/stealthy_weapons/sleepy_pen - name = "Sleepy Pen" - desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a strong anesthetic and a chemical that prevents the target from speaking. \ - The pen holds one dose of the mixture, and cannot be refilled. Note that before the target falls asleep, they will be able to move and act." - item = /obj/item/weapon/pen/sleepy - cost = 4 - excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - -/datum/uplink_item/stealthy_weapons/soap - name = "Syndicate Soap" - desc = "A sinister-looking surfactant used to clean blood stains to hide murders and prevent DNA analysis. You can also drop it underfoot to slip people." - item = /obj/item/weapon/soap/syndie - cost = 1 - surplus = 50 - -/datum/uplink_item/stealthy_weapons/traitor_virus_kit - name = "Virus Kit" - desc = "An active fungal pathogen in a sterile, compact box. Comes with one Bio Virus Antidote Kit (BVAK) autoinjector for rapid application on up to two targets each, a syringe, and a bottle containing the BVAK solution." - item = /obj/item/weapon/storage/box/syndie_kit/tuberculosiskit - cost = 20 //because nobody knows jack shit about virology - surplus = 50 - excludefrom = list(/datum/game_mode/nuclear) - -/datum/uplink_item/stealthy_weapons/traitor_chem_bottle - name = "Poison Kit" - desc = "An assortment of deadly chemicals packed into a compact box. Comes with a syringe for more precise application." - item = /obj/item/weapon/storage/box/syndie_kit/chemical - cost = 6 - surplus = 50 - -/datum/uplink_item/stealthy_weapons/dart_pistol - name = "Dart Pistol" - desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any space a small item can." - item = /obj/item/weapon/gun/syringe/syndicate - cost = 4 - surplus = 50 //High chance of surplus due to poison kit also having a high chance - -/datum/uplink_item/stealthy_weapons/detomatix - name = "Detomatix PDA Cartridge" - desc = "When inserted into a personal digital assistant, this cartridge gives you four opportunities to detonate PDAs of crewmembers who have their message feature enabled. \ - The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer. It has a chance to detonate your PDA." - item = /obj/item/weapon/cartridge/syndicate - cost = 6 - -/datum/uplink_item/stealthy_weapons/suppressor - name = "Universal Suppressor" - desc = "Fitted for use on any small caliber weapon with a threaded barrel, this suppressor will silence the shots of the weapon for increased stealth and superior ambushing capability." - item = /obj/item/weapon/suppressor - cost = 3 - surplus = 10 - -/datum/uplink_item/stealthy_weapons/pizza_bomb - name = "Pizza Bomb" - desc = "A pizza box with a bomb taped inside it. The timer needs to be set by opening the box; afterwards, opening the box again will trigger the detonation." - item = /obj/item/device/pizza_bomb - cost = 6 - surplus = 8 - -/datum/uplink_item/stealthy_weapons/dehy_carp - name = "Dehydrated Space Carp" - desc = "Looks like a plush toy carp, but just add water and it becomes a real-life space carp! Activate in your hand before use so it knows not to kill you." - item = /obj/item/toy/carpplushie/dehy_carp - cost = 1 - -/datum/uplink_item/stealthy_weapons/door_charge - name = "Explosive Airlock Charge" - desc = "A small, easily concealable device. It can be applied to an open airlock panel, and the next person to open that airlock will be knocked down in an explosion. The airlock's maintenance panel will also be destroyed by this." - item = /obj/item/device/doorCharge - cost = 2 - surplus = 10 - excludefrom = list(/datum/game_mode/nuclear) - -// STEALTHY TOOLS - -/datum/uplink_item/stealthy_tools - category = "Stealth and Camouflage Items" - -/datum/uplink_item/stealthy_tools/chameleon_jumpsuit - name = "Chameleon Jumpsuit" - desc = "A jumpsuit used to imitate the uniforms of Nanotrasen crewmembers. It can change form at any time to resemble another jumpsuit. May react unpredictably to electromagnetic disruptions." - item = /obj/item/clothing/under/chameleon - cost = 2 - -/datum/uplink_item/stealthy_tools/chameleon_stamp - name = "Chameleon Stamp" - desc = "A stamp that can be activated to imitate an official Nanotrasen Stamp™. The disguised stamp will work exactly like the real stamp and will allow you to forge false documents to gain access or equipment; \ - it can also be used in a washing machine to forge clothing." - item = /obj/item/weapon/stamp/chameleon - cost = 1 - surplus = 35 - -/datum/uplink_item/stealthy_tools/syndigaloshes - name = "No-Slip Brown Shoes" - desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. They do not work on heavily lubricated surfaces." - item = /obj/item/clothing/shoes/sneakers/syndigaloshes - cost = 2 - excludefrom = list(/datum/game_mode/nuclear) - -/datum/uplink_item/stealthy_tools/syndigaloshes/nuke - name = "Tactical No-Slip Brown Shoes" - desc = "These allow you to run on wet floors. They do not work on lubricated surfaces, but the manufacturer guarantees they're somehow better than the normal ones." - cost = 4 //but they aren't - gamemodes = list(/datum/game_mode/nuclear) - excludefrom = list() - -/datum/uplink_item/stealthy_tools/agent_card - name = "Agent Identification Card" - desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access from other identification cards. The access is cumulative, so scanning one card does not erase the access gained from another. \ - In addition, they can be forged to display a new assignment and name. This can be done an unlimited amount of times. Some Syndicate areas can only be accessed with these cards." - item = /obj/item/weapon/card/id/syndicate - cost = 2 - -/datum/uplink_item/stealthy_tools/voice_changer - name = "Voice Changer" - item = /obj/item/clothing/mask/gas/voice - desc = "A conspicuous gas mask that mimics the voice named on your identification card. It can be toggled on and off." - cost = 3 - -/datum/uplink_item/stealthy_tools/chameleon_proj - name = "Chameleon Projector" - desc = "Projects an image across a user, disguising them as an object scanned with it, as long as they don't move the projector from their hand. Disguised users move slowly, and projectiles pass over them." - item = /obj/item/device/chameleon - cost = 7 - excludefrom = list(/datum/game_mode/gang) - -/datum/uplink_item/stealthy_tools/camera_bug - name = "Camera Bug" - desc = "Enables you to view all cameras on the network and track a target. Bugging cameras allows you to disable them remotely." - item = /obj/item/device/camera_bug - cost = 1 - surplus = 90 - -/datum/uplink_item/stealthy_tools/smugglersatchel - name = "Smuggler's Satchel" - desc = "This satchel is thin enough to be hidden in the gap between plating and tiling; great for stashing your stolen goods. Comes with a crowbar and a floor tile inside." - item = /obj/item/weapon/storage/backpack/satchel_flat - cost = 2 - surplus = 30 - -/datum/uplink_item/stealthy_tools/stimpack - name = "Stimpack" - desc = "Stimpacks, the tool of many great heroes, make you nearly immune to stuns and knockdowns for about 5 minutes after injection." - item = /obj/item/weapon/reagent_containers/syringe/stimulants - cost = 5 - surplus = 90 - -/datum/uplink_item/stealthy_tools/mulligan - name = "Mulligan" - desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity and appearance." - item = /obj/item/weapon/reagent_containers/syringe/mulligan - cost = 4 - excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - surplus = 30 - -// DEVICE AND TOOLS - -/datum/uplink_item/device_tools - category = "Devices and Tools" - -/datum/uplink_item/device_tools/emag - name = "Cryptographic Sequencer" - desc = "The cryptographic sequencer, or emag, is a small card that unlocks hidden functions in electronic devices, subverts intended functions, and characteristically breaks security mechanisms." - item = /obj/item/weapon/card/emag - cost = 6 - excludefrom = list(/datum/game_mode/gang) - -/datum/uplink_item/device_tools/toolbox - name = "Full Syndicate Toolbox" - desc = "The syndicate toolbox is a suspicious black and red. It comes loaded with a full tool set including a multitool and combat gloves that are resistant to shocks and heat." - item = /obj/item/weapon/storage/toolbox/syndicate - cost = 1 - -/datum/uplink_item/device_tools/surgerybag - name = "Syndicate Surgery Dufflebag" - desc = "The Syndicate surgery dufflebag is a toolkit containing all surgery tools, surgical drapes, a Syndicate brand MMI, a straitjacket, and a muzzle." - item = /obj/item/weapon/storage/backpack/dufflebag/syndie/surgery - cost = 4 - -/datum/uplink_item/device_tools/military_belt - name = "Military Belt" - desc = "A robust seven-slot red belt that is capable of holding all items that can fit into it." - item = /obj/item/weapon/storage/belt/military - cost = 3 - excludefrom = list(/datum/game_mode/nuclear) - -/datum/uplink_item/device_tools/medkit - name = "Syndicate Combat Medic Kit" - desc = "This first aid kit is a suspicious brown and red. Included is a combat stimulant injector for rapid healing, a medical HUD for quick identification of injured personnel, \ - and other supplies helpful for a field medic." - item = /obj/item/weapon/storage/firstaid/tactical - cost = 9 - gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - - -/datum/uplink_item/device_tools/space_suit - name = "Syndicate Space Suit" - desc = "The red and black syndicate space suit is less encumbering than Nanotrasen variants, fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit sightings." - item = /obj/item/weapon/storage/box/syndie_kit/space - cost = 4 - excludefrom = list(/datum/game_mode/gang) - -/datum/uplink_item/device_tools/hardsuit - name = "Blood-Red Hardsuit" - desc = "The feared suit of a syndicate nuclear agent. Features slightly better armoring and a built in jetpack that runs off standard atmospheric tanks. \ - When the built in helmet is deployed your identity will be protected, even in death, as the suit cannot be removed by outside forces. Toggling the suit into combat mode \ - will allow you all the mobility of a loose fitting uniform without sacrificing armoring. Additionally the suit is collapsible, small enough to fit within a backpack. \ - Nanotrasen crewmembers are trained to report red space suit sightings; these suits in particular are known to drive employees into a panic." - item = /obj/item/clothing/suit/space/hardsuit/syndi - cost = 8 - excludefrom = list(/datum/game_mode/gang) - -/datum/uplink_item/device_tools/elite_hardsuit - name = "Elite Syndicate Hardsuit" - desc = "The elite Syndicate hardsuit is worn by only the best nuclear agents. Features much better armoring and complete fireproofing, as well as a built in jetpack. \ - When the built in helmet is deployed your identity will be protected, even in death, as the suit cannot be removed by outside forces. Toggling the suit into combat mode \ - will allow you all the mobility of a loose fitting uniform without sacrificing armoring. Additionally the suit is collapsible, small enough to fit within a backpack. \ - Nanotrasen crewmembers are trained to report red space suit sightings; these suits in particular are known to drive employees into a panic." - item = /obj/item/clothing/suit/space/hardsuit/syndi/elite - cost = 8 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/shielded_hardsuit - name = "Shielded Hardsuit" - desc = "An advanced hardsuit with built in energy shielding. The shields will rapidly recharge when not under fire." - item = /obj/item/clothing/suit/space/hardsuit/shielded/syndi - cost = 30 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/device_tools/thermal - name = "Thermal Imaging Glasses" - desc = "These goggles can be turned to resemble common eyewears throughout the station. \ - They allow you to see organisms through walls by capturing the upper portion of the infrared light spectrum, emitted as heat and light by objects. \ - Hotter objects, such as warm bodies, cybernetic organisms and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks." //THEN WHY CANT THEY SEE PLASMA FIRES???? - item = /obj/item/clothing/glasses/thermal/syndi - cost = 4 - -/datum/uplink_item/device_tools/binary - name = "Binary Translator Key" - desc = "A key that, when inserted into a radio headset, allows you to listen to and talk with silicon-based lifeforms, such as AI units and cyborgs, over their private binary channel. Caution should \ - be taken while doing this, as unless they are allied with you, they are programmed to report such intrusions." - item = /obj/item/device/encryptionkey/binary - cost = 5 - surplus = 75 - -/datum/uplink_item/device_tools/encryptionkey - name = "Syndicate Encryption Key" - desc = "A key that, when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel with other agents that have the same \ - key." - item = /obj/item/device/encryptionkey/syndicate - cost = 2 //Nowhere near as useful as the Binary Key! - surplus = 75 - -/datum/uplink_item/device_tools/ai_detector - name = "Artificial Intelligence Detector" // changed name in case newfriends thought it detected disguised ai's - desc = "A functional multitool that turns red when it detects an artificial intelligence watching it or its holder. Knowing when an artificial intelligence is watching you is useful for knowing when to maintain cover." - item = /obj/item/device/multitool/ai_detect - cost = 1 - -/datum/uplink_item/device_tools/hacked_module - name = "Hacked AI Law Upload Module" - desc = "When used with an upload console, this module allows you to upload priority laws to an artificial intelligence. Be careful with their wording, as artificial intelligences may look for loopholes to exploit." - item = /obj/item/weapon/aiModule/syndicate - cost = 14 - -/datum/uplink_item/device_tools/magboots - name = "Blood-Red Magboots" - desc = "A pair of magnetic boots with a Syndicate paintjob that assist with freer movement in space or on-station during gravitational generator failures. \ - These reverse-engineered knockoffs of Nanotrasen's 'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety." - item = /obj/item/clothing/shoes/magboots/syndie - cost = 3 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/device_tools/c4 - name = "Composition C-4" - desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaler to its wiring to make it remotely detonable. \ - It has a modifiable timer with a minimum setting of 10 seconds." - item = /obj/item/weapon/c4 - cost = 1 - -/datum/uplink_item/device_tools/powersink - name = "Power Sink" - desc = "When screwed to wiring attached to a power grid and activated, this large device places excessive load on the grid, causing a stationwide blackout. The sink is large and cannot be stored in \ - most traditional bags and boxes." - item = /obj/item/device/powersink - cost = 10 - -/datum/uplink_item/device_tools/singularity_beacon - name = "Singularity Beacon" - desc = "When screwed to wiring attached to an electric grid and activated, this large device pulls any active gravitational singularities towards it. \ - This will not work when the singularity is still in containment. A singularity beacon can cause catastrophic damage to a space station, \ - leading to an emergency evacuation. Because of its size, it cannot be carried. Ordering this sends you a small beacon that will teleport the larger beacon to your location upon activation." - item = /obj/item/device/sbeacondrop - cost = 14 - excludefrom = list(/datum/game_mode/gang) - -/datum/uplink_item/device_tools/syndicate_bomb - name = "Syndicate Bomb" - desc = "The Syndicate bomb is a fearsome device capable of massive destruction. It has an adjustable timer, with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \ - movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ - be defused, and some crew may attempt to do so." - item = /obj/item/device/sbeacondrop/bomb - cost = 11 - -/datum/uplink_item/device_tools/rad_laser - name = "Radioactive Microlaser" - desc = "A radioactive microlaser disguised as a standard Nanotrasen health analyzer. When used, it emits a powerful burst of radiation, which, after a short delay, can incapitate all but the most protected of humanoids. \ - It has two settings: intensity, which controls the power of the radiation, and wavelength, which controls how long the radiation delay is." - item = /obj/item/device/rad_laser - cost = 5 - -/datum/uplink_item/device_tools/syndicate_detonator - name = "Syndicate Detonator" - desc = "The Syndicate detonator is a companion device to the Syndicate bomb. Simply press the included button and an encrypted radio frequency will instruct all live Syndicate bombs to detonate. \ - Useful for when speed matters or you wish to synchronize multiple bomb blasts. Be sure to stand clear of the blast radius before using the detonator." - item = /obj/item/device/syndicatedetonator - cost = 3 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/device_tools/assault_pod - name = "Assault Pod Targetting Device" - desc = "Use to select the landing zone of your assault pod." - item = /obj/item/device/assault_pod - cost = 30 - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/device_tools/shield - name = "Energy Shield" - desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending against other attacks." - item = /obj/item/weapon/shield/energy - cost = 16 - gamemodes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - surplus = 20 - -/datum/uplink_item/device_tools/medgun - name = "Medbeam Gun" - desc = "Medical Beam Gun, useful in prolonged firefights." - item = /obj/item/weapon/gun/medbeam - cost = 15 - gamemodes = list(/datum/game_mode/nuclear) - - -// IMPLANTS - -/datum/uplink_item/implants - category = "Implants" - -/datum/uplink_item/implants/freedom - name = "Freedom Implant" - desc = "An implant injected into the body and later activated at the user's will. It will attempt to free the user from common restraints such as handcuffs." - item = /obj/item/weapon/storage/box/syndie_kit/imp_freedom - cost = 5 - -/datum/uplink_item/implants/uplink - name = "Uplink Implant" - desc = "An implant injected into the body, and later activated at the user's will. It will open a separate uplink with 10 telecrystals. The ability to have these telecrystals, combined with no easy \ - way to detect the ipmlant, makes this excellent for escaping confinement." - item = /obj/item/weapon/storage/box/syndie_kit/imp_uplink - cost = 14 - surplus = 0 - -/datum/uplink_item/implants/adrenal - name = "Adrenal Implant" - desc = "An implant injected into the body, and later activated at the user's will. It will inject a chemical cocktail which has a mild healing effect along with removing all stuns and increasing movement speed." - item = /obj/item/weapon/storage/box/syndie_kit/imp_adrenal - cost = 8 - -/datum/uplink_item/implants/storage - name = "Storage Implant" - desc = "An implant injected into the body, and later activated at the user's will. It will open a small subspace pocket capable of storing two items." - item = /obj/item/weapon/storage/box/syndie_kit/imp_storage - cost = 8 - -/datum/uplink_item/implants/microbomb - name = "Microbomb Implant" - desc = "An implant injected into the body, and later activated either manually or automatically upon death. The more implants inside of you, the higher the explosive power. \ - This will permanently destroy your body, however." - item = /obj/item/weapon/storage/box/syndie_kit/imp_microbomb - cost = 2 - gamemodes = list(/datum/game_mode/nuclear) - - -//CYBERNETIC IMPLANTS - -/datum/uplink_item/cyber_implants - category = "Cybernetic Implants" - gamemodes = list(/datum/game_mode/nuclear) - surplus = 0 - -/datum/uplink_item/cyber_implants/thermals - name = "Thermal Vision Implant" - desc = "These cybernetic eyes will give you thermal vision. They must be implanted via surgery." - item = /obj/item/organ/internal/cyberimp/eyes/thermals - cost = 8 - -/datum/uplink_item/cyber_implants/xray - name = "X-Ray Vision Implant" - desc = "These cybernetic eyes will give you X-ray vision. They must be implanted via surgery." - item = /obj/item/organ/internal/cyberimp/eyes/xray - cost = 10 - -/datum/uplink_item/cyber_implants/antistun - name = "CNS Rebooter Implant" - desc = "This implant will help you get back up on your feet faster after being stunned. It must be implanted via surgery." - item = /obj/item/organ/internal/cyberimp/brain/anti_stun - cost = 12 - -/datum/uplink_item/cyber_implants/reviver - name = "Reviver Implant" - desc = "This implant will attempt to revive you if you lose consciousness. It must be implanted via surgery." - item = /obj/item/organ/internal/cyberimp/chest/reviver - cost = 8 - -/datum/uplink_item/cyber_implants/bundle - name = "Cybernetic Implants Bundle" - desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. They must be implanted via surgery." - item = /obj/item/weapon/storage/box/cyber_implants - cost = 40 - -// POINTLESS BADASSERY - -/datum/uplink_item/badass - category = "(Pointless) Badassery" - surplus = 0 - -/datum/uplink_item/badass/syndiecigs - name = "Syndicate Smokes" - desc = "Strong flavor, dense smoke, infused with omnizine." - item = /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate - cost = 2 - -/datum/uplink_item/badass/bundle - name = "Syndicate Bundle" - desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 20 telecrystals, but you do not know which specialisation you will receive." - item = /obj/item/weapon/storage/box/syndicate - cost = 20 - excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang) - -/datum/uplink_item/badass/syndiecards - name = "Syndicate Playing Cards" - desc = "A special deck of space-grade playing cards with a mono-molecular edge and metal reinforcement, making them slightly more robust than a normal deck of cards. \ - You can also play card games with them or leave them on your victims." - item = /obj/item/toy/cards/deck/syndicate - cost = 1 - surplus = 40 - -/datum/uplink_item/badass/syndiecash - name = "Syndicate Briefcase Full of Cash" - desc = "A secure briefcase containing 5000 space credits. Useful for bribing personnel, or purchasing goods and services at lucrative prices. \ - The briefcase also feels a little heavier to hold; it has been manufactured to pack a little bit more of a punch if your client needs some convincing." - item = /obj/item/weapon/storage/secure/briefcase/syndie - cost = 1 - -/datum/uplink_item/badass/balloon - name = "For showing that you are THE BOSS" - desc = "A useless red balloon with the Syndicate logo on it. Can blow the deepest of covers." - item = /obj/item/toy/syndicateballoon - cost = 20 - -/datum/uplink_item/implants/macrobomb - name = "Macrobomb Implant" - desc = "An implant injected into the body, and later activated either manually or automatically upon death. Upon death, releases a massive explosion that will wipe out everything nearby." - item = /obj/item/weapon/storage/box/syndie_kit/imp_macrobomb - cost = 20 - gamemodes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/badass/random - name = "Random Item" - desc = "Picking this choice will send you a random item from the list. Useful for when you cannot think of a strategy to finish your objectives with." - item = /obj/item/weapon/storage/box/syndicate - cost = 0 - -/datum/uplink_item/badass/random/spawn_item(turf/loc, obj/item/device/uplink/U) - - var/list/buyable_items = get_uplink_items() - var/list/possible_items = list() - - for(var/category in buyable_items) - for(var/datum/uplink_item/I in buyable_items[category]) - if(I == src) - continue - if(I.cost > U.uses) - continue - possible_items += I - - if(possible_items.len) - var/datum/uplink_item/I = pick(possible_items) - U.uses -= max(0, I.cost) - feedback_add_details("traitor_uplink_items_bought","RN") - return new I.item(loc) - -/datum/uplink_item/badass/surplus_crate - name = "Syndicate Surplus Crate" - desc = "A crate containing 50 telecrystals worth of random syndicate leftovers." - cost = 20 - item = /obj/item/weapon/storage/box/syndicate - excludefrom = list(/datum/game_mode/nuclear) - -/datum/uplink_item/badass/surplus_crate/spawn_item(turf/loc, obj/item/device/uplink/U) - var/obj/structure/closet/crate/C = new(loc) - var/list/temp_uplink_list = get_uplink_items() - var/list/buyable_items = list() - for(var/category in temp_uplink_list) - buyable_items += temp_uplink_list[category] - var/list/bought_items = list() - U.uses -= cost - U.used_TC += 20 - var/remaining_TC = 50 - - var/datum/uplink_item/I - while(remaining_TC) - I = pick(buyable_items) - if(!I.surplus) - continue - if(I.cost > remaining_TC) - continue - if((I.item in bought_items) && prob(33)) //To prevent people from being flooded with the same thing over and over again. - continue - bought_items += I.item - remaining_TC -= I.cost - - U.purchase_log += "\icon[C]" - for(var/item in bought_items) - new item(C) - U.purchase_log += "\icon[item]" diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index e29504fd192..bc0a6394208 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -159,11 +159,6 @@ obj_count++ return - -/datum/game_mode/proc/random_radio_frequency() - return 1337 // WHY??? -- Doohl - - /datum/game_mode/proc/equip_syndicate(mob/living/carbon/human/synd_mob, telecrystals = TRUE) if(telecrystals) synd_mob.equipOutfit(/datum/outfit/syndicate) @@ -177,7 +172,6 @@ return 1 return ..() - /datum/game_mode/proc/are_operatives_dead() for(var/datum/mind/operative_mind in syndicates) if (istype(operative_mind.current,/mob/living/carbon/human) && (operative_mind.current.stat!=2)) @@ -234,7 +228,7 @@ world << "Crew Major Victory!" world << "The Research Staff has saved the disc and killed the [syndicate_name()] Operatives" - else if ( disk_rescued ) + else if (disk_rescued) feedback_set_details("round_end_result","loss - evacuation - disk secured") world << "Crew Major Victory" world << "The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!" @@ -265,13 +259,13 @@ var/TC_uses = 0 for(var/datum/mind/syndicate in syndicates) text += printplayer(syndicate) - for(var/obj/item/device/uplink/H in world_uplinks) - if(H && H.uplink_owner && H.uplink_owner==syndicate.key) - TC_uses += H.used_TC + for(var/obj/item/device/uplink/H in uplinks) + if(H && H.owner && H.owner == syndicate.key) + TC_uses += H.spent_telecrystals purchases += H.purchase_log text += "
" text += "(Syndicates used [TC_uses] TC) [purchases]" - if(TC_uses==0 && station_was_nuked && !are_operatives_dead()) + if(TC_uses == 0 && station_was_nuked && !are_operatives_dead()) text += "" world << text return 1 @@ -322,10 +316,9 @@ R.freqlock = 1 if(tc) - var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(H) - U.hidden_uplink.uplink_owner="[H.key]" - U.hidden_uplink.uses = tc - U.hidden_uplink.mode_override = /datum/game_mode/nuclear //Goodies + var/obj/item/device/radio/uplink/nuclear/U = new(H) + U.hidden_uplink.owner = "[H.key]" + U.hidden_uplink.telecrystals = tc H.equip_to_slot_or_del(U, slot_in_backpack) var/obj/item/weapon/implant/weapons_auth/W = new/obj/item/weapon/implant/weapons_auth(H) @@ -349,8 +342,6 @@ /obj/item/weapon/tank/jetpack/oxygen/harness=1,\ /obj/item/weapon/pinpointer/nukeop=1) - tc = 30 - /datum/outfit/syndicate/full/post_equip(mob/living/carbon/human/H) ..() diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index e5675f6b183..6a31fed74b5 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -1,19 +1,18 @@ +#define CHALLENGE_TELECRYSTALS 280 #define CHALLENGE_TIME_LIMIT 3000 -#define MIN_CHALLENGE_PLAYERS 50 -#define CHALLENGE_SHUTTLE_DELAY 15000 //25 minutes, so the ops have at least 5 minutes before the shuttle is callable. +#define CHALLENGE_MIN_PLAYERS 50 +#define CHALLENGE_SHUTTLE_DELAY 15000 // 25 minutes, so the ops have at least 5 minutes before the shuttle is callable. /obj/item/device/nuclear_challenge name = "Declaration of War (Challenge Mode)" icon_state = "gangtool-red" item_state = "walkietalkie" desc = "Use to send a declaration of hostilities to the target, delaying your shuttle departure for 20 minutes while they prepare for your assault. \ - Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \ - Must be used within five minutes, or your benefactors will lose interest." - - + Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \ + Must be used within five minutes, or your benefactors will lose interest." /obj/item/device/nuclear_challenge/attack_self(mob/living/user) - if(player_list.len < MIN_CHALLENGE_PLAYERS) + if(player_list.len < CHALLENGE_MIN_PLAYERS) user << "The enemy crew is too small to be worth declaring war on." return if(user.z != ZLEVEL_CENTCOM) @@ -36,14 +35,15 @@ for(var/obj/machinery/computer/shuttle/syndicate/S in machines) S.challenge = TRUE - var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(get_turf(user)) - U.hidden_uplink.uplink_owner= "[user.key]" - U.hidden_uplink.uses = 280 - U.hidden_uplink.mode_override = /datum/game_mode/nuclear //Maybe we can have a special set of items for the challenge uplink eventually + var/obj/item/device/radio/uplink/nuclear/U = new(get_turf(user)) + U.hidden_uplink.owner = "[user.key]" + U.hidden_uplink.telecrystals = CHALLENGE_TELECRYSTALS + U.hidden_uplink.gamemode = /datum/game_mode/nuclear config.shuttle_refuel_delay = max(config.shuttle_refuel_delay, CHALLENGE_SHUTTLE_DELAY) qdel(src) +#undef CHALLENGE_TELECRYSTALS #undef CHALLENGE_TIME_LIMIT -#undef MIN_CHALLENGE_PLAYERS +#undef CHALLENGE_MIN_PLAYERS #undef CHALLENGE_SHUTTLE_DELAY diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 8d6aadd6f66..7e5941068fd 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -1,5 +1,4 @@ /datum/game_mode - // this includes admin-appointed traitors and multitraitors. Easy! var/traitor_name = "traitor" var/list/datum/mind/traitors = list() @@ -227,10 +226,10 @@ var/TC_uses = 0 var/uplink_true = 0 var/purchases = "" - for(var/obj/item/device/uplink/H in world_uplinks) - if(H && H.uplink_owner && H.uplink_owner==traitor.key) - TC_uses += H.used_TC - uplink_true=1 + for(var/obj/item/device/uplink/H in uplinks) + if(H && H.owner && H.owner == traitor.key) + TC_uses += H.spent_telecrystals + uplink_true = 1 purchases += H.purchase_log var/objectives = "" @@ -285,48 +284,32 @@ traitor_mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself." traitor_mob.dna.remove_mutation(CLOWNMUT) - // find a radio! toolbox(es), backpack, belt, headset var/loc = "" - var/obj/item/R = locate(/obj/item/device/pda) in traitor_mob.contents //Hide the uplink in a PDA if available, otherwise radio - if(!R) - R = locate(/obj/item/device/radio) in traitor_mob.contents + var/obj/item/I = locate(/obj/item/device/pda) in traitor_mob.contents //Hide the uplink in a PDA if available, otherwise radio + if(!I) + I = locate(/obj/item/device/radio) in traitor_mob.contents - if (!R) + if (!I) traitor_mob << "Unfortunately, the Syndicate wasn't able to get you a radio." . = 0 else - if (istype(R, /obj/item/device/radio)) - // generate list of radio freqs - var/obj/item/device/radio/target_radio = R - var/freq = 1441 - var/list/freqlist = list() - while (freq <= 1489) - if (freq < 1451 || freq > 1459) - freqlist += freq - freq += 2 - if ((freq % 2) == 0) - freq += 1 - freq = freqlist[rand(1, freqlist.len)] + var/obj/item/device/uplink/U = new(I) + U.owner = "[traitor_mob.key]" + I.hidden_uplink = U - var/obj/item/device/uplink/T = new(R) - target_radio.hidden_uplink = T - T.uplink_owner = "[traitor_mob.key]" - target_radio.traitor_frequency = freq - traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [loc]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features." - traitor_mob.mind.store_memory("Radio Freq: [format_frequency(freq)] ([R.name] [loc]).") - else if (istype(R, /obj/item/device/pda)) - // generate a passcode if the uplink is hidden in a PDA - var/pda_pass = "[rand(100,999)] [pick("Alpha","Bravo","Delta","Omega")]" + if(istype(I, /obj/item/device/radio)) + var/obj/item/device/radio/R = I + R.traitor_frequency = sanitize_frequency(rand(MIN_FREQ, MAX_FREQ)) - var/obj/item/device/uplink/T = new(R) - R.hidden_uplink = T - T.uplink_owner = "[traitor_mob.key]" - var/obj/item/device/pda/P = R - P.lock_code = pda_pass + traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [loc]. Simply dial the frequency [format_frequency(R.traitor_frequency)] to unlock its hidden features." + traitor_mob.mind.store_memory("Radio Frequency: [format_frequency(R.traitor_frequency)] ([R.name] [loc]).") + else if(istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/P = I + P.lock_code = "[rand(100,999)] [pick("Alpha","Bravo","Delta","Omega")]" - traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features." - traitor_mob.mind.store_memory("Uplink Passcode: [pda_pass] ([R.name] [loc]).") - if(!safety)//If they are not a rev. Can be added on to. + traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [P.name] [loc]. Simply enter the code \"[P.lock_code]\" into the ringtone select to unlock its hidden features." + traitor_mob.mind.store_memory("Uplink Passcode: [P.lock_code] ([P.name] [loc]).") + if(!safety) // If they are not a rev. Can be added on to. give_codewords(traitor_mob) /datum/game_mode/proc/assign_exchange_role(datum/mind/owner) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 2b9dd878d76..d0b7d6bcf34 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -617,7 +617,6 @@ return /obj/machinery/alarm/proc/post_alert(alert_level) - var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency) if(!frequency) return diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index fc9d0eb42ee..49fefa2e08f 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -2,7 +2,6 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Zero", "Niner") - /obj/machinery/computer/telecrystals name = "\improper Telecrystal assignment station" desc = "A device used to manage telecrystals during group operations. You shouldn't be looking at this particular one..." @@ -14,7 +13,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F /obj/machinery/computer/telecrystals/uplinker name = "\improper Telecrystal upload/receive station" desc = "A device used to manage telecrystals during group operations. To use, simply insert your uplink. With your uplink installed \ - you can upload your telecrystals to the group's pool using the console, or be assigned additional telecrystals by your lieutenant." + you can upload your telecrystals to the group's pool using the console, or be assigned additional telecrystals by your lieutenant." var/obj/item/uplinkholder = null var/obj/machinery/computer/telecrystals/boss/linkedboss = null @@ -29,34 +28,28 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F else name = "[name] [rand(1,999)]" - /obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item)) - if(uplinkholder) user << "The [src] already has an uplink in it." return - if(O.hidden_uplink) - var/obj/item/P = user.get_active_hand() + var/obj/item/I = user.get_active_hand() if(!user.drop_item()) return - uplinkholder = P - P.loc = src - P.add_fingerprint(user) + uplinkholder = I + I.loc = src + I.add_fingerprint(user) update_icon() updateUsrDialog() else user << "The [O] doesn't appear to be an uplink..." - - /obj/machinery/computer/telecrystals/uplinker/update_icon() ..() if(uplinkholder) overlays += "[initial(icon_state)]-closed" - /obj/machinery/computer/telecrystals/uplinker/proc/ejectuplink() if(uplinkholder) uplinkholder.loc = get_turf(src.loc) @@ -65,8 +58,8 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F /obj/machinery/computer/telecrystals/uplinker/proc/donateTC(amt, addLog = 1) if(uplinkholder && linkedboss) - if(amt <= uplinkholder.hidden_uplink.uses) - uplinkholder.hidden_uplink.uses -= amt + if(amt <= uplinkholder.hidden_uplink.telecrystals) + uplinkholder.hidden_uplink.telecrystals -= amt linkedboss.storedcrystals += amt if(addLog) linkedboss.logTransfer("[src] donated [amt] telecrystals to [linkedboss].") @@ -74,7 +67,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F /obj/machinery/computer/telecrystals/uplinker/proc/giveTC(amt, addLog = 1) if(uplinkholder && linkedboss) if(amt <= linkedboss.storedcrystals) - uplinkholder.hidden_uplink.uses += amt + uplinkholder.hidden_uplink.telecrystals += amt linkedboss.storedcrystals -= amt if(addLog) linkedboss.logTransfer("[src] received [amt] telecrystals from [linkedboss].") @@ -94,7 +87,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F dat += "No linked management consoles detected. Scan for uplink stations using the management console.

" if(uplinkholder) - dat += "[uplinkholder.hidden_uplink.uses] telecrystals remain in this uplink.
" + dat += "[uplinkholder.hidden_uplink.telecrystals] telecrystals remain in this uplink.
" if(linkedboss) dat += "Donate TC: 1 | 5" dat += "
Eject Uplink" @@ -177,7 +170,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F for(var/obj/machinery/computer/telecrystals/uplinker/A in TCstations) dat += "[A.name] | " if(A.uplinkholder) - dat += "[A.uplinkholder.hidden_uplink.uses] telecrystals." + dat += "[A.uplinkholder.hidden_uplink.telecrystals] telecrystals." if(storedcrystals) dat+= "
Add TC: 1 | 5" dat += "
" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e75e8726bfb..62c9550db52 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -231,7 +231,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s /obj/item/interact(mob/user) if(hidden_uplink && hidden_uplink.active) hidden_uplink.interact(user) - return + return 1 ui_interact(user) /obj/item/attack_hand(mob/user) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index d8a6a70febe..ef57814725e 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -114,6 +114,8 @@ /obj/item/device/radio/interact(mob/user) + if (..()) + return if(b_stat && !istype(user, /mob/living/silicon/ai)) wires.Interact(user) else diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index 7ba1c442d4b..f8b772dae2f 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -1,24 +1,24 @@ /obj/item/weapon/implant/uplink name = "uplink implant" - desc = "Summon things." + desc = "Sneeki breeki." icon = 'icons/obj/radio.dmi' icon_state = "radio" origin_tech = "materials=2;magnets=4;programming=4;biotech=4;syndicate=8;bluespace=5" /obj/item/weapon/implant/uplink/New() hidden_uplink = new(src) - hidden_uplink.uses = 10 + hidden_uplink.telecrystals = 10 ..() -/obj/item/weapon/implant/uplink/implant(mob/source) - var/obj/item/weapon/implant/imp_e = locate(src.type) in source +/obj/item/weapon/implant/uplink/implant(mob/user) + var/obj/item/weapon/implant/imp_e = locate(src.type) in user if(imp_e && imp_e != src) - imp_e.hidden_uplink.uses += hidden_uplink.uses + imp_e.hidden_uplink.telecrystals += hidden_uplink.telecrystals qdel(src) return 1 if(..()) - hidden_uplink.uplink_owner="[source.key]" + hidden_uplink.owner = "[user.key]" return 1 return 0 @@ -26,7 +26,6 @@ if(hidden_uplink) hidden_uplink.interact(usr) - /obj/item/weapon/implanter/uplink name = "implanter (uplink)" diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index dacc3514ec2..43971d8b895 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -301,61 +301,6 @@ slowdown = 1 max_combined_w_class = 30 -/obj/item/weapon/storage/backpack/dufflebag/syndie - name = "suspicious looking dufflebag" - desc = "A large dufflebag for holding extra tactical supplies." - icon_state = "duffle-syndie" - item_state = "duffle-syndiemed" - origin_tech = "syndicate=1" - silent = 1 - slowdown = 0 - -/obj/item/weapon/storage/backpack/dufflebag/syndie/med - name = "medical dufflebag" - desc = "A large dufflebag for holding extra tactical medical supplies." - icon_state = "duffle-syndiemed" - item_state = "duffle-syndiemed" - -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo - name = "ammunition dufflebag" - desc = "A large dufflebag for holding extra weapons ammunition and supplies." - icon_state = "duffle-syndieammo" - item_state = "duffle-syndieammo" - -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded - desc = "A large dufflebag, packed to the brim with Bulldog shotgun ammo." - -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded/New() - ..() - contents = list() - for(var/i in 1 to 6) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g/buckshot(src) - new /obj/item/ammo_box/magazine/m12g/stun(src) - new /obj/item/ammo_box/magazine/m12g/dragon(src) - return - -/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery - name = "surgery dufflebag" - desc = "A suspicious looking dufflebag for holding surgery tools." - icon_state = "duffle-syndiemed" - item_state = "duffle-syndiemed" - -/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery/New() - ..() - contents = list() - new /obj/item/weapon/scalpel(src) - new /obj/item/weapon/hemostat(src) - new /obj/item/weapon/retractor(src) - new /obj/item/weapon/circular_saw(src) - new /obj/item/weapon/surgicaldrill(src) - new /obj/item/weapon/cautery(src) - new /obj/item/weapon/surgical_drapes(src) - new /obj/item/clothing/suit/straight_jacket(src) - new /obj/item/clothing/mask/muzzle(src) - new /obj/item/device/mmi/syndie(src) - return - /obj/item/weapon/storage/backpack/dufflebag/captain name = "captain's dufflebag" desc = "A large dufflebag for holding extra captainly goods." @@ -388,6 +333,62 @@ icon_state = "duffle-clown" item_state = "duffle-clown" + +/obj/item/weapon/storage/backpack/dufflebag/syndie + name = "suspicious looking dufflebag" + desc = "A large dufflebag for holding extra tactical supplies." + icon_state = "duffle-syndie" + item_state = "duffle-syndiemed" + origin_tech = "syndicate=1" + silent = 1 + slowdown = 0 + +/obj/item/weapon/storage/backpack/dufflebag/syndie/med + name = "medical dufflebag" + desc = "A large dufflebag for holding extra tactical medical supplies." + icon_state = "duffle-syndiemed" + item_state = "duffle-syndiemed" + +/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery + name = "surgery dufflebag" + desc = "A suspicious looking dufflebag for holding surgery tools." + icon_state = "duffle-syndiemed" + item_state = "duffle-syndiemed" + +/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery/New() + ..() + contents = list() + new /obj/item/weapon/scalpel(src) + new /obj/item/weapon/hemostat(src) + new /obj/item/weapon/retractor(src) + new /obj/item/weapon/circular_saw(src) + new /obj/item/weapon/surgicaldrill(src) + new /obj/item/weapon/cautery(src) + new /obj/item/weapon/surgical_drapes(src) + new /obj/item/clothing/suit/straight_jacket(src) + new /obj/item/clothing/mask/muzzle(src) + new /obj/item/device/mmi/syndie(src) + return + +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo + name = "ammunition dufflebag" + desc = "A large dufflebag for holding extra weapons ammunition and supplies." + icon_state = "duffle-syndieammo" + item_state = "duffle-syndieammo" + +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/shotgun + desc = "A large dufflebag, packed to the brim with Bulldog shotgun ammo." + +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/shotgun/New() + ..() + contents = list() + for(var/i in 1 to 6) + new /obj/item/ammo_box/magazine/m12g(src) + new /obj/item/ammo_box/magazine/m12g/buckshot(src) + new /obj/item/ammo_box/magazine/m12g/stun(src) + new /obj/item/ammo_box/magazine/m12g/dragon(src) + return + /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg desc = "A large dufflebag, packed to the brim with C20r magazines." @@ -400,15 +401,15 @@ /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/fireteam - desc = "A large dufflebag, packed to the brim with C20r, M90gl, and sniper ammunition." + desc = "A large dufflebag, packed to the brim with .45, 5.56, and .50 ammo." /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/fireteam/New() ..() contents = list() for(var/i in 1 to 4) new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/m556(src) - new /obj/item/ammo_box/magazine/m556(src) + for(var/i in 1 to 3) + new /obj/item/ammo_box/magazine/m556(src) new /obj/item/ammo_box/a40mm(src) new /obj/item/ammo_box/magazine/sniper_rounds(src) return diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 2c237f14379..4bcc0a684b6 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -220,7 +220,7 @@ obj/item/weapon/paper/crumpled/snowdin/shovel /obj/item/device/radio/uplink/old/New() ..() hidden_uplink.name = "dusty radio" - hidden_uplink.uses = 10 + hidden_uplink.telecrystals = 10 /obj/effect/landmark/corpse/syndicatesoldier/coldres name = "Syndicate Snow Operative" diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index 597b528ea9f..352e9d8b557 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -1,4 +1,3 @@ - //////////////////// //MORE DRONE TYPES// //////////////////// @@ -28,21 +27,31 @@ default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi seeStatic = 0 //Our programming is superior. - /mob/living/simple_animal/drone/syndrone/New() ..() - if(internal_storage && internal_storage.hidden_uplink) - internal_storage.hidden_uplink.uses = (initial(internal_storage.hidden_uplink.uses) / 2) - internal_storage.name = "syndicate uplink" - + internal_storage.hidden_uplink.telecrystals = 10 /mob/living/simple_animal/drone/syndrone/Login() ..() src << "You can kill and eat other drones to increase your health!" //Inform the evil lil guy +/mob/living/simple_animal/drone/syndrone/badass + name = "Badass Syndrone" + default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite + default_storage = /obj/item/device/radio/uplink/nuclear + +/mob/living/simple_animal/drone/syndrone/badass/New() + ..() + internal_storage.hidden_uplink.telecrystals = 30 + var/obj/item/weapon/implant/weapons_auth/W = new/obj/item/weapon/implant/weapons_auth(src) + W.implant(src) /obj/item/drone_shell/syndrone name = "syndrone shell" desc = "A shell of a syndrone, a modified maintenance drone designed to infiltrate and annihilate." icon_state = "syndrone_item" - drone_type = /mob/living/simple_animal/drone/syndrone \ No newline at end of file + drone_type = /mob/living/simple_animal/drone/syndrone + +/obj/item/drone_shell/syndrone/badass + name = "badass syndrone shell" + drone_type = /mob/living/simple_animal/drone/syndrone/badass \ No newline at end of file diff --git a/code/game/objects/items/devices/uplink.dm b/code/modules/uplink/uplink.dm similarity index 56% rename from code/game/objects/items/devices/uplink.dm rename to code/modules/uplink/uplink.dm index 52bb16bb700..1a7bd149f3f 100644 --- a/code/game/objects/items/devices/uplink.dm +++ b/code/modules/uplink/uplink.dm @@ -1,9 +1,9 @@ -var/list/world_uplinks = list() +var/global/list/uplinks = list() /** * Uplinks * - * All obj/item 's have a hidden_uplink var. By default it's null. Give the item one with 'new(src') (it must be in it's contents). Then add 'uses.' + * All /obj/item(s) have a hidden_uplink var. By default it's null. Give the item one with 'new(src') (it must be in it's contents). Then add 'uses.' * Use whatever conditionals you want to check that the user has an uplink, and then call interact() on their uplink. * You might also want the uplink menu to open if active. Check if the uplink is 'active' and then interact() with it. **/ @@ -12,40 +12,39 @@ var/list/world_uplinks = list() desc = "There is something wrong if you're examining this." var/active = FALSE var/lockable = TRUE - var/uses = 20 - var/used_TC = 0 - var/uplink_owner = null - var/purchase_log = "" + var/telecrystals = 20 - var/mode_override = null + var/owner = null + var/datum/game_mode/gamemode = null + var/spent_telecrystals = 0 + var/purchase_log = "" /obj/item/device/uplink/New() ..() - world_uplinks += src + uplinks += src /obj/item/device/uplink/Destroy() - world_uplinks -= src + uplinks -= src return ..() /obj/item/device/uplink/interact(mob/user) - if(!active) - active = TRUE + active = TRUE ui_interact(user) /obj/item/device/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = inventory_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "uplink", name, 350, 750, master_ui, state) + ui = new(user, src, ui_key, "uplink", name, 450, 750, master_ui, state) ui.set_style("syndicate") ui.open() /obj/item/device/uplink/get_ui_data(mob/user) var/list/data = list() - data["uses"] = uses + data["telecrystals"] = telecrystals data["lockable"] = lockable - var/list/uplink_items = get_uplink_items(mode_override) + var/list/uplink_items = get_uplink_items(gamemode) data["buyable"] = list() for(var/category in uplink_items) var/list/cat = list( @@ -69,12 +68,12 @@ var/list/world_uplinks = list() switch(action) if("buy") - var/list/uplink_items = get_uplink_items(mode_override) + var/list/uplink_items = get_uplink_items(gamemode) var/category = params["category"] var/item = params["item"] var/datum/uplink_item/I = uplink_items[category][item] if(I) - I.buy(src, usr) + I.buy(usr, src) if("lock") active = FALSE SStgui.close_uis(src) @@ -85,43 +84,33 @@ var/list/world_uplinks = list() return loc // Refund certain items by hitting the uplink with it. -/obj/item/device/radio/uplink/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W)) - for(var/path in subtypesof(/datum/uplink_item)) - var/datum/uplink_item/D = path - if(initial(D.item) == W.type && initial(D.refundable)) - hidden_uplink.uses += (D.cost) - hidden_uplink.used_TC -= initial(D.cost) - user << "[W] refunded." - qdel(W) - return - -// PRESET UPLINKS -// A collection of preset uplinks. -// -// Includes normal radio uplink, multitool uplink, -// implant uplink (not the implant tool) and a preset headset uplink. +/obj/item/device/radio/uplink/attackby(obj/item/I, mob/user, params) + for(var/item in subtypesof(/datum/uplink_item)) + var/datum/uplink_item/UI = item + var/path = initial(UI.item) + var/cost = initial(UI.cost) + var/refundable = initial(UI.refundable) + if(I.type == path && refundable) + hidden_uplink.telecrystals += cost + hidden_uplink.spent_telecrystals -= cost + user << "[I] refunded." + qdel(I) + return +// A collection of pre-set uplinks, for admin spawns. /obj/item/device/radio/uplink/New() ..() icon_state = "radio" hidden_uplink = new(src) + hidden_uplink.active = TRUE hidden_uplink.lockable = FALSE -/obj/item/device/radio/uplink/interact(mob/user) - hidden_uplink.interact(user) +/obj/item/device/radio/uplink/nuclear/New() + ..() + hidden_uplink.gamemode = /datum/game_mode/nuclear /obj/item/device/multitool/uplink/New() ..() hidden_uplink = new(src) + hidden_uplink.active = TRUE hidden_uplink.lockable = FALSE - -/obj/item/device/multitool/uplink/interact(mob/user) - hidden_uplink.interact(user) - -/obj/item/device/radio/headset/uplink - traitor_frequency = 1445 - -/obj/item/device/radio/headset/uplink/New() - ..() - hidden_uplink = new(src) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm new file mode 100644 index 00000000000..c6a22f4cd6c --- /dev/null +++ b/code/modules/uplink/uplink_item.dm @@ -0,0 +1,1109 @@ +var/list/uplink_items = list() // Global list so we only initialize this once. + +/proc/get_uplink_items(var/datum/game_mode/gamemode = null) + if(!uplink_items.len) + for(var/item in subtypesof(/datum/uplink_item)) + var/datum/uplink_item/I = new item() + if(!I.item) + continue + if(!uplink_items[I.category]) + uplink_items[I.category] = list() + uplink_items[I.category][I.name] = I + + var/list/filtered_uplink_items = list() + for(var/category in uplink_items) + for(var/item in uplink_items[category]) + var/datum/uplink_item/I = uplink_items[category][item] + if(I.include_modes.len) + if(!gamemode && ticker && !(ticker.mode.type in I.include_modes)) + continue + if(gamemode && !(gamemode in I.include_modes)) + continue + if(I.exclude_modes.len) + if(!gamemode && ticker && (ticker.mode.type in I.exclude_modes)) + continue + if(gamemode && (gamemode in I.exclude_modes)) + continue + if(!filtered_uplink_items[category]) + filtered_uplink_items[category] = list() + filtered_uplink_items[category][item] = I + + return filtered_uplink_items + + +/** + * Uplink Items + * + * Items that can be spawned from an uplink. Can be limited by gamemode. +**/ +/datum/uplink_item + var/name = "item name" + var/category = "item category" + var/desc = "item description" + var/item = null // Path to the item to spawn. + var/cost = 0 + var/refundable = FALSE + var/surplus = 100 // Chance of being included in the surplus crate. + var/list/include_modes = list() // Game modes to allow this item in. + var/list/exclude_modes = list() // Game modes to disallow this item from. + +/datum/uplink_item/proc/spawn_item(turf/loc, obj/item/device/uplink/U) + if(item) + feedback_add_details("traitor_uplink_items_bought", "[item]") + return new item(loc) + +/datum/uplink_item/proc/buy(mob/user, obj/item/device/uplink/U) + if(!istype(U)) + return + if (!user || user.incapacitated()) + return + + if(U.telecrystals < cost) + return + else + U.telecrystals -= cost + U.spent_telecrystals += cost + + var/atom/A = spawn_item(get_turf(user), U) + var/obj/item/weapon/storage/box/B = A + if(istype(B) && B.contents.len > 0) + for(var/obj/item/I in B) + U.purchase_log += "\icon[I]" + else + U.purchase_log += "\icon[A]" + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.put_in_any_hand_if_possible(A) + + return 1 + +// Nuclear Operative (Special Offers) +/datum/uplink_item/nukeoffer + category = "Special Offers" + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/nukeoffer/c20r + name = "C-20r bundle" + desc = "Old faithful: The classic C-20r, bundled with two magazines, and a (surplus) suppressor at discount price." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/c20rbundle + cost = 14 // normally 16 + +/datum/uplink_item/nukeoffer/m90gl + name = "M-90gl bundle" + desc = "A premium offer: Pick up the M-90gl, along with a magazine, some grenades, and a pack of cigarettes \ + for a 'killer' price." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle + cost = 15 // normally 18 + +/datum/uplink_item/nukeoffer/bulldog + name = "Bulldog bundle" + desc = "Lean and mean: Optimised for people that want to get up close and personal. Contains the popular \ + Bulldog shotgun, two 12g drums, and an elite hardsuit." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/bulldogbundle + cost = 16 // normally 20 + +/datum/uplink_item/nukeoffer/medical + name = "Medical bundle" + desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a Donksoft machine gun, \ + a box of ammo, and a pair of magboots to rescue your friends in no-gravity environments." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/med/medicalbundle + cost = 15 // normally 20 + +/datum/uplink_item/nukeoffer/sniper + name = "Sniper bundle" + desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, a hollowpoint \ + haemorrhage magazine, a soporific knockout magazine, a free surplus supressor, and a worn out suit and tie." + item = /obj/item/weapon/storage/briefcase/sniperbundle + cost = 20 // normally 26 + +/datum/uplink_item/nukeoffer/chemical + name = "Bioterror bundle" + desc = "For the madman: Contains Bioterror spray, Bioterror grenade, chemicals, syringe gun, box of syringes,\ + Donksoft assault rifle, and some darts. Remember: Seal suit and equip internals before use." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/med/bioterrorbundle + cost = 30 // normally 42 + +/datum/uplink_item/nukeoffer/ammo + name = "Fireteam bundle" + desc = "For the team player: A duffelbag filled with enough ammo to kit out a fireteam; four .45 magazines, \ + three 5.56 magazines, a box of 40mm grenades, and a magazine of sniper ammunition; all at a discounted price." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/fireteam + cost = 24 // normally ?? + +// Dangerous Items +/datum/uplink_item/dangerous + category = "Conspicuous and Dangerous Weapons" + +/datum/uplink_item/dangerous/pistol + name = "Stechkin Pistol" + desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \ + with suppressors." + item = /obj/item/weapon/gun/projectile/automatic/pistol + cost = 9 + +/datum/uplink_item/dangerous/revolver + name = "Syndicate Revolver" + desc = "A brutally simple syndicate revolver that fires .357 Magnum rounds and has 7 chambers." + item = /obj/item/weapon/gun/projectile/revolver + cost = 13 + surplus = 50 + +/datum/uplink_item/dangerous/shotgun + name = "Bulldog Shotgun" + desc = "A fully-loaded semi-automatic drum-fed shotgun. Compatiable with all 12g rounds. Designed for close \ + quarter anti-personel engagements." + item = /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog + cost = 8 + surplus = 40 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/smg + name = "C-20r Submachine Gun" + desc = "A fully-loaded Scarborough Arms bullpup submachine gun. The C-20r fires .45 rounds with a \ + 20-round magazine and is compatible with suppressors." + item = /obj/item/weapon/gun/projectile/automatic/c20r + cost = 10 + surplus = 40 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/smg/unrestricted + item = /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted + include_modes = list(/datum/game_mode/gang) + +/datum/uplink_item/dangerous/carbine + name = "M-90gl Carbine" + desc = "A fully-loaded, specialized three-round burst carbine that fires 30-round 5.56mm magazines with a togglable \ + underslung 40mm grenade launcher." + item = /obj/item/weapon/gun/projectile/automatic/m90 + cost = 12 + surplus = 50 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/carbine/unrestricted + item = /obj/item/weapon/gun/projectile/automatic/m90/unrestricted + include_modes = list(/datum/game_mode/gang) + +/datum/uplink_item/dangerous/machinegun + name = "L6 Squad Automatic Weapon" + desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \ + This deadly weapon has a massive 50-round magazine of devastating 7.62x51mm ammunition." + item = /obj/item/weapon/gun/projectile/automatic/l6_saw + cost = 23 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/sniper + name = "Sniper Rifle" + desc = "Ranged fury, Syndicate style. guaranteed to cause shock and awe or your TC back!" + item = /obj/item/weapon/gun/projectile/sniper_rifle/syndicate + cost = 16 + surplus = 25 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/crossbow + name = "Miniature Energy Crossbow" + desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag \ + unnoticed. It will synthesize and fire bolts tipped with a paralyzing toxin that will \ + briefly stun targets and cause them to slur as if inebriated. It can produce an infinite amount \ + of bolts, but must be manually recharged with each shot." + item = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow + cost = 12 + surplus = 50 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/dangerous/flamethrower + name = "Flamethrower" + desc = "A flamethrower, fueled by a portion of highly flammable biotoxins stolen previously from Nanotrasen \ + stations. Make a statement by roasting the filth in their own greed. Use with caution." + item = /obj/item/weapon/flamethrower/full/tank + cost = 4 + surplus = 40 + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/dangerous/sword + name = "Energy Sword" + desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be \ + pocketed when inactive. Activating it produces a loud, distinctive noise. One can combine two \ + energy swords to create a double energy sword, which must be wielded in two hands but is more robust \ + and deflects all energy projectiles." + item = /obj/item/weapon/melee/energy/sword/saber + cost = 8 + +/datum/uplink_item/dangerous/emp + name = "EMP Kit" + desc = "A box that contains two EMP grenades, an EMP implant and a short ranged recharging device disguised \ + as a flashlight. Useful to disrupt communication and silicon lifeforms." + item = /obj/item/weapon/storage/box/syndie_kit/emp + cost = 5 + +/datum/uplink_item/dangerous/syndicate_minibomb + name = "Syndicate Minibomb" + desc = "The minibomb is a grenade with a five-second fuse. Upon detonation, it will create a small hull breach \ + in addition to dealing high amounts of damage to nearby personnel." + item = /obj/item/weapon/grenade/syndieminibomb + cost = 6 + +/datum/uplink_item/dangerous/foamsmg + name = "Toy Submachine Gun" + desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." + item = /obj/item/weapon/gun/projectile/automatic/c20r/toy + cost = 5 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/foammachinegun + name = "Toy Machine Gun" + desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating \ + riot grade darts, that can briefly incapacitate someone in just one volley." + item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy + cost = 10 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/viscerators + name = "Viscerator Delivery Grenade" + desc = "A unique grenade that deploys a swarm of viscerators upon activation, which will chase down and shred \ + any non-operatives in the area." + item = /obj/item/weapon/grenade/spawnergrenade/manhacks + cost = 5 + surplus = 35 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/bioterrorfoam + name = "Chemical Foam Grenade" + desc = "A powerful chemical foam grenade which creates a deadly torrent of foam that will mute, blind, confuse, \ + mutate, and irritate carbon lifeforms. Specially brewed by Tiger Cooperative chemical weapons specialists \ + using additional spore toxin. Ensure suit is sealed before use." + item = /obj/item/weapon/grenade/chem_grenade/bioterrorfoam + cost = 5 + surplus = 35 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/bioterror + name = "Biohazardous Chemical Sprayer" + desc = "A chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger \ + Cooperative, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \ + Use with extreme caution, to prevent exposure to yourself and your fellow operatives." + item = /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror + cost = 20 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/stealthy_weapons/virus_grenade + name = "Fungal Tuberculosis Grenade" + desc = "A primed bio-grenade packed into a compact box. Comes with five Bio Virus Antidote Kit (BVAK) \ + autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing \ + the BVAK solution." + item = /obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade + cost = 12 + surplus = 35 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/gygax + name = "Gygax Exosuit" + desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ + for hit-and-run style attacks. This model lacks a method of space propulsion, and therefore it is \ + advised to utilize the drop pod if you wish to make use of it." + item = /obj/mecha/combat/gygax/dark/loaded + cost = 80 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/mauler + name = "Mauler Exosuit" + desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targetting, thrust vectoring, \ + and deployable smoke." + item = /obj/mecha/combat/marauder/mauler/loaded + cost = 140 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/reinforcement/syndieborg + name = "Syndicate Cyborg" + desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel." + item = /obj/item/weapon/antag_spawner/nuke_ops/borg_tele + cost = 80 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/reinforcement + name = "Reinforcements" + desc = "Call in an additional team member. They won't come with any gear, so you'll have to save some telecrystals \ + to arm them as well." + item = /obj/item/weapon/antag_spawner/nuke_ops + cost = 25 + refundable = TRUE + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/dangerous/guardian + name = "Holoparasites" + desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \ + organic host as a home base and source of fuel." + item = /obj/item/weapon/storage/box/syndie_kit/guardian + cost = 12 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +// Ammunition +/datum/uplink_item/ammo + category = "Ammunition" + surplus = 40 + +/datum/uplink_item/ammo/pistol + name = "10mm Handgun Magazine" + desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. These subsonic rounds \ + are dirt cheap but are half as effective as .357 rounds." + item = /obj/item/ammo_box/magazine/m10mm + cost = 1 + +/datum/uplink_item/ammo/revolver + name = ".357 Speed Loader" + desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ + For when you really need a lot of things dead." + item = /obj/item/ammo_box/a357 + cost = 4 + +/datum/uplink_item/ammo/shotgun + cost = 2 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/shotgun/buck + name = "12g Buckshot Drum" + desc = "An additional 8-round buckshot magazine for use with the Bulldog shotgun. Front towards enemy." + item = /obj/item/ammo_box/magazine/m12g/buckshot + +/datum/uplink_item/ammo/shotgun/slug + name = "12g Slug Drum" + desc = "An additional 8-round slug magazine for use with the Bulldog shotgun. \ + Now 8 times less likely to shoot your pals." + item = /obj/item/ammo_box/magazine/m12g + +/datum/uplink_item/ammo/shotgun/slug + name = "12 Stun Slug Drum" + desc = "An alternative 8-round stun slug magazine for use with the Bulldog shotgun. \ + Saying that they're completely non-lethal would be lying." + item = /obj/item/ammo_box/magazine/m12g/stun + cost = 3 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/shotgun/dragon + name = "12g Dragon's Breath Drum" + desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. \ + 'I'm a fire starter, twisted fire starter!'" + item = /obj/item/ammo_box/magazine/m12g/dragon + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/shotgun/bag + name = "12g Ammo Duffelbag" + desc = "A duffelbag filled with enough 12g ammo to supply an entire team, at a discounted price." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/shotgun + cost = 12 + +/datum/uplink_item/ammo/smg + name = ".45 SMG Magazine" + desc = "An additional 20-round .45 magazine sutable for use with the C-20r submachine gun. \ + These bullets pack a lot of punch that can knock most targets down, but do limited overall damage." + item = /obj/item/ammo_box/magazine/smgm45 + cost = 3 + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/ammo/smg/bag + name = ".45 Ammo Duffelbag" + desc = "A duffelbag filled with enough .45 ammo to supply an entire team, at a discounted price." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg + cost = 20 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/carbine + name = "5.56 Toploader Magazine" + desc = "An additional 30-round 5.56 magazine; sutable for use with the M-90gl carbine. \ + These bullets don't have the punch to knock most targets down, but dish out higher overall damage." + item = /obj/item/ammo_box/magazine/m556 + cost = 4 + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/ammo/a40mm + name = "40mm Grenade Box" + desc = "A box of 4 additional 40mm HE grenades for use with the M-90gl's underbarrel grenade launcher. \ + Your teammates will ask you to not shoot these down small hallways." + item = /obj/item/ammo_box/a40mm + cost = 5 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/machinegun/basic + name = "7.62x51mm Box Magazine" + desc = "A 50-round magazine of 7.62x51mm ammunition for use with the L6 SAW. \ + By the time you need to use this, you'll already be on a pile of corpses." + item = /obj/item/ammo_box/magazine/m762 + cost = 6 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/machinegun/bleeding + name = "7.62x51mm (Bleeding) Box Magazine" + desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; equipped with special properties \ + to induce internal bleeding on targets." + item = /obj/item/ammo_box/magazine/m762/bleeding + +/datum/uplink_item/ammo/machinegun/hollow + name = "7.62x51mm (Hollow-Point) Box Magazine" + desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; equipped with hollow-point tips to help \ + with the unarmored masses of crew." + item = /obj/item/ammo_box/magazine/m762/hollow + +/datum/uplink_item/ammo/machinegun/ap + name = "7.62x51mm (Armor Penetrating) Box Magazine" + desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; equipped with special properties \ + to puncture even the most durable armor." + item = /obj/item/ammo_box/magazine/m762/ap + +/datum/uplink_item/ammo/machinegun/incen + name = "7.62x51mm (Incendiary) Box Magazine" + desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; tipped with a special flammable \ + mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn." + item = /obj/item/ammo_box/magazine/m762/incen + +/datum/uplink_item/ammo/sniper + name = ".50 Magazine" + desc = "An additional standard 6-round magazine for use with .50 sniper rifles." + item = /obj/item/ammo_box/magazine/sniper_rounds + cost = 4 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/sniper/soporific + name = ".50 Soporific Magazine" + desc = "A 3-round magazine of soporific ammo designed for use with .50 sniper rifles. Put your enemies to sleep today!" + item = /obj/item/ammo_box/magazine/sniper_rounds/soporific + cost = 6 + +/datum/uplink_item/ammo/sniper/haemorrhage + name = ".50 Haemorrhage Magazine" + desc = "A 5-round magazine of haemorrhage ammo designed for use with .50 sniper rifles; causes heavy bleeding \ + in the target." + item = /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage + +/datum/uplink_item/ammo/sniper/penetrator + name = ".50 Penetrator Magazine" + desc = "A 5-round magazine of penetrator ammo designed for use with .50 sniper rifles. \ + Can pierce walls and multiple enemies." + item = /obj/item/ammo_box/magazine/sniper_rounds/penetrator + cost = 5 + +/datum/uplink_item/ammo/sniper/accelerator + name = ".50 Accelerator Magazine" + desc = "A 5-round magazine of accelerator ammo designed for use with .50 sniper rifles. \ + The shot is weak at close range, but gains more power the farther it flies." + item = /obj/item/ammo_box/magazine/sniper_rounds/accelerator + +/datum/uplink_item/ammo/toydarts + name = "Box of Riot Darts" + desc = "A box of 40 Donksoft foam riot darts, for reloading any compatible foam dart gun. Don't forget to share!" + item = /obj/item/ammo_box/foambox/riot + cost = 2 + surplus = 0 + +/datum/uplink_item/ammo/bioterror + name = "Box of Bioterror Syringes" + desc = "A box full of preloaded syringes, containing various chemicals that seize up the victim's motor \ + and broca systems, making it impossible for them to move or speak for some time." + item = /obj/item/weapon/storage/box/syndie_kit/bioterror + cost = 6 + include_modes = list(/datum/game_mode/nuclear) + +// Stealthy Weapons +/datum/uplink_item/stealthy_weapons + category = "Stealthy and Inconspicuous Weapons" + +/datum/uplink_item/stealthy_weapons/throwingstars + name = "Box of Throwing Stars" + desc = "A box of shurikens from ancient Earth martial arts. They are highly effective throwing weapons, \ + and will embed into limbs when possible." + item = /obj/item/weapon/storage/box/throwing_stars + cost = 6 + +/datum/uplink_item/stealthy_weapons/edagger + name = "Energy Dagger" + desc = "A dagger made of energy that looks and functions as a pen when off." + item = /obj/item/weapon/pen/edagger + cost = 2 + +/datum/uplink_item/stealthy_weapons/foampistol + name = "Toy Gun with Riot Darts" + desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade \ + darts effective at incapacitating a target." + item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot + cost = 3 + surplus = 10 + exclude_modes = list(/datum/game_mode/gang) + +/datum/uplink_item/stealthy_weapons/sleepy_pen + name = "Sleepy Pen" + desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a \ + strong anesthetic and a chemical that prevents the target from speaking. \ + The pen holds one dose of the mixture, and cannot be refilled. Note that before the target \ + falls asleep, they will be able to move and act." + item = /obj/item/weapon/pen/sleepy + cost = 4 + exclude_modes = list(/datum/game_mode/nuclear,/datum/game_mode/gang) + +/datum/uplink_item/stealthy_weapons/soap + name = "Syndicate Soap" + desc = "A sinister-looking surfactant used to clean blood stains to hide murders and prevent DNA analysis. \ + You can also drop it underfoot to slip people." + item = /obj/item/weapon/soap/syndie + cost = 1 + surplus = 50 + +/datum/uplink_item/stealthy_weapons/traitor_virus_kit + name = "Virus Kit" + desc = "An active fungal pathogen in a sterile, compact box. Comes with one Bio Virus Antidote Kit (BVAK) \ + autoinjector for rapid application on up to two targets each, a syringe, and a bottle containing \ + the BVAK solution." + item = /obj/item/weapon/storage/box/syndie_kit/tuberculosiskit + cost = 20 + surplus = 50 + exclude_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/stealthy_weapons/traitor_chem_bottle + name = "Poison Kit" + desc = "An assortment of deadly chemicals packed into a compact box. Comes with a syringe for more precise application." + item = /obj/item/weapon/storage/box/syndie_kit/chemical + cost = 6 + surplus = 50 + +/datum/uplink_item/stealthy_weapons/dart_pistol + name = "Dart Pistol" + desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any \ + space a small item can." + item = /obj/item/weapon/gun/syringe/syndicate + cost = 4 + surplus = 50 + +/datum/uplink_item/stealthy_weapons/detomatix + name = "Detomatix PDA Cartridge" + desc = "When inserted into a personal digital assistant, this cartridge gives you four opportunities to \ + detonate PDAs of crewmembers who have their message feature enabled. \ + The concussive effect from the explosion will knock the recipient out for a short period, and deafen \ + them for longer. Beware, it has a chance to detonate your PDA." + item = /obj/item/weapon/cartridge/syndicate + cost = 6 + +/datum/uplink_item/stealthy_weapons/suppressor + name = "Universal Suppressor" + desc = "Fitted for use on any small caliber weapon with a threaded barrel, this suppressor will silence the \ + shots of the weapon for increased stealth and superior ambushing capability." + item = /obj/item/weapon/suppressor + cost = 3 + surplus = 10 + +/datum/uplink_item/stealthy_weapons/pizza_bomb + name = "Pizza Bomb" + desc = "A pizza box with a bomb taped inside it. The timer needs to be set by opening the box; afterwards, \ + opening the box again will trigger the detonation." + item = /obj/item/device/pizza_bomb + cost = 6 + surplus = 8 + +/datum/uplink_item/stealthy_weapons/dehy_carp + name = "Dehydrated Space Carp" + desc = "Looks like a plush toy carp, but just add water and it becomes a real-life space carp! Activate in \ + your hand before use so it knows not to kill you." + item = /obj/item/toy/carpplushie/dehy_carp + cost = 1 + +/datum/uplink_item/stealthy_weapons/door_charge + name = "Explosive Airlock Charge" + desc = "A small, easily concealable device. It can be applied to an open airlock panel, booby-trapping it. \ + The next person to use that airlock will trigger an explosion, knocking them down and destroying \ + the airlock maintenance panel." + item = /obj/item/device/doorCharge + cost = 2 + surplus = 10 + exclude_modes = list(/datum/game_mode/nuclear) + +// Stealth Items +/datum/uplink_item/stealthy_tools + category = "Stealth and Camouflage Items" + +/datum/uplink_item/stealthy_tools/chameleon_jumpsuit + name = "Chameleon Jumpsuit" + desc = "A jumpsuit used to imitate the uniforms of Nanotrasen crewmembers. It can change form at any time \ + to resemble another jumpsuit. May react unpredictably to electromagnetic disruptions." + item = /obj/item/clothing/under/chameleon + cost = 2 + +/datum/uplink_item/stealthy_tools/chameleon_stamp + name = "Chameleon Stamp" + desc = "A stamp that can be activated to imitate an official Nanotrasen Stamp. The disguised stamp will \ + work exactly like the real stamp and will allow you to forge false documents to gain access or equipment; \ + it can also be used in a washing machine to forge clothing." + item = /obj/item/weapon/stamp/chameleon + cost = 1 + surplus = 35 + +/datum/uplink_item/stealthy_tools/syndigaloshes + name = "No-Slip Brown Shoes" + desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \ + They do not work on heavily lubricated surfaces." + item = /obj/item/clothing/shoes/sneakers/syndigaloshes + cost = 2 + exclude_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/stealthy_tools/syndigaloshes/nuke + name = "Tactical No-Slip Brown Shoes" + desc = "These allow you to run on wet floors. They do not work on heavily lubricated surfaces, but the \ + manufacturer guarantees they're somehow better than the normal ones." + cost = 4 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/stealthy_tools/agent_card + name = "Agent Identification Card" + desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access \ + from other identification cards. The access is cumulative, so scanning one card does not erase the \ + access gained from another. In addition, they can be forged to display a new assignment and name. \ + This can be done an unlimited amount of times. Some Syndicate areas and devices can only be accessed \ + with these cards." + item = /obj/item/weapon/card/id/syndicate + cost = 2 + +/datum/uplink_item/stealthy_tools/voice_changer + name = "Voice Changer" + desc = "A conspicuous gas mask that mimics the voice named on your identification card. It can be toggled on and off." + item = /obj/item/clothing/mask/gas/voice + cost = 3 + +/datum/uplink_item/stealthy_tools/chameleon_proj + name = "Chameleon Projector" + desc = "Projects an image across a user, disguising them as an object scanned with it, as long as they don't \ + move the projector from their hand. Disguised users move slowly, and projectiles pass over them." + item = /obj/item/device/chameleon + cost = 7 + exclude_modes = list(/datum/game_mode/gang) + +/datum/uplink_item/stealthy_tools/camera_bug + name = "Camera Bug" + desc = "Enables you to view all cameras on the network and track a target. Bugging cameras allows you \ + to disable them remotely." + item = /obj/item/device/camera_bug + cost = 1 + surplus = 90 + +/datum/uplink_item/stealthy_tools/smugglersatchel + name = "Smuggler's Satchel" + desc = "This satchel is thin enough to be hidden in the gap between plating and tiling; great for stashing \ + your stolen goods. Comes with a crowbar and a floor tile inside." + item = /obj/item/weapon/storage/backpack/satchel_flat + cost = 2 + surplus = 30 + +/datum/uplink_item/stealthy_tools/stimpack + name = "Stimpack" + desc = "Stimpacks, the tool of many great heroes, make you nearly immune to stuns and knockdowns for about \ + 5 minutes after injection." + item = /obj/item/weapon/reagent_containers/syringe/stimulants + cost = 5 + surplus = 90 + +/datum/uplink_item/stealthy_tools/mulligan + name = "Mulligan" + desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity \ + and appearance." + item = /obj/item/weapon/reagent_containers/syringe/mulligan + cost = 4 + surplus = 30 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +// Devices and Tools +/datum/uplink_item/device_tools + category = "Devices and Tools" + +/datum/uplink_item/device_tools/emag + name = "Cryptographic Sequencer" + desc = "The cryptographic sequencer, electromagnetic card, or emag, is a small card that unlocks hidden functions \ + in electronic devices, subverts intended functions, and easily breaks security mechanisms." + item = /obj/item/weapon/card/emag + cost = 6 + exclude_modes = list(/datum/game_mode/gang) + +/datum/uplink_item/device_tools/toolbox + name = "Full Syndicate Toolbox" + desc = "The syndicate toolbox is a suspicious black and red. It comes loaded with a full tool set including a \ + multitool and combat gloves that are resistant to shocks and heat." + item = /obj/item/weapon/storage/toolbox/syndicate + cost = 1 + +/datum/uplink_item/device_tools/surgerybag + name = "Syndicate Surgery Dufflebag" + desc = "The Syndicate surgery dufflebag is a toolkit containing all surgery tools, surgical drapes, \ + a Syndicate brand MMI, a straitjacket, and a muzzle." + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/surgery + cost = 4 + +/datum/uplink_item/device_tools/military_belt + name = "Military Belt" + desc = "A robust seven-slot red belt that is capable of holding all manner of tatical equipment." + item = /obj/item/weapon/storage/belt/military + cost = 3 + exclude_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/device_tools/medkit + name = "Syndicate Combat Medic Kit" + desc = "This first aid kit is a suspicious brown and red. Included is a combat stimulant injector \ + for rapid healing, a medical HUD for quick identification of injured personnel, \ + and other supplies helpful for a field medic." + item = /obj/item/weapon/storage/firstaid/tactical + cost = 9 + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + + +/datum/uplink_item/device_tools/space_suit + name = "Syndicate Space Suit" + desc = "This red and black syndicate space suit is less encumbering than Nanotrasen variants, \ + fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit \ + sightings, however." + item = /obj/item/weapon/storage/box/syndie_kit/space + cost = 4 + exclude_modes = list(/datum/game_mode/gang) + +/datum/uplink_item/device_tools/hardsuit + name = "Syndicate Hardsuit" + desc = "The feared suit of a syndicate nuclear agent. Features slightly better armoring and a built in jetpack \ + that runs off standard atmospheric tanks. When the built in helmet is deployed your identity will be \ + protected, even in death, as the suit cannot be removed by outside forces. Toggling the suit in and out of \ + combat mode will allow you all the mobility of a loose fitting uniform without sacrificing armoring. \ + Additionally the suit is collapsible, making it small enough to fit within a backpack. \ + Nanotrasen crew who spot these suits are known to panic." + item = /obj/item/clothing/suit/space/hardsuit/syndi + cost = 8 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/device_tools/hardsuit/elite + name = "Elite Syndicate Hardsuit" + desc = "An advanced hardsuit with superior armor and mobility to the standard Syndicate Hardsuit." + item = /obj/item/clothing/suit/space/hardsuit/syndi/elite + cost = 8 + +/datum/uplink_item/device_tools/hardsuit/shielded + name = "Shielded Hardsuit" + desc = "An advanced hardsuit with built in energy shielding. The shields will rapidly recharge when not under fire." + item = /obj/item/clothing/suit/space/hardsuit/shielded/syndi + cost = 30 + +/datum/uplink_item/device_tools/thermal + name = "Thermal Imaging Glasses" + desc = "These goggles can be turned to resemble common eyewears throughout the station. \ + They allow you to see organisms through walls by capturing the upper portion of the infrared light spectrum, \ + emitted as heat and light by objects. Hotter objects, such as warm bodies, cybernetic organisms \ + and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks." + item = /obj/item/clothing/glasses/thermal/syndi + cost = 4 + +/datum/uplink_item/device_tools/binary + name = "Binary Translator Key" + desc = "A key that, when inserted into a radio headset, allows you to listen to and talk with silicon-based lifeforms, \ + such as AI units and cyborgs, over their private binary channel. Caution should \ + be taken while doing this, as unless they are allied with you, they are programmed to report such intrusions." + item = /obj/item/device/encryptionkey/binary + cost = 5 + surplus = 75 + +/datum/uplink_item/device_tools/encryptionkey + name = "Syndicate Encryption Key" + desc = "A key that, when inserted into a radio headset, allows you to listen to all station department channels \ + as well as talk on an encrypted Syndicate channel with other agents that have the same key." + item = /obj/item/device/encryptionkey/syndicate + cost = 2 + surplus = 75 + +/datum/uplink_item/device_tools/ai_detector + name = "Artificial Intelligence Detector" + desc = "A functional multitool that turns red when it detects an artificial intelligence watching it or its \ + holder. Knowing when an artificial intelligence is watching you is useful for knowing when to maintain cover." + item = /obj/item/device/multitool/ai_detect + cost = 1 + +/datum/uplink_item/device_tools/hacked_module + name = "Hacked AI Law Upload Module" + desc = "When used with an upload console, this module allows you to upload priority laws to an artificial intelligence. \ + Be careful with wording, as artificial intelligences may look for loopholes to exploit." + item = /obj/item/weapon/aiModule/syndicate + cost = 14 + +/datum/uplink_item/device_tools/magboots + name = "Blood-Red Magboots" + desc = "A pair of magnetic boots with a Syndicate paintjob that assist with freer movement in space or on-station \ + during gravitational generator failures. These reverse-engineered knockoffs of Nanotrasen's \ + 'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety." + item = /obj/item/clothing/shoes/magboots/syndie + cost = 3 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/device_tools/c4 + name = "Composition C-4" + desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect \ + a signaler to its wiring to make it remotely detonable. It has a modifiable timer with a \ + minimum setting of 10 seconds." + item = /obj/item/weapon/c4 + cost = 1 + +/datum/uplink_item/device_tools/powersink + name = "Power Sink" + desc = "When screwed to wiring attached to a power grid and activated, this large device places excessive \ + load on the grid, causing a stationwide blackout. The sink is large and cannot be stored in most \ + traditional bags and boxes." + item = /obj/item/device/powersink + cost = 10 + +/datum/uplink_item/device_tools/singularity_beacon + name = "Singularity Beacon" + desc = "When screwed to wiring attached to an electric grid and activated, this large device pulls any \ + active gravitational singularities towards it. This will not work when the singularity is still \ + in containment. A singularity beacon can cause catastrophic damage to a space station, \ + leading to an emergency evacuation. Because of its size, it cannot be carried. Ordering this \ + sends you a small beacon that will teleport the larger beacon to your location upon activation." + item = /obj/item/device/sbeacondrop + cost = 14 + exclude_modes = list(/datum/game_mode/gang) + +/datum/uplink_item/device_tools/syndicate_bomb + name = "Syndicate Bomb" + desc = "The Syndicate bomb is a fearsome device capable of massive destruction. It has an adjustable timer, \ + with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \ + movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ + transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ + be defused, and some crew may attempt to do so." + item = /obj/item/device/sbeacondrop/bomb + cost = 11 + +/datum/uplink_item/device_tools/syndicate_detonator + name = "Syndicate Detonator" + desc = "The Syndicate detonator is a companion device to the Syndicate bomb. Simply press the included button \ + and an encrypted radio frequency will instruct all live Syndicate bombs to detonate. \ + Useful for when speed matters or you wish to synchronize multiple bomb blasts. Be sure to stand clear of \ + the blast radius before using the detonator." + item = /obj/item/device/syndicatedetonator + cost = 3 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/device_tools/rad_laser + name = "Radioactive Microlaser" + desc = "A radioactive microlaser disguised as a standard Nanotrasen health analyzer. When used, it emits a \ + powerful burst of radiation, which, after a short delay, can incapitate all but the most protected \ + of humanoids. It has two settings: intensity, which controls the power of the radiation, \ + and wavelength, which controls how long the radiation delay is." + item = /obj/item/device/rad_laser + cost = 5 + +/datum/uplink_item/device_tools/assault_pod + name = "Assault Pod Targetting Device" + desc = "Use to select the landing zone of your assault pod." + item = /obj/item/device/assault_pod + cost = 30 + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/device_tools/shield + name = "Energy Shield" + desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending \ + against other attacks. Pair with an Energy Sword for a killer combination." + item = /obj/item/weapon/shield/energy + cost = 16 + surplus = 20 + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/device_tools/medgun + name = "Medbeam Gun" + desc = "A wonder of Syndicate engineering, the Medbeam gun, or Medi-Gun enables a medic to keep his fellow \ + operatives in the fight, even while under fire." + item = /obj/item/weapon/gun/medbeam + cost = 15 + include_modes = list(/datum/game_mode/nuclear) + + +// Implants +/datum/uplink_item/implants + category = "Implants" + +/datum/uplink_item/implants/freedom + name = "Freedom Implant" + desc = "An implant injected into the body and later activated at the user's will. It will attempt to free the \ + user from common restraints such as handcuffs." + item = /obj/item/weapon/storage/box/syndie_kit/imp_freedom + cost = 5 + +/datum/uplink_item/implants/uplink + name = "Uplink Implant" + desc = "An implant injected into the body, and later activated at the user's will. It will open a separate uplink \ + with 10 telecrystals. Undetectable, and excellent for escaping confinement." + item = /obj/item/weapon/storage/box/syndie_kit/imp_uplink + cost = 14 + surplus = 0 + +/datum/uplink_item/implants/adrenal + name = "Adrenal Implant" + desc = "An implant injected into the body, and later activated at the user's will. It will inject a chemical \ + cocktail which has a mild healing effect along with removing all stuns and increasing movement speed." + item = /obj/item/weapon/storage/box/syndie_kit/imp_adrenal + cost = 8 + +/datum/uplink_item/implants/storage + name = "Storage Implant" + desc = "An implant injected into the body, and later activated at the user's will. It will open a small subspace \ + pocket capable of storing two items." + item = /obj/item/weapon/storage/box/syndie_kit/imp_storage + cost = 8 + +/datum/uplink_item/implants/microbomb + name = "Microbomb Implant" + desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ + The more implants inside of you, the higher the explosive power. \ + This will permanently destroy your body, however." + item = /obj/item/weapon/storage/box/syndie_kit/imp_microbomb + cost = 2 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/implants/macrobomb + name = "Macrobomb Implant" + desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ + Upon death, releases a massive explosion that will wipe out everything nearby." + item = /obj/item/weapon/storage/box/syndie_kit/imp_macrobomb + cost = 20 + include_modes = list(/datum/game_mode/nuclear) + + +// Cybernetics +/datum/uplink_item/cyber_implants + category = "Cybernetic Implants" + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/cyber_implants/thermals + name = "Thermal Vision Implant" + desc = "These cybernetic eyes will give you thermal vision. They must be implanted via surgery." + item = /obj/item/organ/internal/cyberimp/eyes/thermals + cost = 8 + +/datum/uplink_item/cyber_implants/xray + name = "X-Ray Vision Implant" + desc = "These cybernetic eyes will give you X-ray vision. They must be implanted via surgery." + item = /obj/item/organ/internal/cyberimp/eyes/xray + cost = 10 + +/datum/uplink_item/cyber_implants/antistun + name = "CNS Rebooter Implant" + desc = "This implant will help you get back up on your feet faster after being stunned. \ + It must be implanted via surgery." + item = /obj/item/organ/internal/cyberimp/brain/anti_stun + cost = 12 + +/datum/uplink_item/cyber_implants/reviver + name = "Reviver Implant" + desc = "This implant will attempt to revive you if you lose consciousness. It must be implanted via surgery." + item = /obj/item/organ/internal/cyberimp/chest/reviver + cost = 8 + +/datum/uplink_item/cyber_implants/bundle + name = "Cybernetic Implants Bundle" + desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. \ + They must be implanted via surgery." + item = /obj/item/weapon/storage/box/cyber_implants + cost = 40 + +// Pointless +/datum/uplink_item/badass + category = "(Pointless) Badassery" + surplus = 0 + +/datum/uplink_item/badass/syndiecigs + name = "Syndicate Smokes" + desc = "Strong flavor, dense smoke, infused with omnizine." + item = /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate + cost = 2 + +/datum/uplink_item/badass/bundle + name = "Syndicate Bundle" + desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. \ + These items are collectively worth more than 20 telecrystals, but you do not know which specialisation \ + you will receive." + item = /obj/item/weapon/storage/box/syndicate + cost = 20 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/badass/syndiecards + name = "Syndicate Playing Cards" + desc = "A special deck of space-grade playing cards with a mono-molecular edge and metal reinforcement, \ + making them slightly more robust than a normal deck of cards. \ + You can also play card games with them or leave them on your victims." + item = /obj/item/toy/cards/deck/syndicate + cost = 1 + surplus = 40 + +/datum/uplink_item/badass/syndiecash + name = "Syndicate Briefcase Full of Cash" + desc = "A secure briefcase containing 5000 space credits. Useful for bribing personnel, or purchasing goods \ + and services at lucrative prices. The briefcase also feels a little heavier to hold; it has been \ + manufactured to pack a little bit more of a punch if your client needs some convincing." + item = /obj/item/weapon/storage/secure/briefcase/syndie + cost = 1 + +/datum/uplink_item/badass/balloon + name = "Syndicate Balloon" + desc = "For showing that you are THE BOSS: A useless red balloon with the Syndicate logo on it. \ + Can blow the deepest of covers." + item = /obj/item/toy/syndicateballoon + cost = 20 + +/datum/uplink_item/badass/surplus + name = "Syndicate Surplus Crate" + desc = "A dusty crate from the back of the Syndicate warehouse. Rumored to contain a valuable assortion of items, \ + but you never know. Contents are sorted to always be worth 50 TC." + cost = 20 + item = /obj/item/weapon/storage/box/syndicate + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) + +/datum/uplink_item/badass/surplus_crate/spawn_item(turf/loc, obj/item/device/uplink/U) + var/list/uplink_items = get_uplink_items() + + var/crate_value = 50 + var/obj/structure/closet/crate/C = new(loc) + while(crate_value) + var/category = pick(uplink_items) + var/item = pick(uplink_items[category]) + var/datum/uplink_item/I = uplink_items[category][item] + + if(!prob(I.surplus)) + continue + if(crate_value < I.cost) + continue + crate_value -= I.cost + new I.item(C) + U.purchase_log += "\icon[I.item]" + + return C + +/datum/uplink_item/badass/random + name = "Random Item" + desc = "Picking this will purchase a random item. Useful if you have some TC to spare or if you haven't \ + decided on a strategy yet." + item = /obj/item/weapon/storage/box/syndicate + cost = 0 + +/datum/uplink_item/badass/random/spawn_item(turf/loc, obj/item/device/uplink/U) + var/list/uplink_items = get_uplink_items() + var/list/possible_items = list() + for(var/category in uplink_items) + for(var/item in uplink_items[category]) + var/datum/uplink_item/I = uplink_items[category][item] + if(src == I || !I.item) + continue + if(U.telecrystals < I.cost) + continue + possible_items += I + + if(possible_items.len) + var/datum/uplink_item/I = pick(possible_items) + U.telecrystals -= I.cost + feedback_add_details("traitor_uplink_items_bought","RN") + return new I.item(loc) \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 95d83e7c1da..6476aa5b045 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -190,7 +190,6 @@ #include "code\datums\recipe.dm" #include "code\datums\spell.dm" #include "code\datums\supplypacks.dm" -#include "code\datums\uplink_item.dm" #include "code\datums\votablemap.dm" #include "code\datums\diseases\_disease.dm" #include "code\datums\diseases\_MobProcs.dm" @@ -644,7 +643,6 @@ #include "code\game\objects\items\devices\taperecorder.dm" #include "code\game\objects\items\devices\traitordevices.dm" #include "code\game\objects\items\devices\transfer_valve.dm" -#include "code\game\objects\items\devices\uplink.dm" #include "code\game\objects\items\devices\PDA\cart.dm" #include "code\game\objects\items\devices\PDA\PDA.dm" #include "code\game\objects\items\devices\PDA\radio.dm" @@ -1608,6 +1606,8 @@ #include "code\modules\tgui\states\states.dm" #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tooltip\tooltip.dm" +#include "code\modules\uplink\uplink.dm" +#include "code\modules\uplink\uplink_item.dm" #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\pimpin_ride.dm" #include "code\modules\vehicles\secway.dm" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index c77b95d7b45..d1b64d99b67 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -7,5 +7,5 @@ this.children.push(t),this.totalChildren+=1,this.outroChildren+=1},decrementOutr t.removeEventListener("blur",ir,!1)}});var kp=wp,Ep=kp.extend({getInitialValue:function(){return this.element.fragment?""+this.element.fragment:""},getValue:function(){return this.element.node.innerHTML}}),Sp=Ep,Op=or,Ap={},Pp=xp.extend({name:"checked",init:function(){this.siblings=Op(this.root._guid,"radio",this.element.getAttribute("name")),this.siblings.push(this)},render:function(){var t=this.element.node;t.addEventListener("change",_p,!1),t.attachEvent&&t.addEventListener("click",_p,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",_p,!1),t.removeEventListener("click",_p,!1)},handleChange:function(){ys.start(this.root),this.siblings.forEach(function(t){t.root.viewmodel.set(t.keypath,t.getValue())}),ys.end()},getValue:function(){return this.element.node.checked},unbind:function(){R(this.siblings,this)}}),Cp=Pp,Tp=xp.extend({name:"name",init:function(){this.siblings=Op(this.root._guid,"radioname",this.keypath.str),this.siblings.push(this),this.radioName=!0},getInitialValue:function(){return this.element.getAttribute("checked")?this.element.getAttribute("value"):void 0},render:function(){var t=this.element.node;t.name="{{"+this.keypath.str+"}}",t.checked=this.root.viewmodel.get(this.keypath)==this.element.getAttribute("value"),t.addEventListener("change",_p,!1),t.attachEvent&&t.addEventListener("click",_p,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",_p,!1),t.removeEventListener("click",_p,!1)},getValue:function(){var t=this.element.node;return t._ractive?t._ractive.value:t.value},handleChange:function(){this.element.node.checked&&xp.prototype.handleChange.call(this)},rebound:function(t,e){var n;xp.prototype.rebound.call(this,t,e),(n=this.element.node)&&(n.name="{{"+this.keypath.str+"}}")},unbind:function(){R(this.siblings,this)}}),jp=Tp,Mp=xp.extend({name:"name",getInitialValue:function(){return this.noInitialValue=!0,[]},init:function(){var t,e;this.checkboxName=!0,this.siblings=Op(this.root._guid,"checkboxes",this.keypath.str),this.siblings.push(this),this.noInitialValue&&(this.siblings.noInitialValue=!0),this.siblings.noInitialValue&&this.element.getAttribute("checked")&&(t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),t.push(e))},unbind:function(){R(this.siblings,this)},render:function(){var t,e,n=this.element.node;t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),a(t)?this.isChecked=M(t,e):this.isChecked=t==e,n.name="{{"+this.keypath.str+"}}",n.checked=this.isChecked,n.addEventListener("change",_p,!1),n.attachEvent&&n.addEventListener("click",_p,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",_p,!1),t.removeEventListener("click",_p,!1)},changed:function(){var t=!!this.isChecked;return this.isChecked=this.element.node.checked,this.isChecked===t},handleChange:function(){this.isChecked=this.element.node.checked,xp.prototype.handleChange.call(this)},getValue:function(){return this.siblings.filter(sr).map(ur)}}),Fp=Mp,Np=xp.extend({name:"checked",render:function(){var t=this.element.node;t.addEventListener("change",_p,!1),t.attachEvent&&t.addEventListener("click",_p,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",_p,!1),t.removeEventListener("click",_p,!1)},getValue:function(){return this.element.node.checked}}),Lp=Np,Rp=xp.extend({getInitialValue:function(){var t,e,n,r,i=this.element.options;if(void 0===this.element.getAttribute("value")&&(e=t=i.length,t)){for(;e--;)if(i[e].getAttribute("selected")){n=i[e].getAttribute("value"),r=!0;break}if(!r)for(;++ee;e+=1)if(r=t[e],t[e].selected)return i=r._ractive?r._ractive.value:r.value},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,ys.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))}}),Ip=Rp,Dp=Ip.extend({getInitialValue:function(){return this.element.options.filter(function(t){return t.getAttribute("selected")}).map(function(t){return t.getAttribute("value")})},render:function(){var t;this.element.node.addEventListener("change",_p,!1),t=this.root.viewmodel.get(this.keypath),void 0===t&&this.handleChange()},unrender:function(){this.element.node.removeEventListener("change",_p,!1)},setValue:function(){throw Error("TODO not implemented yet")},getValue:function(){var t,e,n,r,i,a;for(t=[],e=this.element.node.options,r=e.length,n=0;r>n;n+=1)i=e[n],i.selected&&(a=i._ractive?i._ractive.value:i.value,t.push(a));return t},handleChange:function(){var t,e,n;return t=this.attribute,e=t.value,n=this.getValue(),void 0!==e&&F(n,e)||Ip.prototype.handleChange.call(this),this},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,ys.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))},updateModel:function(){void 0!==this.attribute.value&&this.attribute.value.length||this.root.viewmodel.set(this.keypath,this.initialValue)}}),Up=Dp,Vp=xp.extend({render:function(){this.element.node.addEventListener("change",_p,!1)},unrender:function(){this.element.node.removeEventListener("change",_p,!1)},getValue:function(){return this.element.node.files}}),qp=Vp,Bp=kp.extend({getInitialValue:function(){},getValue:function(){var t=parseFloat(this.element.node.value);return isNaN(t)?void 0:t}}),Wp=cr,zp=fr,Hp=pr,Gp=hr,Kp=dr,$p=/^event(?:\.(.+))?/,Qp=yr,Yp=br,Jp={},Xp={touchstart:!0,touchmove:!0,touchend:!0,touchcancel:!0,touchleave:!0},Zp=xr,th=_r,eh=kr,nh=Er,rh=Sr,ih=function(t,e,n){this.init(t,e,n)};ih.prototype={bubble:zp,fire:Hp,getAction:Gp,init:Kp,listen:Yp,rebind:Zp,render:th,resolve:eh,unbind:nh,unrender:rh};var ah=ih,oh=function(t,e){var n,r,i,a,o=[];for(r in e)if(e.hasOwnProperty(r))for(i=r.split("-"),n=i.length;n--;)a=new ah(t,i[n],e[r]),o.push(a);return o},sh=function(t,e){var n,r,i,a=this;this.element=t,this.root=n=t.root,r=e.n||e,("string"==typeof r||(i=new iv({template:r,root:n,owner:t}),r=""+i,i.unbind(),""!==r))&&(e.a?this.params=e.a:e.d&&(this.fragment=new iv({template:e.d,root:n,owner:t}),this.params=this.fragment.getArgsList(),this.fragment.bubble=function(){this.dirtyArgs=this.dirtyValue=!0,a.params=this.getArgsList(),a.ready&&a.update()}),this.fn=g("decorators",n,r),this.fn||f(Do(r,"decorator")))};sh.prototype={init:function(){var t,e,n;if(t=this.element.node,this.params?(n=[t].concat(this.params),e=this.fn.apply(this.root,n)):e=this.fn.call(this.root,t),!e||!e.teardown)throw Error("Decorator definition must return an object with a teardown method");this.actual=e,this.ready=!0},update:function(){this.actual.update?this.actual.update.apply(this.root,this.params):(this.actual.teardown(!0),this.init())},rebind:function(t,e){this.fragment&&this.fragment.rebind(t,e)},teardown:function(t){this.torndown=!0,this.ready&&this.actual.teardown(),!t&&this.fragment&&this.fragment.unbind()}};var uh,ch,lh,fh=sh,ph=Mr,hh=Fr,dh=Ur,mh=function(t){return t.replace(/-([a-zA-Z])/g,function(t,e){return e.toUpperCase()})};Xa?(ch={},lh=lo("div").style,uh=function(t){var e,n,r;if(t=mh(t),!ch[t])if(void 0!==lh[t])ch[t]=t;else for(r=t.charAt(0).toUpperCase()+t.substring(1),e=io.length;e--;)if(n=io[e],void 0!==lh[n+r]){ch[t]=n+r;break}return ch[t]}):uh=null;var vh,gh,yh=uh;Xa?(gh=window.getComputedStyle||Ao.getComputedStyle,vh=function(t){var e,n,r,i,o;if(e=gh(this.node),"string"==typeof t)return o=e[yh(t)],"0px"===o&&(o=0),o;if(!a(t))throw Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(n={},r=t.length;r--;)i=t[r],o=e[yh(i)],"0px"===o&&(o=0),n[i]=o;return n}):vh=null;var bh=vh,wh=function(t,e){var n;if("string"==typeof t)this.node.style[yh(t)]=e;else for(n in t)t.hasOwnProperty(n)&&(this.node.style[yh(n)]=t[n]);return this},xh=function(t){var e;this.duration=t.duration,this.step=t.step,this.complete=t.complete,"string"==typeof t.easing?(e=t.root.easing[t.easing],e||(v(Do(t.easing,"easing")),e=Vr)):e="function"==typeof t.easing?t.easing:Vr,this.easing=e,this.start=ns(),this.end=this.start+this.duration,this.running=!0,xs.add(this)};xh.prototype={tick:function(t){var e,n;return this.running?t>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var _h,kh,Eh,Sh,Oh,Ah,Ph,Ch,Th=xh,jh=RegExp("^-(?:"+io.join("|")+")-"),Mh=function(t){return t.replace(jh,"")},Fh=RegExp("^(?:"+io.join("|")+")([A-Z])"),Nh=function(t){var e;return t?(Fh.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Lh={},Rh={};Xa?(kh=lo("div").style,function(){void 0!==kh.transition?(Eh="transition",Sh="transitionend",Oh=!0):void 0!==kh.webkitTransition?(Eh="webkitTransition",Sh="webkitTransitionEnd",Oh=!0):Oh=!1}(),Eh&&(Ah=Eh+"Duration",Ph=Eh+"Property",Ch=Eh+"TimingFunction"),_h=function(t,e,n,r,i){setTimeout(function(){var a,o,s,u,c;u=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),i())},a=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Ph]=r.map(yh).map(Nh).join(","),t.node.style[Ch]=Nh(n.easing||"linear"),t.node.style[Ah]=n.duration/1e3+"s",c=function(e){var n;n=r.indexOf(mh(Mh(e.propertyName))),-1!==n&&r.splice(n,1),r.length||(t.node.removeEventListener(Sh,c,!1),s=!0,u())},t.node.addEventListener(Sh,c,!1),setTimeout(function(){for(var i,l,f,p,h,d=r.length,v=[];d--;)p=r[d],i=a+p,Oh&&!Rh[i]&&(t.node.style[yh(p)]=e[p],Lh[i]||(l=t.getStyle(p),Lh[i]=t.getStyle(p)!=e[p],Rh[i]=!Lh[i],Rh[i]&&(t.node.style[yh(p)]=l))),(!Oh||Rh[i])&&(void 0===l&&(l=t.getStyle(p)),f=r.indexOf(p),-1===f?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):r.splice(f,1),h=/[^\d]*$/.exec(e[p])[0],v.push({name:yh(p),interpolator:Vo(parseFloat(l),parseFloat(e[p])),suffix:h}));v.length?new Th({root:t.root,duration:n.duration,easing:mh(n.easing||""),step:function(e){var n,r;for(r=v.length;r--;)n=v[r],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,u()}}):o=!0,r.length||(t.node.removeEventListener(Sh,c,!1),s=!0,u())},0)},n.delay||0)}):_h=null;var Ih,Dh,Uh,Vh,qh,Bh=_h;if("undefined"!=typeof document){if(Ih="hidden",qh={},Ih in document)Uh="";else for(Vh=io.length;Vh--;)Dh=io[Vh],Ih=Dh+"Hidden",Ih in document&&(Uh=Dh);void 0!==Uh?(document.addEventListener(Uh+"visibilitychange",qr),qr()):("onfocusout"in document?(document.addEventListener("focusout",Br),document.addEventListener("focusin",Wr)):(window.addEventListener("pagehide",Br),window.addEventListener("blur",Br),window.addEventListener("pageshow",Wr),window.addEventListener("focus",Wr)),qh.hidden=!1)}var Wh,zh,Hh,Gh=qh;Xa?(zh=window.getComputedStyle||Ao.getComputedStyle,Wh=function(t,e,n){var r,i=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Gh.hidden)return this.setStyle(t,e),Hh||(Hh=cs.resolve());"string"==typeof t?(r={},r[t]=e):(r=t,n=e),n||(v('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var a=new cs(function(t){var e,a,o,s,u,c,l;if(!n.duration)return i.setStyle(r),void t();for(e=Object.keys(r),a=[],o=zh(i.node),u={},c=e.length;c--;)l=e[c],s=o[yh(l)],"0px"===s&&(s=0),s!=r[l]&&(a.push(l),i.node.style[yh(l)]=s);return a.length?void Bh(i,r,n,a,t):void t()});return a}):Wh=null;var Kh=Wh,$h=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),i({},t,e)},Qh=zr,Yh=function(t,e,n){this.init(t,e,n)};Yh.prototype={init:dh,start:Qh,getStyle:bh,setStyle:wh,animateStyle:Kh,processParams:$h};var Jh,Xh,Zh=Yh,td=Gr;Jh=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xh=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var ed=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xr).join("")+this.conditionalAttributes.map(Xr).join(""),"option"===this.name&&Yr(this)&&(t+=" selected"),"input"===this.name&&Jr(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Ee(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),al.test(this.template.e)||(t+=""),t)},nd=Zr,rd=ti,id=function(t){this.init(t)};id.prototype={bubble:jf,detach:Mf,find:Ff,findAll:Nf,findAllComponents:Lf,findComponent:Rf,findNextNode:If,firstNode:Df,getAttribute:Uf,init:ph,rebind:hh,render:td,toString:ed,unbind:nd,unrender:rd};var ad=id,od=/^\s*$/,sd=/^\s*/,ud=function(t){var e,n,r,i;return e=t.split("\n"),n=e[0],void 0!==n&&od.test(n)&&e.shift(),r=L(e),void 0!==r&&od.test(r)&&e.pop(),i=e.reduce(ni,null),i&&(t=e.map(function(t){return t.replace(i,"")}).join("\n")),t},cd=ri,ld=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},fd='Could not find template for partial "%s"',pd=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Pc,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Wl.init(this,t),this.keypath||((n=cd(this.root,this.name,e))?(wl.call(this),this.isNamed=!0,this.setTemplate(n)):v(fd,this.name))};pd.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||Bl.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Wl.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=cd(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=cd(this.root,this.name,this.parentFragment))&&(wl.call(this),this.isNamed=!0),e||v(fd,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&ys.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new iv({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,r,i;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===kc?(r=n.text.split("\n").pop(),(i=/^\s+$/.exec(r))?ld(e,i[0]):e):e},unbind:function(){this.isNamed||wl.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null),this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var hd,dd,md,vd=pd,gd=ui,yd=ci,bd=new as("detach"),wd=li,xd=fi,_d=pi,kd=hi,Ed=di,Sd=mi,Od=function(t,e,n,r){var i=t.root,a=t.keypath;r?i.viewmodel.smartUpdate(a,e,r):i.viewmodel.mark(a)},Ad=[],Pd=["pop","push","reverse","shift","sort","splice","unshift"];Pd.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),r=0;e>r;r++)n[r]=arguments[r];var i,a,o,s;for(i=yu(this,t,n),a=Array.prototype[t].apply(this,arguments),ys.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],ys.addRactive(o.root),Od(o,this,t,i);return ys.end(),this._ractive.setting=!1,a};So(Ad,t,{value:e})}),hd={},hd.__proto__?(dd=function(t){t.__proto__=Ad},md=function(t){t.__proto__=Array.prototype}):(dd=function(t){var e,n;for(e=Pd.length;e--;)n=Pd[e],So(t,n,{value:Ad[n],configurable:!0})},md=function(t){var e;for(e=Pd.length;e--;)delete t[Pd[e]]}),dd.unpatch=md;var Cd,Td,jd,Md=dd;Cd={filter:function(t){return a(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Td(t,e,n)}},Td=function(t,e,n){this.root=t,this.value=e,this.keypath=E(n),e._ractive||(So(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Md(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Td.prototype={get:function(){return this.value},teardown:function(){var t,e,n,r,i;if(t=this.value,e=t._ractive,n=e.wrappers,r=e.instances,e.setting)return!1;if(i=n.indexOf(this),-1===i)throw Error(jd);if(n.splice(i,1),n.length){if(r[this.root._guid]-=1,!r[this.root._guid]){if(i=r.indexOf(this.root),-1===i)throw Error(jd);r.splice(i,1)}}else delete t._ractive,Md.unpatch(this.value)}},jd="Something went wrong in a rather interesting way";var Fd,Nd,Ld=Cd,Rd=/^\s*[0-9]+\s*$/,Id=function(t){return Rd.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),Fd={filter:function(t,e,n){var r,i;return e?(e=E(e),(r=n.viewmodel.wrapped[e.parent.str])&&!r.magic?!1:(i=n.viewmodel.get(e.parent),a(i)&&/^[0-9]+$/.test(e.lastKey)?!1:i&&("object"==typeof i||"function"==typeof i))):!1},wrap:function(t,e,n){return new Nd(t,e,n)}},Nd=function(t,e,n){var r,i,a;return n=E(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,r=n.parent,this.obj=r.isRoot?t.viewmodel.data:t.viewmodel.get(r),i=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),i&&i.set&&(a=i.set._ractiveWrappers)?void(-1===a.indexOf(this)&&a.push(this)):void vi(this,e,i)},Nd.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,ys.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Id(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,r,i;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(r=e._ractiveWrappers,i=r.indexOf(this),-1!==i&&r.splice(i,1),r.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Po){Fd=!1}var Dd,Ud,Vd=Fd;Vd&&(Dd={filter:function(t,e,n){return Vd.filter(t,e,n)&&Ld.filter(t)},wrap:function(t,e,n){return new Ud(t,e,n)}},Ud=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=Vd.wrap(t,e,n),this.arrayWrapper=Ld.wrap(t,e,n)},Ud.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var qd=Dd,Bd=gi,Wd={},zd=wi,Hd=xi,Gd=Ei,Kd=Ci,$d=Ti,Qd=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};Qd.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var Yd=Qd,Jd=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jd.prototype={constructor:Jd,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,r=!1;if(this.getting){var i="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return d(i),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?r=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,i,a;if(!r)for(a=t.length;a--;)if(e=t[a],i=n.viewmodel.get(e),!s(i,n.depValues[e.str]))return n.depValues[e.str]=i,void(r=!0)}),r){this.viewmodel.capture();try{this.value=this.getter()}catch(a){m('Failed to compute "%s"',this.key.str),p(a.stack||a),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,r,i,a;for(n=this.softDeps,e=n.length;e--;)r=n[e],-1===t.indexOf(r)&&(i=!0,this.viewmodel.unregister(r,this,"computed"));for(e=t.length;e--;)r=t[e],-1!==n.indexOf(r)||this.hardDeps&&-1!==this.hardDeps.indexOf(r)||(i=!0,ji(this.viewmodel,r)&&!this.unresolvedDeps[r.str]?(a=new Yd(this,r.str),t.splice(e,1),this.unresolvedDeps[r.str]=a,ys.addUnresolved(a)):this.viewmodel.register(r,this,"computed"));return i&&(this.softDeps=t.slice()),i}};var Xd=Jd,Zd=Mi,tm={FAILED_LOOKUP:!0},em=Fi,nm={},rm=Li,im=Ri,am=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};am.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var r,i;if(this.resolved){for(r=this.deps,i=r.length;i--;)if(r[i].dep===e){r.splice(i,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Ii,sm=function(t,e){var n,r,i,a;return n={},r=0,i=t.map(function(t,i){var o,s,u;s=r,u=e.length;do{if(o=e.indexOf(t,s),-1===o)return a=!0,-1;s=o+1}while(n[o]&&u>s);return o===r&&(r+=1),o!==i&&(a=!0),n[o]=!0,o})},um=Di,cm={},lm=qi,fm=Wi,pm=zi,hm=Hi,dm=Ki,mm={implicit:!0},vm={noCascade:!0},gm=Qi,ym=Yi,bm=function(t){var e,n,r=t.adapt,i=t.data,a=t.ractive,o=t.computed,s=t.mappings;this.ractive=a,this.adaptors=r,this.onchange=t.onchange,this.cache={},this.cacheMap=Eo(null),this.deps={computed:Eo(null),"default":Eo(null)},this.depsMap={computed:Eo(null),"default":Eo(null)},this.patternObservers=[],this.specials=Eo(null),this.wrapped=Eo(null),this.computations=Eo(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=i,this.mappings=Eo(null);for(e in s)this.map(E(e),s[e]);if(i)for(e in i)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(i[e]);for(e in o)s&&e in s&&f("Cannot map to a computed property ('%s')",e),this.compute(E(e),o[e]);this.ready=!0};bm.prototype={adapt:Bd,applyChanges:Gd,capture:Kd,clearCache:$d,compute:Zd,get:em,init:rm,map:im,mark:om,merge:um,register:lm,release:fm,reset:pm,set:hm,smartUpdate:dm,teardown:gm,unregister:ym};var wm=bm;Xi.prototype={constructor:Xi,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zi(this.queue,e).push(t):ta(this,t),delete this.inProcess[t._guid]}};var xm=Xi,_m=ea,km=/\$\{([^\}]+)\}/g,Em=new as("construct"),Sm=new as("config"),Om=new xm("init"),Am=0,Pm=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Cm=aa,Tm=la;la.prototype={bubble:function(){this.dirty||(this.dirty=!0,ys.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var jm=function(t,e,n,i,o){var s,u,c,l,f,p,h={},d={},v={},g=[];for(u=t.parentFragment,c=t.root,o=o||{},r(h,o),o.content=i||[],h[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),l=u;l;){if(l.owner.type===Mc){f=l.owner.container;break}l=l.parent}return n&&Object.keys(n).forEach(function(e){var r,i,o=n[e];if("string"==typeof o)r=pl(o),d[e]=r?r.value:o;else if(0===o)d[e]=!0;else{if(!a(o))throw Error("erm wut");pa(o)?(v[e]={origin:t.root.viewmodel,keypath:void 0},i=fa(t,o[0],function(t){t.isSpecial?p?s.set(e,t.value):(d[e]=t.value,delete v[e]):p?s.viewmodel.mappings[e].resolve(t):v[e].keypath=t})):i=new Tm(t,o,function(t){p?s.set(e,t):d[e]=t}),g.push(i)}}),s=Eo(e.prototype),Cm(s,{el:null,append:!0,data:d,partials:o,magic:c.magic||e.defaults.magic,modifyArrays:c.modifyArrays,adapt:c.adapt},{parent:c,component:t,container:f,mappings:v,inlinePartials:h,cssIds:u.cssIds}),p=!0,t.resolvers=g,s},Mm=ha,Fm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},Nm=ma,Lm=va,Rm=ga,Im=ya,Dm=ba,Um=new as("teardown"),Vm=xa,qm=function(t,e){this.init(t,e)};qm.prototype={detach:yd,find:wd,findAll:xd,findAllComponents:_d,findComponent:kd,findNextNode:Ed,firstNode:Sd,init:Nm,rebind:Lm,render:Rm,toString:Im,unbind:Dm,unrender:Vm};var Bm=qm,Wm=function(t){this.type=Cc,this.value=t.template.c};Wm.prototype={detach:gl,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Wm,Hm=function(t){var e,n;this.type=Mc,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var r=this.name=t.template.n||"",i=e._inlinePartials[r];i||(m('Could not find template for partial "'+r+'"',{ractive:t.root}),i=[]),this.fragment=new iv({owner:this,root:e.parent,template:i,pElement:this.containerFragment.pElement}),a(n.yielders[r])?n.yielders[r].push(this):n.yielders[r]=[this],ys.scheduleTask(function(){if(n.yielders[r].length>1)throw Error("A component template can only have one {{yield"+(r?" "+r:"")+"}} declaration at a time")})};Hm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),R(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Gm=Hm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var $m=Km,Qm=_a,Ym=Ea,Jm=Sa,Xm=Oa,Zm=Ca,tv=ja,ev=function(t){this.init(t)};ev.prototype={bubble:lc,detach:fc,find:pc,findAll:hc,findAllComponents:dc,findComponent:mc,findNextNode:vc,firstNode:gc,getArgsList:dl,getNode:ml,getValue:vl,init:Qm,rebind:Ym,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tv};var nv,rv,iv=ev,av=Ma,ov=["template","partials","components","decorators","events"],sv=new as("reset"),uv=function(t,e){function n(e,r,i){i&&i.partials[t]||e.forEach(function(e){e.type===Pc&&e.getPartialName()===t&&r.push(e),e.fragment&&n(e.fragment.items,r,i),a(e.fragments)?n(e.fragments,r,i):a(e.items)?n(e.items,r,i):e.type===jc&&e.instance&&n(e.instance.fragment.items,r,e.instance),e.type===Ac&&(a(e.attributes)&&n(e.attributes,r,i),a(e.conditionalAttributes)&&n(e.conditionalAttributes,r,i))})}var r,i=[];return n(this.fragment.items,i),this.partials[t]=e,r=ys.start(this,!0),i.forEach(function(e){e.value=void 0,e.setValue(t)}),ys.end(),r},cv=Fa,lv=wu("reverse"),fv=Na,pv=wu("shift"),hv=wu("sort"),dv=wu("splice"),mv=Ra,vv=Ia,gv=new as("teardown"),yv=Ua,bv=Va,wv=qa,xv=new as("unrender"),_v=wu("unshift"),kv=Ba,Ev=new as("update"),Sv=Wa,Ov={add:Zo,animate:Es,detach:Os,find:Ps,findAll:Is,findAllComponents:Ds,findComponent:Us,findContainer:Vs,findParent:qs,fire:Hs,get:Gs,insert:$s,merge:Ys,observe:fu,observeOnce:pu,off:mu,on:vu,once:gu,pop:xu,push:_u,render:Tu,reset:av,resetPartial:uv,resetTemplate:cv,reverse:lv,set:fv,shift:pv,sort:hv,splice:dv,subtract:mv,teardown:vv,toggle:yv,toHTML:bv,toHtml:bv,unrender:wv,unshift:_v,update:kv,updateModel:Sv},Av=function(t,e,n){return n||Ha(t,e)?function(){var n,r="_super"in this,i=this._super;return this._super=e,n=t.apply(this,arguments),r&&(this._super=i),n}:t},Pv=Ga,Cv=Ya,Tv=function(t){var e,n,r={};return t&&(e=t._ractive)?(r.ractive=e.root,r.keypath=e.keypath.str, r.index={},(n=Cl(e.proxy.parentFragment))&&(r.index=Cl.resolve(n)),r):r};nv=function(t){return this instanceof nv?void Cm(this,t):new nv(t)},rv={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Cv},getNodeInfo:{value:Tv},parse:{value:Gu},Promise:{value:cs},svg:{value:ro},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:uo},events:{writable:!0,value:{}},interpolators:{writable:!0,value:Bo},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Oo(nv,rv),nv.prototype=r(Ov,so),nv.prototype.constructor=nv,nv.defaults=nv.prototype;var jv="function";if(typeof Date.now!==jv||typeof String.prototype.trim!==jv||typeof Object.keys!==jv||typeof Array.prototype.indexOf!==jv||typeof Array.prototype.forEach!==jv||typeof Array.prototype.map!==jv||typeof Array.prototype.filter!==jv||"undefined"!=typeof window&&typeof window.addEventListener!==jv)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Mv=nv;return Mv})},{}],197:[function(t,e,n){!function(){function t(t,e,n){return t.call.apply(t.bind,arguments)}function n(t,e,n){if(!t)throw Error();if(2r;r++)if(n[r]==e)return!0;return!1}function l(t){if("string"==typeof t.f)return t.f;var e=t.m.location.protocol;return"about:"==e&&(e=t.a.location.protocol),"https:"==e?"https:":"http:"}function f(t){return t.m.location.hostname||t.a.location.hostname}function p(t,e,n){function r(){c&&i&&s&&(c(u),c=null)}e=a(t,"link",{rel:"stylesheet",href:e,media:"all"});var i=!1,s=!0,u=null,c=n||null;it?(e.onload=function(){i=!0,r()},e.onerror=function(){i=!0,u=Error("Stylesheet failed to load"),r()}):setTimeout(function(){i=!0,r()},0),o(t,"head",e)}function h(t,e,n,r){var i=t.c.getElementsByTagName("head")[0];if(i){var o=a(t,"script",{src:e}),s=!1;return o.onload=o.onreadystatechange=function(){s||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(s=!0,n&&n(null),o.onload=o.onreadystatechange=null,"HEAD"==o.parentNode.tagName&&i.removeChild(o))},i.appendChild(o),setTimeout(function(){s||(s=!0,n&&n(Error("Script load timeout")))},r||5e3),o}return null}function d(){this.a=0,this.c=null}function m(t){return t.a++,function(){t.a--,g(t)}}function v(t,e){t.c=e,g(t)}function g(t){0==t.a&&t.c&&(t.c(),t.c=null)}function y(t){this.a=t||"-"}function b(t,e){this.c=t,this.f=4,this.a="n";var n=(e||"n4").match(/^([nio])([1-9])$/i);n&&(this.a=n[1],this.f=parseInt(n[2],10))}function w(t){return k(t)+" "+(t.f+"00")+" 300px "+x(t.c)}function x(t){var e=[];t=t.split(/,\s*/);for(var n=0;nparseInt(t[1],10)||536===parseInt(t[1],10)&&11>=parseInt(t[2],10))}return ot}function I(t,e,n){for(var r in at)if(at.hasOwnProperty(r)&&e===t.f[at[r]]&&n===t.f[at[r]])return!0;return!1}function D(t){var e,n=t.g.a.offsetWidth,r=t.h.a.offsetWidth;(e=n===t.f.serif&&r===t.f["sans-serif"])||(e=R()&&I(t,n,r)),e?rt()-t.A>=t.w?R()&&I(t,n,r)&&(null===t.u||t.u.hasOwnProperty(t.a.c))?V(t,t.v):V(t,t.B):U(t):V(t,t.v)}function U(t){setTimeout(r(function(){D(this)},t),50)}function V(t,e){setTimeout(r(function(){s(this.g.a),s(this.h.a),s(this.j.a),s(this.o.a),e(this.a)},t),0)}function q(t,e,n){this.c=t,this.a=e,this.f=0,this.o=this.j=!1,this.s=n}function B(t){0==--t.f&&t.j&&(t.o?(t=t.a,t.g&&u(t.f,[t.a.c("wf","active")],[t.a.c("wf","loading"),t.a.c("wf","inactive")]),P(t,"active")):A(t.a))}function W(t){this.j=t,this.a=new C,this.h=0,this.f=this.g=!0}function z(t,e,n,i,a){var o=0==--t.h;(t.f||t.g)&&setTimeout(function(){var t=a||null,s=i||null||{};if(0===n.length&&o)A(e.a);else{e.f+=n.length,o&&(e.j=o);var c,l=[];for(c=0;ce;e++)r[e].load(function(e,n,r){z(t,a,e,n,r)})}function G(t,e){this.c=t,this.a=e}function K(t,e,n){var r=l(t.c);return t=(t.a.api||"fast.fonts.net/jsapi").replace(/^.*http(s?):(\/\/)?/,""),r+"//"+t+"/"+e+".js"+(n?"?v="+n:"")}function $(t,e){this.c=t,this.a=e}function Q(t,e,n){t?this.c=t:this.c=e+ut,this.a=[],this.f=[],this.g=n||""}function Y(t,e){for(var n=e.length,r=0;n>r;r++){var i=e[r].split(":");3==i.length&&t.f.push(i.pop());var a="";2==i.length&&""!=i[1]&&(a=":"),t.a.push(i.join(a))}}function J(t){if(0==t.a.length)throw Error("No fonts to load!");if(-1!=t.c.indexOf("kit="))return t.c;for(var e=t.a.length,n=[],r=0;e>r;r++)n.push(t.a[r].replace(/ /g,"+"));return e=t.c+"?family="+n.join("%7C"),0n;n++){var r=t.f[n].split(":"),i=r[0].replace(/\+/g," "),a=["n4"];if(2<=r.length){var o,s=r[1];if(o=[],s)for(var s=s.split(","),u=s.length,c=0;u>c;c++){var l;if(l=s[c],l.match(/^[\w-]+$/)){var f=pt.exec(l.toLowerCase());if(null==f)l="";else{if(l=f[2],l=null==l||""==l?"n":ft[l],f=f[1],null==f||""==f)f="4";else var p=lt[f],f=p?p:isNaN(f)?"4":f.substr(0,1);l=""+l+f}}else l="";l&&o.push(l)}0=n.j?n.f(n.a):e.fonts.load(w(n.a),n.h).then(function(e){1<=e.length?n.g(n.a):setTimeout(t,25)},function(){n.f(n.a)})}var e=this.c.m.document,n=this,r=rt();t()};var at={D:"serif",C:"sans-serif"},ot=null;L.prototype.start=function(){this.f.serif=this.j.a.offsetWidth,this.f["sans-serif"]=this.o.a.offsetWidth,this.A=rt(),D(this)};var st=null;q.prototype.g=function(t){var e=this.a;e.g&&u(e.f,[e.a.c("wf",t.c,""+_(t),"active")],[e.a.c("wf",t.c,""+_(t),"loading"),e.a.c("wf",t.c,""+_(t),"inactive")]),P(e,"fontactive",t),this.o=!0,B(this)},q.prototype.h=function(t){var e=this.a;if(e.g){var n=c(e.f,e.a.c("wf",t.c,""+_(t),"active")),r=[],i=[e.a.c("wf",t.c,""+_(t),"loading")];n||r.push(e.a.c("wf",t.c,""+_(t),"inactive")),u(e.f,r,i)}P(e,"fontinactive",t),B(this)},W.prototype.load=function(t){this.c=new i(this.j,t.context||this.j),this.g=!1!==t.events,this.f=!1!==t.classes,H(this,new S(this.c,t),t)},G.prototype.load=function(t){function e(){if(i["__mti_fntLst"+n]){var r,a=i["__mti_fntLst"+n](),o=[];if(a)for(var s=0;se;e++)p(this.c,r[e],m(o));var s=[];for(e=0,n=i.length;n>e;e++)if(r=i[e].split(":"),r[1])for(var u=r[1].split(","),c=0;ci;++i){var o=n.fonts[i];r.a.push(new b(o.name,E("font-weight:"+o.weight+";font-style:"+o.style)))}t(r.a)},h(this.c,l(this.c)+(this.f.api||"//f.fontdeck.com/s/css/js/")+f(this.c)+"/"+e+".js",function(e){e&&t([])})):t([])};var dt=new W(window);dt.a.c.custom=function(t,e){return new $(e,t)},dt.a.c.fontdeck=function(t,e){return new nt(e,t)},dt.a.c.monotype=function(t,e){return new G(e,t)},dt.a.c.typekit=function(t,e){return new et(e,t)},dt.a.c.google=function(t,e){return new tt(e,t)};var mt={load:r(dt.load,dt)};"function"==typeof define&&define.amd?define(function(){return mt}):void 0!==e&&e.exports?e.exports=mt:(window.WebFont=mt,window.WebFontConfig&&dt.load(window.WebFontConfig))}()},{}],198:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,r){var i=t.get(),a=i.min,o=i.max,s=Math.clamp(a,o,e);t.animate("percentage",Math.round((s-a)/(o-a)*100))})}}}(i),i.exports.template={v:3,t:[" ",{p:[13,1,293],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,313],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,333]}],style:["width: ",{t:2,r:"percentage",p:[14,48,358]},"%"]}}," ",{p:[15,3,384],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,406]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],199:[function(t,e,n){var r=t(196),i={exports:{}};!function(e){"use strict";var n=t(239),r=t(238);e.exports={computed:{clickable:function(){return this.get("enabled")&&!this.get("state")?!0:!1},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),i=n.action,a=n.params;(0,r.act)(t.get("config.ref"),i,a),e.node.blur()})}}}(i),i.exports.template={v:3,t:[" ",{p:[48,1,1178],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[48,21,1198]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[51,17,1280]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[50,3,1232]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[54,19,1370]}],d:[]}},f:[{t:4,f:[{p:[56,5,1416],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[56,21,1432]}]}}],n:50,r:"icon",p:[55,3,1399]}," ",{t:16,p:[58,3,1459]}]}]},e.exports=r.extend(i.exports)},{196:196,238:238,239:239}],200:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,42],t:7,e:"header",f:[{p:[4,7,57],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,61]}]}," ",{t:4,f:[{p:[6,9,105],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,130]}]}],n:50,r:"button",p:[5,7,82]}]}],n:50,r:"title",p:[2,3,24]}," ",{p:[10,3,193],t:7,e:"article",f:[{t:16,p:[11,5,207]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],201:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,23]}]}]},e.exports=r.extend(i.exports)},{196:196}],202:[function(t,e,n){var r=t(196),i={exports:{}};!function(e){"use strict";var n=t(238);e.exports={oninit:function(){var t=this;this.observe("config.fancy",function(e,r,i){(0,n.winset)(t.get("config.window"),"can-resize",!e)})}}}(i),i.exports.template={v:3,t:[" ",{t:4,f:[{p:[14,3,258],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[13,1,235]}]},e.exports=r.extend(i.exports)},{196:196,238:238}],203:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,82],t:7,e:"span",a:{"class":"label"},f:[{t:2,r:"label",p:[3,25,102]},":"]}],n:50,r:"label",p:[2,3,64]}," ",{t:4,f:[{t:16,p:[6,5,151]}],n:50,r:"nowrap",p:[5,3,132]},{t:4,n:51,f:[{p:[8,5,176],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,204]}]},f:[{t:16,p:[9,7,245]}]}],r:"nowrap"}]}]},e.exports=r.extend(i.exports)},{196:196}],204:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,45],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,99]}],n:50,r:"button",p:[5,7,85]}]}],n:50,r:"title",p:[2,3,27]}," ",{p:[8,3,149],t:7,e:"article",f:[{t:16,p:[9,5,163]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],205:[function(t,e,n){var r=t(196),i={exports:{}};!function(e){"use strict";var n=t(239),r=t(238);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this;this.observe("config.fancy",function(e,n,i){(0,r.winset)(t.get("config.window"),"titlebar",!e)}),this.on({close:function(){(0,r.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,r.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,r.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(i),i.exports.template={v:3,t:[" ",{p:[34,1,859],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[35,3,907],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[35,40,944]}]}}," ",{p:[36,3,969],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[36,23,989]}]}," ",{t:4,f:[{p:[38,5,1033],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[39,5,1100],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[37,3,1008]}]}]},e.exports=r.extend(i.exports)},{196:196,238:238,239:239}],206:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(i),i.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,596],t:7,e:"ui-notice",f:[{p:[28,5,612],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,637]},") end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,744],t:7,e:"br"}," ",{p:[29,5,754],t:7,e:"span",f:["To upgrade click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,830],t:7,e:"br"}," ",{p:[30,5,840],t:7,e:"span",f:["If you are unable to upgrade directly click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,957],t:7,e:"br"}," ",{p:[31,5,967],t:7,e:"span",f:["Otherwise click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1084],t:7,e:"hr"}," ",{p:[33,5,1094],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1167],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1341],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1488],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1659],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1745],t:7,e:"hr"}," ",{p:[43,7,1757],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1775]}]},{p:[43,38,1788],t:7,e:"br"}," ",{p:[44,7,1800],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1818]}]}],n:50,r:"debug",p:[41,5,1725]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,556]}]},e.exports=r.extend(i.exports)},{196:196}],207:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[" "," "," "," "," "," ",{p:[8,1,320],t:7,e:"ui-notice",f:[{t:4,f:[{p:[10,5,363],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[11,7,405],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[11,24,422]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[11,75,473]}]}]}],n:50,r:"data.siliconUser",p:[9,3,334]},{t:4,n:51,f:[{p:[14,5,561],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[14,31,587]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[17,1,669],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[20,5,751],t:7,e:"controls"}],n:50,x:{r:["data.screen"],s:"_0==1"},p:[19,3,722]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.screen"],s:"_0==2"},f:[{p:[22,5,796],t:7,e:"vents"}]},{t:4,n:50,x:{r:["data.screen"],s:"(!(_0==2))&&(_0==3)"},f:[" ",{p:[24,5,839],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["data.screen"],s:"(!(_0==2))&&((!(_0==3))&&(_0==4))"},f:[" ",{p:[26,5,886],t:7,e:"modes"}]},{t:4,n:50,x:{r:["data.screen"],s:"(!(_0==2))&&((!(_0==3))&&((!(_0==4))&&(_0==5)))"},f:[" ",{p:[28,5,929],t:7,e:"thresholds"}]}],x:{r:["data.screen"],s:"_0==1"}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[18,1,679]}]},i.exports.components=i.exports.components||{};var a={vents:t(214),modes:t(210),thresholds:t(213),status:t(212),scrubbers:t(211),controls:t(209)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{196:196,209:209,210:210,211:211,212:212,213:213,214:214}],208:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"screen",params:'{"screen": 1}'},f:["Back"]}]},e.exports=r.extend(i.exports)},{196:196}],209:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[2,3,36],t:7,e:"ui-section",f:[{p:[3,5,53],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[3,22,70]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[3,92,140]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[4,17,197]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[6,3,291],t:7,e:"ui-section",f:[{p:[7,5,308],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[7,22,325]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[7,90,393]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[8,38,468]},"}"]},f:["Panic Siphon"]}]}," ",{p:[10,3,540],t:7,e:"br"}," ",{p:[11,3,548],t:7,e:"ui-section",f:[{p:[12,5,565],t:7,e:"ui-button",a:{icon:"sign-out",action:"screen",params:'{"screen": 2}'},f:["Vent Controls"]}]}," ",{p:[14,3,675],t:7,e:"ui-section",f:[{p:[15,5,692],t:7,e:"ui-button",a:{icon:"filter",action:"screen",params:'{"screen": 3}'},f:["Scrubber Controls"]}]}," ",{p:[17,3,804],t:7,e:"ui-section",f:[{p:[18,5,821],t:7,e:"ui-button",a:{icon:"cog",action:"screen",params:'{"screen": 4}'},f:["Operating Mode"]}]}," ",{p:[20,3,927],t:7,e:"ui-section",f:[{p:[21,5,944],t:7,e:"ui-button",a:{icon:"bar-chart",action:"screen",params:'{"screen": 5}'},f:["Alarm Thresholds"]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],210:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,111],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,161],t:7,e:"ui-section",f:[{p:[9,7,180],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,197]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,258]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,351]},"}"]},f:[{t:2,r:"name",p:[11,51,362]}]}]}],n:52,r:"data.modes",p:[7,3,136]}]}]},i.exports.components=i.exports.components||{};var a={back:t(208)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{196:196,208:208}],211:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,113],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,167],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,189]}]},f:[{p:[9,7,211],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,246],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,263]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,305]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,381]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,401]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,415]}]}]}," ",{p:[13,7,478],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,512],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[14,26,529]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[14,71,574]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[15,50,656]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[15,70,676]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[15,88,694]}]}]}," ",{p:[17,7,774],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[18,9,809],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[18,26,826]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[18,70,870]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[19,48,950]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[19,68,970]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[19,84,986]}]}]}," ",{p:[21,7,1060],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[22,9,1097],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_co2"],s:'_0?"check-square-o":"square-o"'},p:[22,26,1114]}],style:[{t:2,x:{r:["filter_co2"],s:'_0?"selected":null'},p:[22,81,1169]}],action:"co2_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[23,50,1254]},'", "val": ',{t:2,x:{r:["filter_co2"],s:"+!_0"},p:[23,70,1274]},"}"]},f:["CO2"]}," ",{p:[24,9,1317],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_n2o"],s:'_0?"check-square-o":"square-o"'},p:[24,26,1334]}],style:[{t:2,x:{r:["filter_n2o"],s:'_0?"selected":null'},p:[24,81,1389]}],action:"n2o_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,50,1474]},'", "val": ',{t:2,x:{r:["filter_n2o"],s:"+!_0"},p:[25,70,1494]},"}"]},f:["N2O"]}," ",{p:[26,9,1537],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["filter_toxins"],s:'_0?"check-square-o":"square-o"'},p:[26,26,1554]}],style:[{t:2,x:{r:["filter_toxins"],s:'_0?"selected":null'},p:[26,84,1612]}],action:"tox_scrub",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,50,1700]},'", "val": ',{t:2,x:{r:["filter_toxins"],s:"+!_0"},p:[27,70,1720]},"}"]},f:["Plasma"]}]}]}],n:52,r:"data.scrubbers",p:[7,3,138]},{t:4,n:51,f:[{p:[31,5,1817],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},i.exports.components=i.exports.components||{};var a={back:t(208)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{196:196,208:208}],212:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,107],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,126]}]},f:[{p:[5,6,142],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,155]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,232]},{t:2,r:"unit",p:[6,29,256]}]}]}],n:52,r:"adata.environment_data",p:[3,5,68]}," ",{p:[10,5,313],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,353],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,366]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,464]}]}]}," ",{p:[15,5,605],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,644],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,657]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,728]}]}]}],n:50,r:"data.environment_data",p:[2,3,34]},{t:4,n:51,f:[{p:[21,5,856],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,891],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1015],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1050],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,990]}]}]},e.exports=r.extend(i.exports)},{196:196}],213:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.css=" th, td {\n padding-right: 16px;\n text-align: left;\n }",i.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,112],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,137],t:7,e:"table",f:[{p:[8,5,149],t:7,e:"thead",f:[{p:[8,12,156],t:7,e:"tr",f:[{p:[9,7,167],t:7,e:"th"}," ",{p:[10,7,183],t:7,e:"th",f:[{p:[10,11,187],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,228],t:7,e:"th",f:[{p:[11,11,232],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,277],t:7,e:"th",f:[{p:[12,11,281],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,326],t:7,e:"th",f:[{p:[13,11,330],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,387],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,426],t:7,e:"tr",f:[{p:[17,9,439],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,443]}]}," ",{t:4,f:[{p:[18,27,485],t:7,e:"td",f:[{p:[19,11,500],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,547]},'", "var": "',{t:2,r:"val",p:[19,76,565]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,576]}]}]}],n:52,r:"settings",p:[18,9,467]}]}],n:52,r:"data.thresholds",p:[16,7,401]}]}," ",{p:[23,3,675],t:7,e:"table",f:[]}]}]}," "]},i.exports.components=i.exports.components||{};var a={back:t(208)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{196:196,208:208}],214:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,109],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,159],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,181]}]},f:[{p:[9,7,203],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,238],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,255]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,297]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,373]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,393]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,407]}]}]}," ",{p:[13,7,470],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,504],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"' },p:[14,15,510]}]}]}," ",{p:[16,7,601],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,649],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,682]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,762]},'", "val": ',{t:2,r:"checks",p:[18,68,782]},"}"]},f:["Internal"]}," ",{p:[19,9,824],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,858]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,938]},'", "val": ',{t:2,r:"checks",p:[20,68,958]},"}"]},f:["External"]}]}," ",{p:[22,7,1018],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,9,1063],t:7,e:"ui-button",a:{icon:"pencil",action:"external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[24,31,1145]},'" "pressure": "custom"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[24,67,1181]}]}," ",{p:[25,9,1226],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[25,42,1259]}],action:"external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[26,31,1352]},'" "pressure": "reset"}']},f:["Reset"]}]}]}],n:52,r:"data.vents",p:[7,3,134]},{t:4,n:51,f:[{p:[30,5,1461],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},i.exports.components=i.exports.components||{};var a={back:t(208)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{196:196,208:208}],215:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.css=" table {\n width: 100%;\n border-spacing: 2px;\n }\n th {\n text-align: left;\n }\n td {\n vertical-align: top;\n }\n td .button {\n margin-top: 4px\n }",i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",f:[{p:[3,5,32],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,49]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,109]}," Required"]}," ",{p:[4,5,169],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,246],t:7,e:"hr"}," ",{p:[7,3,254],t:7,e:"table",f:[{p:[8,3,264],t:7,e:"thead",f:[{p:[9,4,275],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,306],t:7,e:"th",f:[{p:[10,9,310],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,339]}]}]}],n:52,r:"data.regions",p:[9,8,279]}]}]}," ",{p:[13,3,391],t:7,e:"tbody",f:[{p:[14,4,402],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,433],t:7,e:"td",f:[{t:4,f:[{p:[16,11,466],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,483]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,531]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,605]},'"}']},f:[{t:2,r:"name",p:[17,56,615]}]}," ",{p:[18,9,644],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,437]}]}],n:52,r:"data.regions",p:[14,8,406]}]}]}]}]}," "]},e.exports=r.extend(i.exports)},{196:196}],216:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}},computed:{malfAction:function(){switch(this.get("data.malfStatus")){case 1:return"hack";case 2:return"occupy";case 3:return"deoccupy"}},malfButton:function(){switch(this.get("data.malfStatus")){case 1:return"Override Programming";case 2:case 4:return"Shunt Core Process";case 3:return"Return to Main Core"}},malfIcon:function(){switch(this.get("data.malfStatus")){case 1:return"terminal";case 2:case 4:return"caret-square-o-down";case 3:return"caret-square-o-left"}},powerCellStatusState:function(){var t=this.get("data.powerCellStatus");return t>50?"good":t>25?"average":"bad"}}}}(i),i.exports.template={v:3,t:[" ",{p:[46,1,1055],t:7,e:"ui-notice",f:[{t:4,f:[{p:[48,5,1098],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[49,7,1140],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[49,24,1157]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[49,75,1208]}]}]}],n:50,r:"data.siliconUser",p:[47,3,1069]},{t:4,n:51,f:[{p:[52,5,1296],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[52,31,1322]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[55,1,1404],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[56,3,1440],t:7,e:"ui-section",a:{label:"Main Breaker"},f:[{t:4,f:[{p:[58,7,1525],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isOperating"],s:'_0?"good":"bad"'},p:[58,20,1538]}]},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[58,59,1577]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[57,5,1478]},{t:4,n:51,f:[{p:[60,7,1639],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[60,24,1656]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[60,77,1709]}],action:"breaker"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[61,26,1776]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}," ",{p:[64,3,1854],t:7,e:"ui-section",a:{label:"External Power"},f:[{p:[65,5,1894],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.externalPower"],s:"_0(_1)"},p:[65,18,1907]}]},f:[{t:2,x:{r:["data.externalPower"],s:'_0==2?"Good":_0==1?"Low":"None"'},p:[65,54,1943]}]}]}," ",{p:[67,3,2048],t:7,e:"ui-section",a:{label:"Power Cell"},f:[{t:4,f:[{p:[69,7,2127],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerCellStatus",p:[69,40,2160]}],state:[{t:2,r:"powerCellStatusState",p:[69,73,2193]}]},f:[{t:2,x:{r:["adata.powerCellStatus"],s:"Math.fixed(_0)"},p:[69,99,2219]},"%"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[68,5,2084]},{t:4,n:51,f:[{p:[71,7,2286],t:7,e:"span",a:{"class":"bad"},f:["Removed"]}],x:{r:["data.powerCellStatus"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[75,5,2390],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{t:4,f:[{p:[77,9,2478],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.chargeMode"],s:'_0?"good":"bad"'},p:[77,22,2491]}]},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[77,60,2529]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[76,7,2429]},{t:4,n:51,f:[{p:[79,9,2596],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.chargeMode"],s:'_0?"refresh":"close"'},p:[79,26,2613]}],style:[{t:2,x:{r:["data.chargeMode"],s:'_0?"selected":null'},p:[79,76,2663]}],action:"charge"},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[80,27,2730]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}," [",{p:[83,8,2813],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.chargingStatus"],s:"_0(_1)"},p:[83,21,2826]}]},f:[{t:2,x:{r:["data.chargingStatus"],s:'_0==2?"Fully Charged":_0==1?"Charging":"Not Charging"'},p:[83,58,2863]}]},"]"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[74,3,2349]}]}," ",{p:[87,1,3017],t:7,e:"ui-display",a:{title:"Power Channels"},f:[{t:4,f:[{p:[89,5,3088],t:7,e:"ui-section",a:{label:[{t:2,r:"title",p:[89,24,3107]}],nowrap:0},f:[{p:[90,7,3132],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.powerChannels"],s:"Math.round(_1[_0].powerLoad)"},p:[90,28,3153]}," W"]}," ",{p:[91,7,3221],t:7,e:"div",a:{"class":"content"},f:[{p:[91,28,3242],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0>=2?"good":"bad"'},p:[91,41,3255]}]},f:[{t:2,x:{r:["status"],s:'_0>=2?"On":"Off"'},p:[91,75,3289]}]}]}," ",{p:[92,7,3339],t:7,e:"div",a:{"class":"content"},f:["[",{p:[92,29,3361],t:7,e:"span",f:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"Auto":"Manual"'},p:[92,35,3367]}]},"]"]}," ",{p:[93,7,3438],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{t:4,f:[{p:[95,11,3539],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"selected":null'},p:[95,44,3572]}],action:"channel",params:[{t:2,r:"topicParams.auto",p:[96,38,3661]}]},f:["Auto"]}," ",{p:[97,11,3710],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["status"],s:'_0==2?"selected":null'},p:[97,46,3745]}],action:"channel",params:[{t:2,r:"topicParams.on",p:[98,21,3819]}]},f:["On"]}," ",{p:[99,11,3864],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["status"],s:'_0==0?"selected":null'},p:[99,42,3895]}],action:"channel",params:[{t:2,r:"topicParams.off",p:[100,21,3969]}]},f:["Off"]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[94,9,3488]}]}]}],n:52,r:"data.powerChannels",p:[88,3,3055]}," ",{p:[105,3,4067],t:7,e:"ui-section",a:{label:"Total Load"},f:[{p:[106,5,4103],t:7,e:"span",a:{"class":"bold"},f:[{t:2,x:{r:["adata.totalLoad"],s:"Math.round(_0)"},p:[106,24,4122]}," W"]}]}]}," ",{t:4,f:[{p:[110,3,4220],t:7,e:"ui-display",a:{title:"System Overrides"},f:[{p:[111,5,4262],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"overload"},f:["Overload"]}," ",{t:4,f:[{p:[113,7,4365],t:7,e:"ui-button",a:{icon:[{t:2,r:"malfIcon",p:[113,24,4382]}],state:[{t:2,x:{r:["data.malfStatus"],s:'_0==4?"disabled":null'},p:[113,45,4403]}],action:[{t:2,r:"malfAction",p:[113,99,4457]}]},f:[{t:2,r:"malfButton",p:[113,115,4473]}]}],n:50,r:"data.malfStatus",p:[112,5,4335]}]}],n:50,r:"data.siliconUser",p:[109,1,4193]},{p:[117,1,4536],t:7,e:"ui-notice",f:[{p:[118,3,4550],t:7,e:"ui-section",a:{label:"Cover Lock"},f:[{t:4,f:[{p:[120,7,4633],t:7,e:"span",f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[120,13,4639]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[119,5,4586]},{t:4,n:51,f:[{p:[122,7,4713],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.coverLocked"],s:'_0?"lock":"unlock"'},p:[122,24,4730]}],action:"cover"},f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[122,81,4787]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}]},e.exports=r.extend(i.exports)},{196:196}],217:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Alarms"},f:[{p:[2,3,31],t:7,e:"ul",f:[{t:4,f:[{p:[4,7,72],t:7,e:"li",f:[{p:[4,11,76],t:7,e:"ui-button",a:{icon:"close",style:"danger",action:"clear",params:['{"zone": "',{t:2,r:".",p:[4,83,148]},'"}']},f:[{t:2,r:".",p:[4,92,157]}]}]}],n:52,r:"data.priority",p:[3,5,41]},{t:4,n:51,f:[{p:[6,7,201],t:7,e:"li",f:[{p:[6,11,205],t:7,e:"span",a:{"class":"good"},f:["No Priority Alerts"]}]}],r:"data.priority"}," ",{t:4,f:[{p:[9,7,303],t:7,e:"li",f:[{p:[9,11,307],t:7,e:"ui-button",a:{icon:"close",style:"caution",action:"clear",params:['{"zone": "',{t:2,r:".",p:[9,84,380]},'"}']},f:[{t:2,r:".",p:[9,93,389]}]}]}],n:52,r:"data.minor",p:[8,5,275]},{t:4,n:51,f:[{p:[11,7,433],t:7,e:"li",f:[{p:[11,11,437],t:7,e:"span",a:{"class":"good"},f:["No Minor Alerts"]}]}],r:"data.minor"}]}]}]},e.exports=r.extend(i.exports)},{196:196}],218:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.sensors.length","data.sensors.0.long_name"],s:"_0==1?_1:null"},p:[1,20,19]}]},f:[" ",{t:4,f:[{p:[3,5,172],t:7,e:"ui-subdisplay",a:{title:[{t:2,x:{r:["data.sensors.length","long_name"],s:"_0>1?_1:null"},p:[3,27,194]}]},f:[{p:[4,7,250],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[5,3,283],t:7,e:"span",f:[{t:2,x:{r:["pressure"],s:"Math.fixed(_0,2)"},p:[5,9,289]}," kPa"]}]}," ",{t:4,f:[{p:[8,9,385],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[9,11,429],t:7,e:"span",f:[{t:2,x:{r:["temperature"],s:"Math.fixed(_0,2)"},p:[9,17,435]}," K"]}]}],n:50,r:"temperature",p:[7,7,356]}," ",{t:4,f:[{p:[13,9,545],t:7,e:"ui-section",a:{label:[{t:2,r:"id",p:[13,28,564]}]},f:[{p:[14,5,578],t:7,e:"span",f:[{t:2,x:{r:["."],s:"Math.fixed(_0,2)"},p:[14,11,584]},"%"]}]}],n:52,i:"id",r:"gases",p:[12,4,517]}]}],n:52,r:"adata.sensors",p:[2,3,143]},{t:4,n:51,f:[{p:[19,5,689],t:7,e:"ui-section",a:{label:"Initialize"},f:[{p:[20,3,724],t:7,e:"ui-button",a:{action:"initialize",params:'{"type": "dist"}'},f:["Distribution and Waste"]}," ",{p:[21,3,819],t:7,e:"ui-button",a:{action:"initialize",params:'{"type": "tank"}'},f:["Tanks"]}]}],r:"adata.sensors"}]}]},e.exports=r.extend(i.exports)},{196:196}],219:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[" ",{p:[3,1,74],t:7,e:"atmos-control"}," ",{p:{button:[{p:[6,3,153],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[8,3,237],t:7,e:"ui-section",a:{label:"Input Injector"},f:[{p:[9,5,278],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputting"],s:'_0?"power-off":"close"'},p:[9,22,295]}],style:[{t:2,x:{r:["data.inputting"],s:'_0?"selected":null'},p:[9,73,346]}],action:"input"},f:[{t:2,x:{r:["data.inputting"],s:'_0?"Injecting":"Off"'},p:[10,7,409]}]}]}," ",{p:[12,3,481],t:7,e:"ui-section",a:{label:"Input Rate"},f:[{p:[13,5,518],t:7,e:"span",f:[{t:2,x:{r:["adata.inputRate"],s:"Math.fixed(_0)"},p:[13,11,524]}," L/s"]}]}," ",{p:[15,3,587],t:7,e:"ui-section",a:{label:"Output Regulator"},f:[{p:[16,5,630],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputting"],s:'_0?"power-off":"close"'},p:[16,22,647]}],style:[{t:2,x:{r:["data.outputting"],s:'_0?"selected":null'},p:[16,74,699]}],action:"output"},f:[{t:2,x:{r:["data.outputting"],s:'_0?"Open":"Closed"'},p:[17,7,764]}]}]}," ",{p:[19,3,835],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[20,5,877],t:7,e:"ui-button",a:{icon:"pencil",action:"output_pressure"},f:[{t:2,x:{r:["adata.outputPressure"],s:"Math.round(_0)"},p:[20,55,927]}," kPa"]}]}]}]},i.exports.components=i.exports.components||{};var a={"atmos-control":t(218)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{196:196,218:218}],220:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{p:[6,3,218],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,259],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "custom"}'},f:["Set"]}," ",{p:[8,5,354],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,384]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,515],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[9,11,521]}," kPa"]}]}," ",{p:[11,3,585],t:7,e:"ui-section",a:{label:"Filter"},f:[{p:[12,5,617],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0==""?"selected":null'},p:[12,23,635]}],action:"filter",params:'{"mode": ""}'},f:["Nothing"]}," ",{p:[14,5,751],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="plasma"?"selected":null'},p:[14,23,769]}],action:"filter",params:'{"mode": "plasma"}'},f:["Plasma"]}," ",{p:[16,5,896],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="o2"?"selected":null'},p:[16,23,914]}],action:"filter",params:'{"mode": "o2"}'},f:["O2"]}," ",{p:[18,5,1029],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="n2"?"selected":null'},p:[18,23,1047]}],action:"filter",params:'{"mode": "n2"}'},f:["N2"]}," ",{p:[20,5,1162],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="co2"?"selected":null'},p:[20,23,1180]}],action:"filter",params:'{"mode": "co2"}'},f:["CO2"]}," ",{p:[22,5,1298],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.filter_type"],s:'_0=="n2o"?"selected":null'},p:[22,23,1316]}],action:"filter",params:'{"mode": "n2o"}'},f:["N2O"]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],221:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{p:[6,3,218],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,259],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "custom"}'},f:["Set"]}," ",{p:[8,5,354],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,384]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,515],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[9,11,521]}," kPa"]}]}," ",{p:[11,3,585],t:7,e:"ui-section",a:{label:"Node 1"},f:[{p:[12,5,617],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[12,44,656]}],action:"node1",params:'{"concentration": -0.1}'}}," ",{p:[14,5,771],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[14,39,805]}],action:"node1",params:'{"concentration": -0.01}'}}," ",{p:[16,5,921],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[16,38,954]}],action:"node1",params:'{"concentration": 0.01}'}}," ",{p:[18,5,1071],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[18,43,1109]}],action:"node1",params:'{"concentration": 0.1}'}}," ",{p:[20,5,1225],t:7,e:"span",f:[{t:2,x:{r:["adata.node1_concentration"],s:"Math.round(_0)"},p:[20,11,1231]},"%"]}]}," ",{p:[22,3,1299],t:7,e:"ui-section",a:{label:"Node 2"},f:[{p:[23,5,1331],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[23,44,1370]}],action:"node2",params:'{"concentration": -0.1}'}}," ",{p:[25,5,1485],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[25,39,1519]}],action:"node2",params:'{"concentration": -0.01}'}}," ",{p:[27,5,1635],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[27,38,1668]}],action:"node2",params:'{"concentration": 0.01}'}}," ",{p:[29,5,1785],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[29,43,1823]}],action:"node2",params:'{"concentration": 0.1}'}}," ",{p:[31,5,1939],t:7,e:"span",f:[{t:2,x:{r:["adata.node2_concentration"],s:"Math.round(_0)"},p:[31,11,1945]},"%"]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],222:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{t:4,f:[{p:[7,5,244],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[8,7,285],t:7,e:"ui-button",a:{icon:"pencil",action:"transfer",params:'{"rate": "custom"}'},f:["Set"]}," ",{p:[9,7,378],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.transfer_rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[9,37,408]}],action:"transfer",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[10,7,534],t:7,e:"span",f:[{t:2,x:{r:["adata.transfer_rate"],s:"Math.round(_0)"},p:[10,13,540]}," L/s"]}]}],n:50,r:"data.max_rate",p:[6,3,218]},{t:4,n:51,f:[{p:[13,5,620],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[14,7,663],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "custom"}'},f:["Set"]}," ",{p:[15,7,760],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[15,37,790]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[16,7,923],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[16,13,929]}," kPa"]}]}],r:"data.max_rate"}]}]},e.exports=r.extend(i.exports)},{196:196}],223:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:{button:[{p:[6,5,180],t:7,e:"ui-button",a:{icon:"pencil",action:"relabel"},f:["Relabel"]}]},t:7,e:"ui-display",a:{title:"Canister",button:0},f:[" ",{p:[8,3,259],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[9,5,293],t:7,e:"span",f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[9,11,299]}," kPa"]}]}," ",{p:[11,3,363],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[12,5,393],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.portConnected"],s:'_0?"good":"average"'},p:[12,18,406]}]},f:[{t:2,x:{r:["data.portConnected"],s:'_0?"Connected":"Not Connected"'},p:[12,63,451]}]}]}]}," ",{p:[15,1,543],t:7,e:"ui-display",a:{title:"Valve"},f:[{p:[16,3,572],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[17,5,614],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[17,18,627]}],max:[{t:2,r:"data.maxReleasePressure",p:[17,52,661]}],value:[{t:2,r:"data.releasePressure",p:[18,14,703]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[18,40,729]}," kPa"]}]}," ",{p:[20,3,798],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[21,5,842],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[21,38,875]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[23,5,1029],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[23,36,1060]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[25,5,1205],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "custom"}'},f:["Set"]}," ",{p:[26,5,1300],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[26,35,1330]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[29,3,1489],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[30,5,1520],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[30,22,1537]}],style:[{t:2,x:{r:["data.valveOpen","data.hasHoldingTank"],s:'_0?_1?"caution":"danger":null'},p:[31,14,1590]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[32,22,1683]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[38,7,1865],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.valveOpen"],s:'_0?"danger":null'},p:[38,38,1896]}],action:"eject"},f:["Eject"]}],n:50,r:"data.hasHoldingTank",p:[37,5,1831]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[42,3,2026],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holdingTank.name",p:[43,4,2056]}]}," ",{p:[45,3,2100],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holdingTank.tankPressure"],s:"Math.round(_0)"},p:[46,4,2133]}," kPa"]}],n:50,r:"data.hasHoldingTank",p:[41,3,1996]},{t:4,n:51,f:[{p:[49,3,2212],t:7,e:"ui-section",f:[{p:[50,4,2228],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.hasHoldingTank"}]}]},e.exports=r.extend(i.exports)},{196:196}],224:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Energy"},f:[{p:[3,5,62],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.maxEnergy",p:[3,26,83]}],value:[{t:2,r:"data.energy",p:[3,53,110]}]},f:[{t:2,x:{r:["adata.energy"],s:"Math.fixed(_0)"},p:[3,70,127]}," Units"]}]}]}," ",{p:{button:[{t:4,f:[{p:[9,7,307],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.amount","."],s:'_0==_1?"selected":null'},p:[9,37,337]}],action:"amount",params:['{"amount": ',{t:2,r:".",p:[9,114,414]},"}"]},f:[{t:2,r:".",p:[9,122,422]}]}],n:52,r:"data.beakerTransferAmounts",p:[8,5,264]}]},t:7,e:"ui-display",a:{title:"Dispense",button:0},f:[" ",{p:[12,3,471],t:7,e:"ui-section",f:[{t:4,f:[{p:[14,7,519],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense",params:['{"reagent": "',{t:2,r:"id",p:[14,74,586]},'"}']},f:[{t:2,r:"title",p:[14,84,596]}]}],n:52,r:"data.chemicals",p:[13,5,488]}]}]}," ",{p:{button:[{t:4,f:[{p:[21,7,766],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"amount": ',{t:2,r:".",p:[21,66,825]},"}"]},f:[{t:2,r:".",p:[21,74,833]}]}],n:52,r:"data.beakerTransferAmounts",p:[20,5,723]}," ",{p:[23,5,869],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[23,36,900]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[25,3,995],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[27,7,1063],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[27,13,1069]},"/",{t:2,r:"data.beakerMaxVolume",p:[27,55,1111]}," Units"]}," ",{p:[28,7,1155],t:7,e:"br"}," ",{t:4,f:[{p:[30,9,1206],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[30,52,1249]}," units of ",{t:2,r:"name",p:[30,87,1284]}]},{p:[30,102,1299],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[29,7,1167]},{t:4,n:51,f:[{p:[32,9,1328],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[26,5,1029]},{t:4,n:51,f:[{p:[35,7,1401],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=r.extend(i.exports)},{196:196}],225:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[2,3,34],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,65],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isActive"],s:'_0?"power-off":"close"'},p:[3,22,82]}],style:[{t:2,x:{r:["data.isActive"],s:'_0?"selected":null'},p:[4,10,134]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,10,182]}],action:"power"},f:[{t:2,x:{r:["data.isActive"],s:'_0?"On":"Off"'},p:[6,18,244]}]}]}," ",{p:[8,3,307],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,4,338],t:7,e:"ui-button",a:{icon:"pencil",action:"temperature"},f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[9,50,384]}," K"]}]}]}," ",{p:{button:[{p:[14,5,522],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[14,36,553]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[16,3,648],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[18,7,716],t:7,e:"span",f:["Temperature: ",{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[18,26,735]}," K"]}," ",{p:[19,7,784],t:7,e:"br"}," ",{t:4,f:[{p:[21,9,836],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[21,52,879]}," units of ",{t:2,r:"name",p:[21,87,914]}]},{p:[21,102,929],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[20,7,797]},{t:4,n:51,f:[{p:[23,9,958],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[17,5,682]},{t:4,n:51,f:[{p:[26,7,1031],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=r.extend(i.exports)},{196:196}],226:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={computed:{cellTemperatureState:function(){var t=this.get("data.cellTemperature");return 225>t?"good":273.15>t?"average":"bad"},occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(i),i.exports.template={v:3,t:[" ",{p:[21,1,448],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[22,3,480],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[23,3,512],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[23,9,518]}]}]}," ",{t:4,f:[{p:[26,5,632],t:7,e:"ui-section",a:{label:"State"},f:[{p:[27,7,665],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[27,20,678]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[27,43,701]}]}]}," ",{p:[29,4,820],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[30,6,858],t:7,e:"span",f:[{t:2,x:{r:["adata.occupant.bodyTemperature"],s:"Math.round(_0)"},p:[30,12,864]}," K"]}]}," ",{p:[32,5,941],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[33,7,975],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[33,20,988]}],max:[{t:2,r:"data.occupant.maxHealth",p:[33,54,1022]}],value:[{t:2,r:"data.occupant.health",p:[33,90,1058]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[34,16,1099]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[34,68,1151]}]}]}," ",{t:4,f:[{p:[37,7,1385],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[37,26,1404]}]},f:[{p:[38,9,1424],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[38,30,1445]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[38,66,1481]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[38,103,1518]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[36,5,1220]}],n:50,r:"data.hasOccupant",p:[25,3,603]}]}," ",{p:[43,1,1622],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[44,3,1650],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[45,5,1681],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[45,22,1698]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[46,14,1757]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[47,14,1812]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[48,22,1870]}]}]}," ",{p:[50,3,1936],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[51,3,1971],t:7,e:"span",a:{"class":[{t:2,r:"cellTemperatureState",p:[51,16,1984]}]},f:[{t:2,x:{r:["adata.cellTemperature"],s:"Math.round(_0)"},p:[51,42,2010]}," K"]}]}," ",{p:[53,2,2073],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[54,5,2103],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[54,22,2120]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[54,73,2171]}]}," ",{p:[55,5,2223],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[55,22,2240]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[55,86,2304]}]}]}]}," ",{p:{button:[{p:[60,5,2445],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[60,36,2476]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[62,3,2577],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[65,9,2684],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[65,52,2727]}," units of ",{t:2,r:"name",p:[65,87,2762]}]},{p:[65,102,2777],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[64,7,2645]},{t:4,n:51,f:[{p:[67,9,2806],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[63,5,2611]},{t:4,n:51,f:[{p:[70,7,2879],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=r.extend(i.exports)},{196:196}],227:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,45]},") was not found. Does it exist?"]}]}]},e.exports=r.extend(i.exports)},{196:196}],228:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,45],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,88],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,105]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,156]}]}]}],n:50, -r:"data.siliconUser",p:[2,3,15]},{t:4,n:51,f:[{p:[7,5,247],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,273]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,358],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,389],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,470],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,487]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,531]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,579]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,421]},{t:4,n:51,f:[{p:[15,7,639],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,652]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,689]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,724]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,791],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,822],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,835]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,865]}]}]}," ",{p:[21,3,943],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,974],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,987]}]},f:[{t:2,r:"data.mode",p:[22,39,1008]}]}]}," ",{p:[24,3,1049],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1080],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1093]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1129]}]}]}," ",{p:[27,3,1191],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1229],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1242]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1284]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1513],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1486]}," ",{p:[37,7,1594],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[39,5,1676],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[40,7,1716],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[41,7,1797],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[42,7,1858],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[44,5,1932],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[45,7,1965],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[46,7,2029],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[48,5,2116],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[49,7,2153],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[49,24,2170]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[49,84,2230]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[51,7,2334],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[51,24,2351]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[51,84,2411]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[53,7,2517],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[53,24,2534]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[53,88,2598]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1373]}]},e.exports=r.extend(i.exports)},{196:196}],229:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(i),i.exports.template={v:3,t:[" ",{p:[11,1,167],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,224],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,257],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,274]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,325]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,398]}]}]}],n:50,r:"data.headset",p:[12,3,199]},{t:4,n:51,f:[{p:[19,5,476],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,514],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,531]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,585]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,664]}]}]}," ",{p:[24,5,746],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,781],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,798]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,849]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,922]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1034],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1073],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1090]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1142]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1217]}]}]}],n:50,r:"data.command",p:[30,3,1009]}]}," ",{p:[38,1,1305],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1336],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1399],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1405]}]}],n:50,r:"data.freqlock",p:[40,5,1371]},{t:4,n:51,f:[{p:[43,7,1453],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1492]}],action:"frequency",params:'{"change": -10}'}}," ",{p:[44,7,1604],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1638]}],action:"frequency",params:'{"change": -2}'}}," ",{p:[45,7,1749],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"change": "custom"}'},f:[{t:2,r:"readableFrequency",p:[45,81,1823]}]}," ",{p:[46,7,1863],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1896]}],action:"frequency",params:'{"change": 2}'}}," ",{p:[47,7,2006],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2044]}],action:"frequency",params:'{"change": 10}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2215],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2264],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2281]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2331]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2398]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2179]}," ",{t:4,f:[{p:[57,5,2525],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2601],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2618]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2674]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2749]},'"}']},f:[{t:2,r:"channel",p:[62,11,2775]}]}],n:52,i:"channel",r:"data.channels",p:[58,7,2561]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2482]}]}]},e.exports=r.extend(i.exports)},{196:196}],230:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(i),i.exports.template={v:3,t:[" ",{p:[24,1,600],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,631],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,670],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,703]}],state:[{t:2,r:"capacityPercentState",p:[26,71,736]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,762]},"%"]}]}]}," ",{p:[29,1,840],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,869],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,906],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,923]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,975]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1042]}]},"   [",{p:[34,6,1109],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1122]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1138]}]},"]"]}," ",{p:[36,3,1260],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1298],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1319]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1350]}]},f:[{t:2,x:{r:["adata.inputLevel"],s:"Math.round(_0)"},p:[37,78,1371]},"W"]}]}," ",{p:[39,3,1431],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1469],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1508]}],action:"input",params:'{"input": "min"}'}}," ",{p:[41,5,1601],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1635]}],action:"input",params:'{"input": "minus"}'}}," ",{p:[42,5,1730],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"input": "custom"}'},f:["Set"]}," ",{p:[43,5,1819],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1852]}],action:"input",params:'{"input": "plus"}'}}," ",{p:[44,5,1963],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2001]}],action:"input",params:'{"input": "max"}'}}]}," ",{p:[46,3,2125],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2158],t:7,e:"span",f:[{t:2,x:{r:["adata.inputAvailable"],s:"Math.round(_0)"},p:[47,9,2164]},"W"]}]}]}," ",{p:[50,1,2238],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2268],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2305],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2322]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2377]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2446]}]},"   [",{p:[55,6,2512],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2525]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2542]}]},"]"]}," ",{p:[57,3,2647],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2686],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2707]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2739]}]},f:[{t:2,x:{r:["adata.outputLevel"],s:"Math.round(_0)"},p:[58,80,2761]},"W"]}]}," ",{p:[60,3,2822],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2861],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2900]}],action:"output",params:'{"output": "min"}'}}," ",{p:[62,5,2996],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3030]}],action:"output",params:'{"output": "minus"}'}}," ",{p:[63,5,3128],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"output": "custom"}'},f:["Set"]}," ",{p:[64,5,3219],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3252]}],action:"output",params:'{"output": "plus"}'}}," ",{p:[65,5,3367],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3405]}],action:"output",params:'{"output": "max"}'}}]}," ",{p:[67,3,3533],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3567],t:7,e:"span",f:[{t:2,x:{r:["adata.outputUsed"],s:"Math.round(_0)"},p:[68,9,3573]},"W"]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],231:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,71]},"W"]}," ",{p:[5,3,122],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,159],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,165]},"° (",{t:2,r:"data.direction",p:[6,45,199]},")"]}]}," ",{p:[8,3,244],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,282],t:7,e:"ui-button",a:{icon:"step-backward",action:"control",params:'{"cdir": -15}'},f:["15°"]}," ",{p:[10,5,378],t:7,e:"ui-button",a:{icon:"backward",action:"control",params:'{"cdir": -5}'},f:["5°"]}," ",{p:[11,5,467],t:7,e:"ui-button",a:{icon:"forward",action:"control",params:'{"cdir": 5}'},f:["5°"]}," ",{p:[12,5,554],t:7,e:"ui-button",a:{icon:"step-forward",action:"control",params:'{"cdir": 15}'},f:["15°"]}]}]}," ",{p:[15,1,673],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,705],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,743],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,774]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,889],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,922]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1039],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1072]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1239],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1276],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1282]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1326]},")"]}]}," ",{p:[27,3,1373],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1410],t:7,e:"ui-button",a:{icon:"fast-backward",action:"control",params:'{"tdir": -180}'},f:["180°"]}," ",{p:[29,5,1508],t:7,e:"ui-button",a:{icon:"step-backward",action:"control",params:'{"tdir": -30}'},f:["30°"]}," ",{p:[30,5,1604],t:7,e:"ui-button",a:{icon:"backward",action:"control",params:'{"tdir": -5}'},f:["5°"]}," ",{p:[31,5,1693],t:7,e:"ui-button",a:{icon:"forward",action:"control",params:'{"tdir": 5}'},f:["5°"]}," ",{p:[32,5,1780],t:7,e:"ui-button",a:{icon:"step-forward",action:"control",params:'{"tdir": 30}'},f:["30°"]}," ",{p:[33,5,1874],t:7,e:"ui-button",a:{icon:"fast-forward",action:"control",params:'{"tdir": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2057],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2136],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2175],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2188]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2233]},"Found"]}]}," ",{p:[43,2,2302],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2338],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2351]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2395]}," Panels Connected"]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],232:[function(t,e,n){var r=t(196),i={exports:{}};!function(e){"use strict";e.exports={data:{text:t(242)}}}(i),i.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[12,7,173],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[11,5,149]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[15,3,259],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,290],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,307]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[17,14,357]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,411]}]}]}," ",{p:[20,3,468],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[22,7,530],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[22,40,563]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[22,61,584]},"%"]}],n:50,r:"data.hasPowercell",p:[21,5,498]},{t:4,n:51,f:[{p:[24,4,641],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[28,1,714],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[29,3,748],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[30,3,791],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[30,9,797]},"°C"]}]}," ",{p:[32,2,860],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[33,3,902],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[33,9,908]},"°C"]}]}," ",{t:4,f:[{p:[36,2,990],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[37,7,1031],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[37,46,1070]}],action:"target",params:'{"target": -20}'}}," ",{p:[38,7,1175],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[38,41,1209]}],action:"target",params:'{"target": -5}'}}," ",{p:[39,7,1313],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "custom"}'},f:["Set"]}," ",{p:[40,7,1406],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[40,40,1439]}],action:"target",params:'{"target": 5}'}}," ",{p:[41,7,1542],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[41,45,1580]}],action:"target",params:'{"target": 20}'}}]}],n:50,r:"data.open",p:[35,3,971]}," ",{p:[44,3,1706],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[46,7,1758],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[46,46,1797]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[47,7,1905],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[47,48,1946]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[48,7,2054],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[48,41,2088]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[45,3,1734]},{t:4,n:51,f:[{p:[50,4,2204],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[50,10,2210]}]}],r:"data.open"}]}]}]},e.exports=r.extend(i.exports)},{196:196,242:242}],233:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{t:4,f:[{p:[2,3,31],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,50]}," Alarms"]},f:[{p:[3,5,74],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,107],t:7,e:"li",f:[{t:2,r:".",p:[5,13,111]}]}],n:52,r:".",p:[4,7,86]},{t:4,n:51,f:[{p:[7,9,147],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=r.extend(i.exports)},{196:196}],234:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={data:{tankPressureState:function(){var t=this.get("data.tankPressureState");return t>=200?"good":t>=100?"average":"bad"}}}}(i),i.exports.template={v:3,t:[" ",{p:[14,1,263],t:7,e:"ui-notice",f:[{p:[15,3,277],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[15,23,297]}," connected to a mask."]}]}," ",{p:[17,1,380],t:7,e:"ui-display",f:[{p:[18,3,395],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,436],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,470]}],state:[{t:2,r:"tankPressureState",p:[20,16,508]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,531]}," kPa"]}]}," ",{p:[22,3,597],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,639],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,652]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,686]}],value:[{t:2,r:"data.releasePressure",p:[24,14,728]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,754]}," kPa"]}]}," ",{p:[26,3,823],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,867],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,900]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1054],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1085]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1230],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "custom"}'},f:["Set"]}," ",{p:[32,5,1325],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1355]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[35,3,1514],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[36,5,1545],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[36,22,1562]}],state:[{t:2,x:{r:["data.maskConnected"],s:'_0?null:"disabled"'},p:[36,69,1609]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[37,22,1674]}]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],235:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={oninit:function(){this.on({hover:function(t){var e=this.get("data.uses");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(i),i.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[21,7,453],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[20,5,424]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[24,3,539],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[25,5,584],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.uses"],s:'_0>0?"good":"bad"'},p:[25,18,597]}]},f:[{t:2,r:"data.uses",p:[25,54,633]}," TC"]}]}]}," ",{t:4,f:[{p:[29,3,716],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[29,22,735]}]},f:[{t:4,f:[{p:[31,7,774],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,26,793]}],candystripe:0,right:0},f:[{p:[32,9,831],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[32,29,851]},": ",{t:2,r:"desc",p:[32,39,861]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.uses","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[33,18,909]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[34,46,1058]},'", "item": ',{t:2,r:"name",p:[34,69,1081]},', "cost": ',{t:2,r:"cost",p:[34,87,1099]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[35,49,1159]}," TC"]}]}],n:52,r:"items",p:[30,5,751]}]}],n:52,r:"data.buyable",p:[28,1,690]}]},e.exports=r.extend(i.exports)},{196:196}],236:[function(t,e,n){(function(e){"use strict";var n=t(196),r=e.interopRequireDefault(n);t(192),t(1),t(190),t(191);var i=t(197),a=e.interopRequireDefault(i),o=t(237),s=e.interopRequireDefault(o),u=t(238);r["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(241)),a["default"].load({custom:{families:["FontAwesome"],urls:["https://netdna.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"],testStrings:{FontAwesome:""}}}),window.initialize=function(e){window.tgui||(window.tgui=new s["default"]({el:"#container",data:function(){var n={constants:t(239)},r=JSON.parse(e);return Object.assign(n,r)}}))};var c=document.getElementById("data");"{}"!==c.textContent?window.initialize(c.textContent):((0,u.act)(c.getAttribute("data-ref"),"tgui:initialize"),c.remove())}).call(this,t("babel/external-helpers"))},{1:1,190:190,191:191,192:192,196:196,197:197,237:237,238:238,239:239,241:241,"babel/external-helpers":"babel/external-helpers"}],237:[function(t,e,n){var r=t(196),i={exports:{}};!function(e){"use strict";var n=t(238),r=t(240);e.exports={components:{"ui-bar":t(198),"ui-button":t(199),"ui-display":t(200),"ui-notice":t(201),"ui-section":t(203),"ui-subdisplay":t(204)},events:{enter:t(194).enter,space:t(194).space},transitions:{fade:t(195)},onconfig:function(){var e=this.get("config.interface"),n={air_alarm:t(207),"air_alarm/back":t(208),"air_alarm/controls":t(209),"air_alarm/modes":t(210),"air_alarm/scrubbers":t(211),"air_alarm/status":t(212),"air_alarm/thresholds":t(213),"air_alarm/vents":t(214),airlock_electronics:t(215),apc:t(216),atmos_alert:t(217),atmos_control:t(218),"atmos_control/tank":t(219),atmos_filter:t(220),atmos_mixer:t(221),atmos_pump:t(222),canister:t(223),chem_dispenser:t(224),chem_heater:t(225),cryo:t(226),error:t(227),mulebot:t(228),radio:t(229),smes:t(230),solar_control:t(231),space_heater:t(232),station_alert:t(233),tanks:t(234),uplink:t(235)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){var t=this;this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)}),this.on("titlebar.drag",function(){return t.toggle("drag"),!1}),this.on("resize.resize",function(){return t.toggle("resize"),!1}),document.addEventListener("mousemove",function(e){t.get("drag")?r.drag.bind(t)(e):t.get("resize")&&r.resize.bind(t)(e)}),document.addEventListener("mouseup",function(e){t.set({drag:!1,resize:!1,x:null,y:null})})},oncomplete:function(){this.find("main").focus(),(0,n.winset)("mapwindow.map","focus",!0)}}}(i),i.exports.template={v:3,t:[" "," "," "," ",{p:[65,1,2031],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[65,11,2041]}]}," ",{p:[66,1,2071],t:7,e:"main",f:[{p:[67,3,2080],t:7,e:"warnings"}," ",{p:[68,3,2094],t:7,e:"interface"}]}," ",{p:[70,1,2115],t:7,e:"resize"}]},i.exports.components=i.exports.components||{};var a={warnings:t(206),titlebar:t(205),resize:t(202)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{194:194,195:195,196:196,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,238:238,240:240}],238:[function(t,e,n){"use strict";function r(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],e=arguments.length<=1||void 0===arguments[1]?"":arguments[1];return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function i(t,e){var n=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];console.log(n),window.location.href=r(Object.assign({src:t,action:e},n))}function a(t,e,n){var i;window.location.href=r((i={},i[t+"."+e]=n,i),"winset")}n.__esModule=!0,n.href=r,n.act=i,n.winset=a;var o=encodeURIComponent},{}],239:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],240:[function(t,e,n){"use strict";function r(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function i(t){if(t.preventDefault(),this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var i=r(e,n);e=i.x,n=i.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}function a(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,r=a(e,n);e=r.x,n=r.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}n.__esModule=!0,n.resize=n.drag=void 0;var s=t(238);n.drag=i,n.resize=o},{238:238}],241:[function(t,e,n){"use strict";function r(t,e,n){return Math.max(t,Math.min(n,e))}function i(t){var e=arguments.length<=1||void 0===arguments[1]?1:arguments[1];return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=r,n.fixed=i},{}],242:[function(t,e,n){"use strict";function r(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function i(t){return t.replace(/\w\S*/g,r)}n.__esModule=!0,n.upperCaseFirst=r,n.titleCase=i},{}],"babel/external-helpers":[function(t,e,n){var r={};!function(t){var e=t.babelHelpers={};e["typeof"]="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},e.jsx=function(){var t="function"==typeof Symbol&&Symbol["for"]&&Symbol["for"]("react.element")||60103;return function(e,n,r,i){var a=e&&e.defaultProps,o=arguments.length-3;if(n||0===o||(n={}),n&&a)for(var s in a)void 0===n[s]&&(n[s]=a[s]);else n||(n=a||{});if(1===o)n.children=i;else if(o>1){for(var u=Array(o),c=0;o>c;c++)u[c]=arguments[c+3];n.children=u}return{$$typeof:t,type:e,key:void 0===r?null:""+r,ref:null,props:n,_owner:null}}}(),e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function r(i,a){try{var o=e[i](a),s=o.value}catch(u){return void n(u)}o.done?t(s):Promise.resolve(s).then(function(t){r("next",t)},function(t){r("throw",t)})}r("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function r(t,e,n,i){var a=Object.getOwnPropertyDescriptor(t,e);if(void 0===a){var o=Object.getPrototypeOf(t);null!==o&&r(o,e,n,i)}else if("value"in a&&a.writable)a.value=n;else{var s=a.set;void 0!==s&&s.call(i,n)}return n},e.slicedToArray=function(){function t(t,e){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){i=!0,a=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(i)throw a}}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")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,r=[],i=t[Symbol.iterator]();!(n=i.next()).done&&(r.push(n.value),!e||r.length!==e););return r}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(i),i.exports.template={v:3,t:[" ",{p:[24,1,600],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,631],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,670],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,703]}],state:[{t:2,r:"capacityPercentState",p:[26,71,736]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,762]},"%"]}]}]}," ",{p:[29,1,840],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,869],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,906],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,923]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,975]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1042]}]},"   [",{p:[34,6,1109],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1122]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1138]}]},"]"]}," ",{p:[36,3,1260],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1298],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1319]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1350]}]},f:[{t:2,x:{r:["adata.inputLevel"],s:"Math.round(_0)"},p:[37,78,1371]},"W"]}]}," ",{p:[39,3,1431],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1469],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1508]}],action:"input",params:'{"input": "min"}'}}," ",{p:[41,5,1601],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1635]}],action:"input",params:'{"input": "minus"}'}}," ",{p:[42,5,1730],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"input": "custom"}'},f:["Set"]}," ",{p:[43,5,1819],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1852]}],action:"input",params:'{"input": "plus"}'}}," ",{p:[44,5,1963],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2001]}],action:"input",params:'{"input": "max"}'}}]}," ",{p:[46,3,2125],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2158],t:7,e:"span",f:[{t:2,x:{r:["adata.inputAvailable"],s:"Math.round(_0)"},p:[47,9,2164]},"W"]}]}]}," ",{p:[50,1,2238],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2268],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2305],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2322]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2377]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2446]}]},"   [",{p:[55,6,2512],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2525]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2542]}]},"]"]}," ",{p:[57,3,2647],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2686],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2707]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2739]}]},f:[{t:2,x:{r:["adata.outputLevel"],s:"Math.round(_0)"},p:[58,80,2761]},"W"]}]}," ",{p:[60,3,2822],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2861],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2900]}],action:"output",params:'{"output": "min"}'}}," ",{p:[62,5,2996],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3030]}],action:"output",params:'{"output": "minus"}'}}," ",{p:[63,5,3128],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"output": "custom"}'},f:["Set"]}," ",{p:[64,5,3219],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3252]}],action:"output",params:'{"output": "plus"}'}}," ",{p:[65,5,3367],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3405]}],action:"output",params:'{"output": "max"}'}}]}," ",{p:[67,3,3533],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3567],t:7,e:"span",f:[{t:2,x:{r:["adata.outputUsed"],s:"Math.round(_0)"},p:[68,9,3573]},"W"]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],231:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,71]},"W"]}," ",{p:[5,3,122],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,159],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,165]},"° (",{t:2,r:"data.direction",p:[6,45,199]},")"]}]}," ",{p:[8,3,244],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,282],t:7,e:"ui-button",a:{icon:"step-backward",action:"control",params:'{"cdir": -15}'},f:["15°"]}," ",{p:[10,5,378],t:7,e:"ui-button",a:{icon:"backward",action:"control",params:'{"cdir": -5}'},f:["5°"]}," ",{p:[11,5,467],t:7,e:"ui-button",a:{icon:"forward",action:"control",params:'{"cdir": 5}'},f:["5°"]}," ",{p:[12,5,554],t:7,e:"ui-button",a:{icon:"step-forward",action:"control",params:'{"cdir": 15}'},f:["15°"]}]}]}," ",{p:[15,1,673],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,705],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,743],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,774]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,889],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,922]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1039],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1072]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1239],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1276],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1282]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1326]},")"]}]}," ",{p:[27,3,1373],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1410],t:7,e:"ui-button",a:{icon:"fast-backward",action:"control",params:'{"tdir": -180}'},f:["180°"]}," ",{p:[29,5,1508],t:7,e:"ui-button",a:{icon:"step-backward",action:"control",params:'{"tdir": -30}'},f:["30°"]}," ",{p:[30,5,1604],t:7,e:"ui-button",a:{icon:"backward",action:"control",params:'{"tdir": -5}'},f:["5°"]}," ",{p:[31,5,1693],t:7,e:"ui-button",a:{icon:"forward",action:"control",params:'{"tdir": 5}'},f:["5°"]}," ",{p:[32,5,1780],t:7,e:"ui-button",a:{icon:"step-forward",action:"control",params:'{"tdir": 30}'},f:["30°"]}," ",{p:[33,5,1874],t:7,e:"ui-button",a:{icon:"fast-forward",action:"control",params:'{"tdir": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2057],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2136],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2175],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2188]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2233]},"Found"]}]}," ",{p:[43,2,2302],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2338],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2351]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2395]}," Panels Connected"]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],232:[function(t,e,n){var r=t(196),i={exports:{}};!function(e){"use strict";e.exports={data:{text:t(242)}}}(i),i.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[12,7,173],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[11,5,149]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[15,3,259],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,290],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,307]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[17,14,357]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,411]}]}]}," ",{p:[20,3,468],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[22,7,530],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[22,40,563]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[22,61,584]},"%"]}],n:50,r:"data.hasPowercell",p:[21,5,498]},{t:4,n:51,f:[{p:[24,4,641],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[28,1,714],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[29,3,748],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[30,3,791],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[30,9,797]},"°C"]}]}," ",{p:[32,2,860],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[33,3,902],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[33,9,908]},"°C"]}]}," ",{t:4,f:[{p:[36,2,990],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[37,7,1031],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[37,46,1070]}],action:"target",params:'{"target": -20}'}}," ",{p:[38,7,1175],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[38,41,1209]}],action:"target",params:'{"target": -5}'}}," ",{p:[39,7,1313],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "custom"}'},f:["Set"]}," ",{p:[40,7,1406],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[40,40,1439]}],action:"target",params:'{"target": 5}'}}," ",{p:[41,7,1542],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[41,45,1580]}],action:"target",params:'{"target": 20}'}}]}],n:50,r:"data.open",p:[35,3,971]}," ",{p:[44,3,1706],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[46,7,1758],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[46,46,1797]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[47,7,1905],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[47,48,1946]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[48,7,2054],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[48,41,2088]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[45,3,1734]},{t:4,n:51,f:[{p:[50,4,2204],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[50,10,2210]}]}],r:"data.open"}]}]}]},e.exports=r.extend(i.exports)},{196:196,242:242}],233:[function(t,e,n){var r=t(196),i={exports:{}};i.exports.template={v:3,t:[{t:4,f:[{p:[2,3,31],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,50]}," Alarms"]},f:[{p:[3,5,74],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,107],t:7,e:"li",f:[{t:2,r:".",p:[5,13,111]}]}],n:52,r:".",p:[4,7,86]},{t:4,n:51,f:[{p:[7,9,147],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=r.extend(i.exports)},{196:196}],234:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={data:{tankPressureState:function(){var t=this.get("data.tankPressureState");return t>=200?"good":t>=100?"average":"bad"}}}}(i),i.exports.template={v:3,t:[" ",{p:[14,1,263],t:7,e:"ui-notice",f:[{p:[15,3,277],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[15,23,297]}," connected to a mask."]}]}," ",{p:[17,1,380],t:7,e:"ui-display",f:[{p:[18,3,395],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,436],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,470]}],state:[{t:2,r:"tankPressureState",p:[20,16,508]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,531]}," kPa"]}]}," ",{p:[22,3,597],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,639],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,652]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,686]}],value:[{t:2,r:"data.releasePressure",p:[24,14,728]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,754]}," kPa"]}]}," ",{p:[26,3,823],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,867],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,900]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1054],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1085]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1230],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "custom"}'},f:["Set"]}," ",{p:[32,5,1325],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1355]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[35,3,1514],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[36,5,1545],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[36,22,1562]}],state:[{t:2,x:{r:["data.maskConnected"],s:'_0?null:"disabled"'},p:[36,69,1609]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[37,22,1674]}]}]}]}]},e.exports=r.extend(i.exports)},{196:196}],235:[function(t,e,n){var r=t(196),i={exports:{}};!function(t){"use strict";t.exports={oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(i),i.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[21,7,461],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[20,5,432]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[24,3,547],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[25,5,592],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[25,18,605]}]},f:[{t:2,r:"data.telecrystals",p:[25,62,649]}," TC"]}]}]}," ",{t:4,f:[{p:[29,3,740],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[29,22,759]}]},f:[{t:4,f:[{p:[31,7,798],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,26,817]}],candystripe:0,right:0},f:[{p:[32,9,855],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[32,29,875]},": ",{t:2,r:"desc",p:[32,39,885]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[33,18,933]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[34,46,1098]},'", "item": ',{t:2,r:"name",p:[34,69,1121]},', "cost": ',{t:2,r:"cost",p:[34,87,1139]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[35,49,1199]}," TC"]}]}],n:52,r:"items",p:[30,5,775]}]}],n:52,r:"data.buyable",p:[28,1,714]}]},e.exports=r.extend(i.exports)},{196:196}],236:[function(t,e,n){(function(e){"use strict";var n=t(196),r=e.interopRequireDefault(n);t(192),t(1),t(190),t(191);var i=t(197),a=e.interopRequireDefault(i),o=t(237),s=e.interopRequireDefault(o),u=t(238);r["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(241)),a["default"].load({custom:{families:["FontAwesome"],urls:["https://netdna.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"],testStrings:{FontAwesome:""}}}),window.initialize=function(e){window.tgui||(window.tgui=new s["default"]({el:"#container",data:function(){var n={constants:t(239)},r=JSON.parse(e);return Object.assign(n,r)}}))};var c=document.getElementById("data");"{}"!==c.textContent?window.initialize(c.textContent):((0,u.act)(c.getAttribute("data-ref"),"tgui:initialize"),c.remove())}).call(this,t("babel/external-helpers"))},{1:1,190:190,191:191,192:192,196:196,197:197,237:237,238:238,239:239,241:241,"babel/external-helpers":"babel/external-helpers"}],237:[function(t,e,n){var r=t(196),i={exports:{}};!function(e){"use strict";var n=t(238),r=t(240);e.exports={components:{"ui-bar":t(198),"ui-button":t(199),"ui-display":t(200),"ui-notice":t(201),"ui-section":t(203),"ui-subdisplay":t(204)},events:{enter:t(194).enter,space:t(194).space},transitions:{fade:t(195)},onconfig:function(){var e=this.get("config.interface"),n={air_alarm:t(207),"air_alarm/back":t(208),"air_alarm/controls":t(209),"air_alarm/modes":t(210),"air_alarm/scrubbers":t(211),"air_alarm/status":t(212),"air_alarm/thresholds":t(213),"air_alarm/vents":t(214),airlock_electronics:t(215),apc:t(216),atmos_alert:t(217),atmos_control:t(218),"atmos_control/tank":t(219),atmos_filter:t(220),atmos_mixer:t(221),atmos_pump:t(222),canister:t(223),chem_dispenser:t(224),chem_heater:t(225),cryo:t(226),error:t(227),mulebot:t(228),radio:t(229),smes:t(230),solar_control:t(231),space_heater:t(232),station_alert:t(233),tanks:t(234),uplink:t(235)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){var t=this;this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)}),this.on("titlebar.drag",function(){return t.toggle("drag"),!1}),this.on("resize.resize",function(){return t.toggle("resize"),!1}),document.addEventListener("mousemove",function(e){t.get("drag")?r.drag.bind(t)(e):t.get("resize")&&r.resize.bind(t)(e)}),document.addEventListener("mouseup",function(e){t.set({drag:!1,resize:!1,x:null,y:null})})},oncomplete:function(){this.find("main").focus(),(0,n.winset)("mapwindow.map","focus",!0)}}}(i),i.exports.template={v:3,t:[" "," "," "," ",{p:[65,1,2031],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[65,11,2041]}]}," ",{p:[66,1,2071],t:7,e:"main",f:[{p:[67,3,2080],t:7,e:"warnings"}," ",{p:[68,3,2094],t:7,e:"interface"}]}," ",{p:[70,1,2115],t:7,e:"resize"}]},i.exports.components=i.exports.components||{};var a={warnings:t(206),titlebar:t(205),resize:t(202)};for(var o in a)a.hasOwnProperty(o)&&(i.exports.components[o]=a[o]);e.exports=r.extend(i.exports)},{194:194,195:195,196:196,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,238:238,240:240}],238:[function(t,e,n){"use strict";function r(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],e=arguments.length<=1||void 0===arguments[1]?"":arguments[1];return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function i(t,e){var n=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];console.log(n),window.location.href=r(Object.assign({src:t,action:e},n))}function a(t,e,n){var i;window.location.href=r((i={},i[t+"."+e]=n,i),"winset")}n.__esModule=!0,n.href=r,n.act=i,n.winset=a;var o=encodeURIComponent},{}],239:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],240:[function(t,e,n){"use strict";function r(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function i(t){if(t.preventDefault(),this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var i=r(e,n);e=i.x,n=i.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}function a(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,r=a(e,n);e=r.x,n=r.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}n.__esModule=!0,n.resize=n.drag=void 0;var s=t(238);n.drag=i,n.resize=o},{238:238}],241:[function(t,e,n){"use strict";function r(t,e,n){return Math.max(t,Math.min(n,e))}function i(t){var e=arguments.length<=1||void 0===arguments[1]?1:arguments[1];return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=r,n.fixed=i},{}],242:[function(t,e,n){"use strict";function r(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function i(t){return t.replace(/\w\S*/g,r)}n.__esModule=!0,n.upperCaseFirst=r,n.titleCase=i},{}],"babel/external-helpers":[function(t,e,n){var r={};!function(t){var e=t.babelHelpers={};e["typeof"]="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},e.jsx=function(){var t="function"==typeof Symbol&&Symbol["for"]&&Symbol["for"]("react.element")||60103;return function(e,n,r,i){var a=e&&e.defaultProps,o=arguments.length-3;if(n||0===o||(n={}),n&&a)for(var s in a)void 0===n[s]&&(n[s]=a[s]);else n||(n=a||{});if(1===o)n.children=i;else if(o>1){for(var u=Array(o),c=0;o>c;c++)u[c]=arguments[c+3];n.children=u}return{$$typeof:t,type:e,key:void 0===r?null:""+r,ref:null,props:n,_owner:null}}}(),e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function r(i,a){try{var o=e[i](a),s=o.value}catch(u){return void n(u)}o.done?t(s):Promise.resolve(s).then(function(t){r("next",t)},function(t){r("throw",t)})}r("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function r(t,e,n,i){var a=Object.getOwnPropertyDescriptor(t,e);if(void 0===a){var o=Object.getPrototypeOf(t);null!==o&&r(o,e,n,i)}else if("value"in a&&a.writable)a.value=n;else{var s=a.set;void 0!==s&&s.call(i,n)}return n},e.slicedToArray=function(){function t(t,e){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){i=!0,a=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(i)throw a}}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")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,r=[],i=t[Symbol.iterator]();!(n=i.next()).done&&(r.push(n.value),!e||r.length!==e););return r}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e= event.context.params.cost) this.set('hovered', event.context.params) }, @@ -22,7 +22,7 @@ {{/if}} {{/partial}} - {{data.uses}} TC + {{data.telecrystals}} TC {{#each data.buyable}} @@ -30,7 +30,7 @@ {{#each items}} {{cost}} TC