From eed34adc0d6255fa7d4f929d1011070a6964db8d Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Fri, 29 Dec 2017 22:00:18 +0000 Subject: [PATCH 01/35] Late joiners also get summoned guns/magic :cl: coiax add: If you have the (mis)fortune of late joining a shift where a crazy wizard has given magical items or firearms to the crew, you will find yourself also carrying such equipment. /:cl: - Scrying orb now just grants the XRAY mutation to the first human that picks it up - The chance of a "special" magical item is now 1/50, up/down from 0-1 times per summon magic. - The suppressor option in summon guns has been changed from a stetchkin plus a silencer, to just a stetchkin with a silencer pre-installed. - The summon magic/gun tables are now global typelists, rather than a godforsaken giant switch statement - Badmins can call the global /proc/give_guns(human) or /proc/give_magic(human) for all their badmin needs. - The chance of new players being survivor antags is the last effect that triggered summon guns/magic (25 for wizard, 10 for summon event). --- code/__DEFINES/misc.dm | 3 + code/game/gamemodes/wizard/artefact.dm | 11 +- code/game/gamemodes/wizard/spellbook.dm | 10 +- code/modules/admin/secrets.dm | 4 +- code/modules/events/wizard/summons.dm | 4 +- .../modules/mob/dead/new_player/new_player.dm | 5 + code/modules/projectiles/guns/ballistic.dm | 14 +- .../projectiles/guns/ballistic/pistol.dm | 6 +- .../spells/spell_types/rightandwrong.dm | 372 ++++++++---------- 9 files changed, 209 insertions(+), 220 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 6b48641370b..1659a1661d9 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -491,3 +491,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE //Fullscreen overlay resolution in tiles. #define FULLSCREEN_OVERLAY_RESOLUTION_X 15 #define FULLSCREEN_OVERLAY_RESOLUTION_Y 15 + +#define SUMMON_GUNS "guns" +#define SUMMON_MAGIC "magic" diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 6c662fbc18b..a5b8133c53f 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -121,11 +121,20 @@ force = 15 hitsound = 'sound/items/welder2.ogg' + var/xray_granted = FALSE + +/obj/item/scrying/equipped(mob/user) + if(!xray_granted && ishuman(user)) + var/mob/living/carbon/human/H = user + if(!(H.dna.check_mutation(XRAY))) + H.dna.add_mutation(XRAY) + xray_granted = TRUE + . = ..() + /obj/item/scrying/attack_self(mob/user) to_chat(user, "You can see...everything!") visible_message("[user] stares into [src], their eyes glazing over.") user.ghostize(1) - return /////////////////////////////////////////Necromantic Stone/////////////////// diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index b086854ab6e..bc3a1ccde61 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -318,12 +318,6 @@ item_path = /obj/item/scrying category = "Defensive" -/datum/spellbook_entry/item/scryingorb/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - if(..()) - if (!(user.dna.check_mutation(XRAY))) - user.dna.add_mutation(XRAY) - return 1 - /datum/spellbook_entry/item/soulstones name = "Six Soul Stone Shards and the spell Artificer" desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." @@ -482,7 +476,7 @@ /datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - rightandwrong(0, user, 25) + rightandwrong(SUMMON_GUNS, user, 25) active = 1 playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) to_chat(user, "You have cast summon guns!") @@ -499,7 +493,7 @@ /datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - rightandwrong(1, user, 25) + rightandwrong(SUMMON_MAGIC, user, 25) active = 1 playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) to_chat(user, "You have cast summon magic!") diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index f0eddfa8f08..10258d3c2df 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -463,7 +463,7 @@ if("All Antags!") survivor_probability = 100 - rightandwrong(0, usr, survivor_probability) + rightandwrong(SUMMON_GUNS, usr, survivor_probability) if("magic") if(!check_rights(R_FUN)) @@ -476,7 +476,7 @@ if("All Antags!") survivor_probability = 100 - rightandwrong(1, usr, survivor_probability) + rightandwrong(SUMMON_MAGIC, usr, survivor_probability) if("events") if(!check_rights(R_FUN)) diff --git a/code/modules/events/wizard/summons.dm b/code/modules/events/wizard/summons.dm index 64778ae65d3..381cf05c0f4 100644 --- a/code/modules/events/wizard/summons.dm +++ b/code/modules/events/wizard/summons.dm @@ -11,7 +11,7 @@ ..() /datum/round_event/wizard/summonguns/start() - rightandwrong(0,,10) + rightandwrong(SUMMON_GUNS, null, 10) /datum/round_event_control/wizard/summonmagic //The Somewhat Less Classic name = "Summon Magic" @@ -26,4 +26,4 @@ ..() /datum/round_event/wizard/summonmagic/start() - rightandwrong(1,,10) \ No newline at end of file + rightandwrong(SUMMON_MAGIC, null, 10) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 4788a6964d2..a1e0ed44ab5 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -357,6 +357,11 @@ to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() + if(GLOB.summon_guns_triggered) + give_guns(humanc) + if(GLOB.summon_magic_triggered) + give_magic(humanc) + GLOB.joined_player_list += character.ckey if(CONFIG_GET(flag/allow_latejoin_antagonists) && humanc) //Borgs aren't allowed to be antags. Will need to be tweaked if we get true latejoin ais. diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 865ed29a42c..786486eea9b 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -86,14 +86,18 @@ return if(user.transferItemToLoc(A, src)) to_chat(user, "You screw [S] onto [src].") - suppressed = A - S.oldsound = fire_sound - fire_sound = 'sound/weapons/gunshot_silenced.ogg' - w_class += A.w_class //so pistols do not fit in pockets when suppressed - update_icon() + install_suppressor(A) return return 0 +/obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S) + // this proc assumes that the suppressor is already inside src + suppressed = S + S.oldsound = fire_sound + fire_sound = 'sound/weapons/gunshot_silenced.ogg' + w_class += S.w_class //so pistols do not fit in pockets when suppressed + update_icon() + /obj/item/gun/ballistic/attack_hand(mob/user) if(loc == user) if(suppressed && can_unsuppress) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 569040745fc..a4fcdd02666 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -12,7 +12,11 @@ /obj/item/gun/ballistic/automatic/pistol/update_icon() ..() icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" - return + +/obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload) + . = ..() + var/obj/item/suppressor/S = new(src) + install_suppressor(S) /obj/item/gun/ballistic/automatic/pistol/m1911 name = "\improper M1911" diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index bb454a3b19d..d696571bb90 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -1,210 +1,178 @@ //In this file: Summon Magic/Summon Guns/Summon Events -/proc/rightandwrong(summon_type, mob/user, survivor_probability) //0 = Summon Guns, 1 = Summon Magic - var/list/gunslist = list("taser","gravgun","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun","arg","uzi","alienpistol","dragnet","turret","pulsecarbine","decloner","mindflayer","hyperkinetic","advplasmacutter","wormhole","wt550","bulldog","grenadelauncher","goldenrevolver","sniper","medibeam","scatterbeam") - var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying","staffdoor","voodoo", "whistle", "battlemage", "immortality", "ghostsword", "special") - var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos", "necromantic", "bloodcontract") +// 1 in 50 chance of getting something really special. +#define SPECIALIST_MAGIC_PROB 2 +GLOBAL_LIST_INIT(summoned_guns, list( + /obj/item/gun/energy/e_gun/advtaser, + /obj/item/gun/energy/e_gun, + /obj/item/gun/energy/laser, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/ballistic/revolver/detective, + /obj/item/gun/ballistic/automatic/pistol/deagle/camo, + /obj/item/gun/ballistic/automatic/gyropistol, + /obj/item/gun/energy/pulse, + /obj/item/gun/ballistic/automatic/pistol/suppressed, + /obj/item/gun/ballistic/revolver/doublebarrel, + /obj/item/gun/ballistic/shotgun, + /obj/item/gun/ballistic/shotgun/automatic/combat, + /obj/item/gun/ballistic/automatic/ar, + /obj/item/gun/ballistic/revolver/mateba, + /obj/item/gun/ballistic/shotgun/boltaction, + /obj/item/gun/ballistic/automatic/speargun, + /obj/item/gun/ballistic/automatic/mini_uzi, + /obj/item/gun/energy/lasercannon, + /obj/item/gun/energy/kinetic_accelerator/crossbow/large, + /obj/item/gun/energy/e_gun/nuclear, + /obj/item/gun/ballistic/automatic/proto, + /obj/item/gun/ballistic/automatic/shotgun/bulldog, + /obj/item/gun/ballistic/automatic/c20r, + /obj/item/gun/ballistic/automatic/l6_saw, + /obj/item/gun/ballistic/automatic/m90, + /obj/item/gun/energy/alien, + /obj/item/gun/energy/e_gun/dragnet, + /obj/item/gun/energy/e_gun/turret, + /obj/item/gun/energy/pulse/carbine, + /obj/item/gun/energy/decloner, + /obj/item/gun/energy/mindflayer, + /obj/item/gun/energy/kinetic_accelerator, + /obj/item/gun/energy/plasmacutter/adv, + /obj/item/gun/energy/wormhole_projector, + /obj/item/gun/ballistic/automatic/wt550, + /obj/item/gun/ballistic/automatic/shotgun, + /obj/item/gun/ballistic/revolver/grenadelauncher, + /obj/item/gun/ballistic/revolver/golden, + /obj/item/gun/ballistic/automatic/sniper_rifle, + /obj/item/gun/medbeam, + /obj/item/gun/energy/laser/scatter, + /obj/item/gun/energy/gravity_gun)) + +GLOBAL_LIST_INIT(summoned_magic, list( + /obj/item/spellbook/oneuse/fireball, + /obj/item/spellbook/oneuse/smoke, + /obj/item/spellbook/oneuse/blind, + /obj/item/spellbook/oneuse/mindswap, + /obj/item/spellbook/oneuse/forcewall, + /obj/item/spellbook/oneuse/knock, + /obj/item/spellbook/oneuse/barnyard, + /obj/item/spellbook/oneuse/charge, + /obj/item/spellbook/oneuse/summonitem, + /obj/item/gun/magic/wand, + /obj/item/gun/magic/wand/death, + /obj/item/gun/magic/wand/resurrection, + /obj/item/gun/magic/wand/polymorph, + /obj/item/gun/magic/wand/teleport, + /obj/item/gun/magic/wand/door, + /obj/item/gun/magic/wand/fireball, + /obj/item/gun/magic/staff/healing, + /obj/item/gun/magic/staff/door, + /obj/item/scrying, + /obj/item/voodoo, + /obj/item/warpwhistle, + /obj/item/clothing/suit/space/hardsuit/shielded/wizard, + /obj/item/device/immortality_talisman, + /obj/item/melee/ghost_sword)) + +GLOBAL_LIST_INIT(summoned_special_magic, list( + /obj/item/gun/magic/staff/change, + /obj/item/gun/magic/staff/animate, + /obj/item/storage/belt/wands/full, + /obj/item/antag_spawner/contract, + /obj/item/gun/magic/staff/chaos, + /obj/item/device/necromantic_stone, + /obj/item/blood_contract)) + +// If true, it's the probability of triggering "survivor" antag. +GLOBAL_VAR_INIT(summon_guns_triggered, FALSE) +GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) + +/proc/give_guns(mob/living/carbon/human/H) + if(H.stat == DEAD || !(H.client)) + return + if(H.mind) + if(iswizard(H) || H.mind.special_role == "survivalist") + return + + if(prob(GLOB.summon_guns_triggered) && !(H.mind in SSticker.mode.traitors)) + SSticker.mode.traitors += H.mind + + var/datum/objective/steal_five_of_type/summon_guns/guns = new + guns.owner = H.mind + H.mind.objectives += guns + H.mind.special_role = "survivalist" + H.mind.add_antag_datum(/datum/antagonist/auto_custom) + to_chat(H, "You are the survivalist! Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way.") + + var/datum/objective/survive/survive = new + survive.owner = H.mind + H.mind.objectives += survive + H.log_message("Was made into a survivalist, and trusts no one!", INDIVIDUAL_ATTACK_LOG) + H.mind.announce_objectives() + + var/gun_type = pick(GLOB.summoned_guns) + var/obj/item/gun/G = new gun_type(get_turf(H)) + G.unlock() + playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, 1) + + var/in_hand = H.put_in_hands(G) // not always successful + + to_chat(H, "\A [G] appears [in_hand ? "in your hand" : "at your feet"]!") + +/proc/give_magic(mob/living/carbon/human/H) + if(H.stat == DEAD || !(H.client)) + return + if(H.mind) + if(iswizard(H) || H.mind.special_role == "survivalist") + return + + if(prob(GLOB.summon_magic_triggered) && !(H.mind in SSticker.mode.traitors)) + var/datum/objective/steal_five_of_type/summon_magic/magic = new + magic.owner = H.mind + H.mind.objectives += magic + H.mind.special_role = "amateur magician" + H.mind.add_antag_datum(/datum/antagonist/auto_custom) + to_chat(H, "You are the amateur magician! Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way.") + + var/datum/objective/survive/survive = new + survive.owner = H.mind + H.mind.objectives += survive + H.log_message("Was made into a survivalist, and trusts no one!", INDIVIDUAL_ATTACK_LOG) + H.mind.announce_objectives() + + var/magic_type = pick(GLOB.summoned_magic) + var/lucky = FALSE + if(prob(SPECIALIST_MAGIC_PROB)) + magic_type = pick(GLOB.summoned_special_magic) + lucky = TRUE + + var/obj/item/M = new magic_type(get_turf(H)) + playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, 1) + + var/in_hand = H.put_in_hands(M) + + to_chat(H, "\A [M] appears [in_hand ? "in your hand" : "at your feet"]!") + if(lucky) + to_chat(H, "You feel incredibly lucky.") + + +/proc/rightandwrong(summon_type, mob/user, survivor_probability) if(user) //in this case either someone holding a spellbook or a badmin - to_chat(user, "You summoned [summon_type ? "magic" : "guns"]!") - message_admins("[key_name_admin(user, 1)] summoned [summon_type ? "magic" : "guns"]!") - log_game("[key_name(user)] summoned [summon_type ? "magic" : "guns"]!") + to_chat(user, "You summoned [summon_type]!") + message_admins("[key_name_admin(user, 1)] summoned [summon_type]!") + log_game("[key_name(user)] summoned [summon_type]!") + + if(summon_type == SUMMON_MAGIC) + GLOB.summon_magic_triggered = survivor_probability + else if(summon_type == SUMMON_GUNS) + GLOB.summon_guns_triggered = survivor_probability + else + CRASH("Bad summon_type given: [summon_type]") + for(var/mob/living/carbon/human/H in GLOB.player_list) - if(H.stat == DEAD || !(H.client)) - continue - if(H.mind) - if(iswizard(H) || H.mind.special_role == "survivalist") - continue - if(prob(survivor_probability) && !(H.mind in SSticker.mode.traitors)) - SSticker.mode.traitors += H.mind - if(!summon_type) - var/datum/objective/steal_five_of_type/summon_guns/guns = new - guns.owner = H.mind - H.mind.objectives += guns - H.mind.special_role = "survivalist" - H.mind.add_antag_datum(/datum/antagonist/auto_custom) - to_chat(H, "You are the survivalist! Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way.") - else - var/datum/objective/steal_five_of_type/summon_magic/magic = new - magic.owner = H.mind - H.mind.objectives += magic - H.mind.special_role = "amateur magician" - H.mind.add_antag_datum(/datum/antagonist/auto_custom) - to_chat(H, "You are the amateur magician! Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way.") - var/datum/objective/survive/survive = new - survive.owner = H.mind - H.mind.objectives += survive - H.log_message("Was made into a survivalist, and trusts no one!", INDIVIDUAL_ATTACK_LOG) - H.mind.announce_objectives() - var/randomizeguns = pick(gunslist) - var/randomizemagic = pick(magiclist) - var/randomizemagicspecial = pick(magicspeciallist) - if(!summon_type) - var/obj/item/gun/G - switch (randomizeguns) - if("taser") - G = new /obj/item/gun/energy/e_gun/advtaser(get_turf(H)) - if("egun") - G = new /obj/item/gun/energy/e_gun(get_turf(H)) - if("laser") - G = new /obj/item/gun/energy/laser(get_turf(H)) - if("revolver") - G = new /obj/item/gun/ballistic/revolver(get_turf(H)) - if("detective") - G = new /obj/item/gun/ballistic/revolver/detective(get_turf(H)) - if("deagle") - G = new /obj/item/gun/ballistic/automatic/pistol/deagle/camo(get_turf(H)) - if("gyrojet") - G = new /obj/item/gun/ballistic/automatic/gyropistol(get_turf(H)) - if("pulse") - G = new /obj/item/gun/energy/pulse(get_turf(H)) - if("suppressed") - G = new /obj/item/gun/ballistic/automatic/pistol(get_turf(H)) - new /obj/item/suppressor(get_turf(H)) - if("doublebarrel") - G = new /obj/item/gun/ballistic/revolver/doublebarrel(get_turf(H)) - if("shotgun") - G = new /obj/item/gun/ballistic/shotgun(get_turf(H)) - if("combatshotgun") - G = new /obj/item/gun/ballistic/shotgun/automatic/combat(get_turf(H)) - if("arg") - G = new /obj/item/gun/ballistic/automatic/ar(get_turf(H)) - if("mateba") - G = new /obj/item/gun/ballistic/revolver/mateba(get_turf(H)) - if("boltaction") - G = new /obj/item/gun/ballistic/shotgun/boltaction(get_turf(H)) - if("speargun") - G = new /obj/item/gun/ballistic/automatic/speargun(get_turf(H)) - if("uzi") - G = new /obj/item/gun/ballistic/automatic/mini_uzi(get_turf(H)) - if("cannon") - G = new /obj/item/gun/energy/lasercannon(get_turf(H)) - if("crossbow") - G = new /obj/item/gun/energy/kinetic_accelerator/crossbow/large(get_turf(H)) - if("nuclear") - G = new /obj/item/gun/energy/e_gun/nuclear(get_turf(H)) - if("sabr") - G = new /obj/item/gun/ballistic/automatic/proto(get_turf(H)) - if("bulldog") - G = new /obj/item/gun/ballistic/automatic/shotgun/bulldog(get_turf(H)) - if("c20r") - G = new /obj/item/gun/ballistic/automatic/c20r(get_turf(H)) - if("saw") - G = new /obj/item/gun/ballistic/automatic/l6_saw(get_turf(H)) - if("car") - G = new /obj/item/gun/ballistic/automatic/m90(get_turf(H)) - if("alienpistol") - G = new /obj/item/gun/energy/alien(get_turf(H)) - if("dragnet") - G = new /obj/item/gun/energy/e_gun/dragnet(get_turf(H)) - if("turret") - G = new /obj/item/gun/energy/e_gun/turret(get_turf(H)) - if("pulsecarbine") - G = new /obj/item/gun/energy/pulse/carbine(get_turf(H)) - if("decloner") - G = new /obj/item/gun/energy/decloner(get_turf(H)) - if("mindflayer") - G = new /obj/item/gun/energy/mindflayer(get_turf(H)) - if("hyperkinetic") - G = new /obj/item/gun/energy/kinetic_accelerator(get_turf(H)) - if("advplasmacutter") - G = new /obj/item/gun/energy/plasmacutter/adv(get_turf(H)) - if("wormhole") - G = new /obj/item/gun/energy/wormhole_projector(get_turf(H)) - if("wt550") - G = new /obj/item/gun/ballistic/automatic/wt550(get_turf(H)) - if("bulldog") - G = new /obj/item/gun/ballistic/automatic/shotgun(get_turf(H)) - if("grenadelauncher") - G = new /obj/item/gun/ballistic/revolver/grenadelauncher(get_turf(H)) - if("goldenrevolver") - G = new /obj/item/gun/ballistic/revolver/golden(get_turf(H)) - if("sniper") - G = new /obj/item/gun/ballistic/automatic/sniper_rifle(get_turf(H)) - if("medibeam") - G = new /obj/item/gun/medbeam(get_turf(H)) - if("scatterbeam") - G = new /obj/item/gun/energy/laser/scatter(get_turf(H)) - if("gravgun") - G = new /obj/item/gun/energy/gravity_gun(get_turf(H)) - G.unlock() - playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, 1) - + if(summon_type == SUMMON_MAGIC) + give_magic(H) else - switch (randomizemagic) - if("fireball") - new /obj/item/spellbook/oneuse/fireball(get_turf(H)) - if("smoke") - new /obj/item/spellbook/oneuse/smoke(get_turf(H)) - if("blind") - new /obj/item/spellbook/oneuse/blind(get_turf(H)) - if("mindswap") - new /obj/item/spellbook/oneuse/mindswap(get_turf(H)) - if("forcewall") - new /obj/item/spellbook/oneuse/forcewall(get_turf(H)) - if("knock") - new /obj/item/spellbook/oneuse/knock(get_turf(H)) - if("horsemask") - new /obj/item/spellbook/oneuse/barnyard(get_turf(H)) - if("charge") - new /obj/item/spellbook/oneuse/charge(get_turf(H)) - if("summonitem") - new /obj/item/spellbook/oneuse/summonitem(get_turf(H)) - if("wandnothing") - new /obj/item/gun/magic/wand(get_turf(H)) - if("wanddeath") - new /obj/item/gun/magic/wand/death(get_turf(H)) - if("wandresurrection") - new /obj/item/gun/magic/wand/resurrection(get_turf(H)) - if("wandpolymorph") - new /obj/item/gun/magic/wand/polymorph(get_turf(H)) - if("wandteleport") - new /obj/item/gun/magic/wand/teleport(get_turf(H)) - if("wanddoor") - new /obj/item/gun/magic/wand/door(get_turf(H)) - if("wandfireball") - new /obj/item/gun/magic/wand/fireball(get_turf(H)) - if("staffhealing") - new /obj/item/gun/magic/staff/healing(get_turf(H)) - if("staffdoor") - new /obj/item/gun/magic/staff/door(get_turf(H)) - if("armor") - new /obj/item/clothing/suit/space/hardsuit/wizard(get_turf(H)) - if("scrying") - new /obj/item/scrying(get_turf(H)) - if (!(H.dna.check_mutation(XRAY))) - H.dna.add_mutation(XRAY) - to_chat(H, "The walls suddenly disappear.") - if("voodoo") - new /obj/item/voodoo(get_turf(H)) - if("whistle") - new /obj/item/warpwhistle(get_turf(H)) - if("battlemage") - new /obj/item/clothing/suit/space/hardsuit/shielded/wizard(get_turf(H)) - if("immortality") - new /obj/item/device/immortality_talisman(get_turf(H)) - if("ghostsword") - new /obj/item/melee/ghost_sword(get_turf(H)) - if("special") - magiclist -= "special" //only one super OP item per summoning max - switch (randomizemagicspecial) - if("staffchange") - new /obj/item/gun/magic/staff/change(get_turf(H)) - if("staffanimation") - new /obj/item/gun/magic/staff/animate(get_turf(H)) - if("wandbelt") - new /obj/item/storage/belt/wands/full(get_turf(H)) - if("contract") - new /obj/item/antag_spawner/contract(get_turf(H)) - if("staffchaos") - new /obj/item/gun/magic/staff/chaos(get_turf(H)) - if("necromantic") - new /obj/item/device/necromantic_stone(get_turf(H)) - if("bloodcontract") - new /obj/item/blood_contract(get_turf(H)) - to_chat(H, "You suddenly feel lucky.") - playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, 1) - + give_guns(H) /proc/summonevents() if(!SSevents.wizardmode) @@ -221,3 +189,5 @@ SSevents.reschedule() message_admins("Summon Events intensifies, events will now occur every [SSevents.frequency_lower / 600] to [SSevents.frequency_upper / 600] minutes.") log_game("Summon Events was increased!") + +#undef SPECIALIST_MAGIC_PROB From 73723e45292d82b852d4f41e2308b03568140a80 Mon Sep 17 00:00:00 2001 From: Armhulen Date: Thu, 4 Jan 2018 22:04:38 -0800 Subject: [PATCH 02/35] thank fuck --- code/modules/hydroponics/plant_genes.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 5f4a79b661d..e5b80a03043 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -282,13 +282,13 @@ /datum/plant_gene/trait/glow/shadow //makes plant emit slightly purple shadows - //adds -potency*(rate*0.05) light power to products + //adds -potency*(rate*0.2) light power to products name = "Shadow Emission" rate = 0.04 glow_color = "#AAD84B" /datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S) - return -max(S.potency*(rate*0.05), 0.075) + return -max(S.potency*(rate*0.2), 0.2) /datum/plant_gene/trait/glow/red name = "Red Electrical Glow" From 518299efc9394a440bbb49d05eb47f71580a7944 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Sat, 6 Jan 2018 18:12:33 -0500 Subject: [PATCH 03/35] Fixes hulks being able to hold cult bbs --- code/game/gamemodes/cult/cult_items.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 1ce45eaace3..34a57fe62f0 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -123,6 +123,7 @@ to_chat(user, "\"I wouldn't advise that.\"") to_chat(user, "An overwhelming sense of nausea overpowers you!") user.Dizzy(80) + user.dropItemToGround(src, TRUE) user.Knockdown(30) return else @@ -130,6 +131,7 @@ to_chat(user, "A horrible force yanks at your arm!") user.emote("scream") user.apply_damage(30, BRUTE, pick("l_arm", "r_arm")) + user.dropItemToGround(src, TRUE) user.Knockdown(50) return jaunt.Grant(user, src) From 92b905b067e013837e4a6bc450643258371d85f3 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Sun, 7 Jan 2018 14:18:52 -0500 Subject: [PATCH 04/35] Fixes fully_heal not curing disabilities --- code/modules/mob/living/status_procs.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 95033b14592..ff2e294b934 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -150,6 +150,10 @@ if(!disabilities[disability]) return + if(!sources) // No defined source cures the disability entirely. + disabilities -= disability + return + if(!islist(sources)) sources = list(sources) @@ -212,4 +216,4 @@ if(!has_disability(DISABILITY_HUSK)) status_flags |= DISFIGURED //makes them unknown update_body() - add_disability(DISABILITY_HUSK, source) \ No newline at end of file + add_disability(DISABILITY_HUSK, source) From bbf362eb502115e465a126310336e4bde3d66b77 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Sun, 7 Jan 2018 14:42:10 -0500 Subject: [PATCH 05/35] Fixes non-holy mobs purifying BBS --- code/game/objects/items/storage/book.dm | 34 ++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index 25b123e75c1..06430ef5ceb 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -156,23 +156,23 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", var/unholy2clean = A.reagents.get_reagent_amount("unholywater") A.reagents.del_reagent("unholywater") A.reagents.add_reagent("holywater",unholy2clean) - if(istype(A, /obj/item/twohanded/required/cult_bastard)) - var/obj/item/twohanded/required/cult_bastard/sword = A - to_chat(user, "You begin to exorcise [sword].") - playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,1) - if(do_after(user, 40, target = sword)) - playsound(src,'sound/effects/pray_chaplain.ogg',60,1) - for(var/obj/item/device/soulstone/SS in sword.contents) - SS.usability = TRUE - for(var/mob/living/simple_animal/shade/EX in SS) - SSticker.mode.remove_cultist(EX.mind, 1, 0) - EX.icon_state = "ghost1" - EX.name = "Purified [EX.name]" - SS.release_shades(user) - qdel(SS) - new /obj/item/nullrod/claymore(get_turf(sword)) - user.visible_message("[user] has purified the [sword]!!") - qdel(sword) + if(istype(A, /obj/item/twohanded/required/cult_bastard)) + var/obj/item/twohanded/required/cult_bastard/sword = A + to_chat(user, "You begin to exorcise [sword].") + playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,1) + if(do_after(user, 40, target = sword)) + playsound(src,'sound/effects/pray_chaplain.ogg',60,1) + for(var/obj/item/device/soulstone/SS in sword.contents) + SS.usability = TRUE + for(var/mob/living/simple_animal/shade/EX in SS) + SSticker.mode.remove_cultist(EX.mind, 1, 0) + EX.icon_state = "ghost1" + EX.name = "Purified [EX.name]" + SS.release_shades(user) + qdel(SS) + new /obj/item/nullrod/claymore(get_turf(sword)) + user.visible_message("[user] has purified the [sword]!!") + qdel(sword) /obj/item/storage/book/bible/booze From dfa909ec916dec50f68a9adaf9203aaa3127e12a Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Mon, 8 Jan 2018 18:38:40 +1100 Subject: [PATCH 06/35] fixes spell level var --- code/game/gamemodes/wizard/spellbook.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index b086854ab6e..648f042a6b2 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -57,7 +57,7 @@ aspell.name = "Instant [aspell.name]" if(aspell.spell_level >= aspell.level_max) to_chat(user, "This spell cannot be strengthened any further.") - SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.level]")) + SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.spell_level]")) return 1 //No same spell found - just learn it SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) From 9dd984d943befe6594cc1962d437a92b634de4e5 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Mon, 8 Jan 2018 03:20:22 -0500 Subject: [PATCH 07/35] Switches butchering/gib drops to use drop_location --- code/modules/mob/living/carbon/alien/death.dm | 4 ++-- .../modules/mob/living/carbon/alien/larva/death.dm | 4 ++-- code/modules/mob/living/carbon/death.dm | 10 ++++++---- code/modules/mob/living/carbon/human/death.dm | 4 ++-- code/modules/mob/living/death.dm | 2 +- code/modules/mob/living/living.dm | 3 ++- code/modules/mob/living/silicon/death.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 3 ++- code/modules/surgery/bodyparts/dismemberment.dm | 14 +++++++------- 9 files changed, 25 insertions(+), 21 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm index a31dba9fa94..ce2b4401e92 100644 --- a/code/modules/mob/living/carbon/alien/death.dm +++ b/code/modules/mob/living/carbon/alien/death.dm @@ -1,8 +1,8 @@ /mob/living/carbon/alien/spawn_gibs(with_bodyparts) if(with_bodyparts) - new /obj/effect/gibspawner/xeno(get_turf(src)) + new /obj/effect/gibspawner/xeno(drop_location()) else - new /obj/effect/gibspawner/xenobodypartless(get_turf(src)) + new /obj/effect/gibspawner/xenobodypartless(drop_location()) /mob/living/carbon/alien/gib_animation() new /obj/effect/temp_visual/gib_animation(loc, "gibbed-a") diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm index f49e545dfad..e16be71ccf7 100644 --- a/code/modules/mob/living/carbon/alien/larva/death.dm +++ b/code/modules/mob/living/carbon/alien/larva/death.dm @@ -8,9 +8,9 @@ /mob/living/carbon/alien/larva/spawn_gibs(with_bodyparts) if(with_bodyparts) - new /obj/effect/gibspawner/larva(get_turf(src)) + new /obj/effect/gibspawner/larva(drop_location()) else - new /obj/effect/gibspawner/larvabodypartless(get_turf(src)) + new /obj/effect/gibspawner/larvabodypartless(drop_location()) /mob/living/carbon/alien/larva/gib_animation() new /obj/effect/temp_visual/gib_animation(loc, "gibbed-l") diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 1deeaeeb174..082207ccf98 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -13,14 +13,16 @@ SSticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now /mob/living/carbon/gib(no_brain, no_organs, no_bodyparts) + var/atom/Tsec = drop_location() for(var/mob/M in src) if(M in stomach_contents) stomach_contents.Remove(M) - M.forceMove(loc) + M.forceMove(Tsec) visible_message("[M] bursts out of [src]!") ..() /mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts) + var/atom/Tsec = drop_location() if(!no_bodyparts) if(no_organs)//so the organs don't get transfered inside the bodyparts we'll drop. for(var/X in internal_organs) @@ -35,7 +37,7 @@ var/org_zone = check_zone(O.zone) //both groin and chest organs. if(org_zone == "chest") O.Remove(src) - O.forceMove(get_turf(src)) + O.forceMove(Tsec) O.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) else for(var/X in internal_organs) @@ -47,7 +49,7 @@ qdel(I) continue I.Remove(src) - I.forceMove(get_turf(src)) + I.forceMove(Tsec) I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) @@ -55,4 +57,4 @@ for(var/X in bodyparts) var/obj/item/bodypart/BP = X BP.drop_limb() - BP.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) \ No newline at end of file + BP.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 95788da39d6..83006e59b05 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -6,9 +6,9 @@ /mob/living/carbon/human/spawn_gibs(with_bodyparts) if(with_bodyparts) - new /obj/effect/gibspawner/human(get_turf(src), dna, get_static_viruses()) + new /obj/effect/gibspawner/human(drop_location(), dna, get_static_viruses()) else - new /obj/effect/gibspawner/humanbodypartless(get_turf(src), dna, get_static_viruses()) + new /obj/effect/gibspawner/humanbodypartless(drop_location(), dna, get_static_viruses()) /mob/living/carbon/human/spawn_dust(just_ash = FALSE) if(just_ash) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 5f50b7adee5..013e140a7fa 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -18,7 +18,7 @@ return /mob/living/proc/spawn_gibs() - new /obj/effect/gibspawner/generic(get_turf(src), null, get_static_viruses()) + new /obj/effect/gibspawner/generic(drop_location(), null, get_static_viruses()) /mob/living/proc/spill_organs() return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 78bd62a91a0..06c75e32b18 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -786,9 +786,10 @@ if(QDELETED(src)) return if(butcher_results) + var/atom/Tsec = drop_location() for(var/path in butcher_results) for(var/i = 1; i <= butcher_results[path];i++) - new path(src.loc) + new path(Tsec) butcher_results.Remove(path) //In case you want to have things like simple_animals drop their butcher results on gib, so it won't double up below. visible_message("[user] butchers [src].") gib(0, 0, 1) diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 2e1adb1959f..8ecacb608bc 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,5 +1,5 @@ /mob/living/silicon/spawn_gibs() - new /obj/effect/gibspawner/robot(get_turf(src)) + new /obj/effect/gibspawner/robot(drop_location()) /mob/living/silicon/spawn_dust() new /obj/effect/decal/remains/robot(loc) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 6bbebd590cf..dd67b1b2470 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -244,9 +244,10 @@ /mob/living/simple_animal/gib() if(butcher_results) + var/atom/Tsec = drop_location() for(var/path in butcher_results) for(var/i = 1; i <= butcher_results[path];i++) - new path(src.loc) + new path(Tsec) ..() /mob/living/simple_animal/gib_animation() diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 63b955a5710..10f2d182fe4 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -82,7 +82,7 @@ /obj/item/bodypart/proc/drop_limb(special) if(!owner) return - var/turf/T = get_turf(owner) + var/atom/Tsec = owner.drop_location() var/mob/living/carbon/C = owner update_limb(1) C.bodyparts -= src @@ -126,7 +126,7 @@ C.update_hair() C.update_canmove() - if(!T) // T = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced. + if(!Tsec) // Tsec = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced. qdel(src) return @@ -135,7 +135,7 @@ qdel(src) return - forceMove(T) + forceMove(Tsec) @@ -167,7 +167,7 @@ ..() if(C && !special) if(C.handcuffed) - C.handcuffed.forceMove(C.loc) + C.handcuffed.forceMove(drop_location()) C.handcuffed.dropped(C) C.handcuffed = null C.update_handcuffed() @@ -185,7 +185,7 @@ ..() if(C && !special) if(C.handcuffed) - C.handcuffed.forceMove(C.loc) + C.handcuffed.forceMove(drop_location()) C.handcuffed.dropped(C) C.handcuffed = null C.update_handcuffed() @@ -201,7 +201,7 @@ /obj/item/bodypart/r_leg/drop_limb(special) if(owner && !special) if(owner.legcuffed) - owner.legcuffed.forceMove(owner.loc) + owner.legcuffed.forceMove(drop_location()) owner.legcuffed.dropped(owner) owner.legcuffed = null owner.update_inv_legcuffed() @@ -212,7 +212,7 @@ /obj/item/bodypart/l_leg/drop_limb(special) //copypasta if(owner && !special) if(owner.legcuffed) - owner.legcuffed.forceMove(owner.loc) + owner.legcuffed.forceMove(drop_location()) owner.legcuffed.dropped(owner) owner.legcuffed = null owner.update_inv_legcuffed() From 9c547d532b257aa54d22724fc9f414fdc4cd6e4e Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Thu, 4 Jan 2018 12:43:22 -0500 Subject: [PATCH 08/35] penultimate fix --- .../circuitboards/computer_circuitboards.dm | 38 ++++-- code/game/objects/items/devices/multitool.dm | 1 + .../structures/crates_lockers/closets.dm | 6 +- .../closets/secure/bsdroppod.dm | 89 +++++++++++++ code/modules/cargo/expressconsole.dm | 125 ++++++++++++++++++ .../research/designs/comp_board_designs.dm | 2 +- .../research/designs/mining_designs.dm | 10 ++ code/modules/research/techweb/all_nodes.dm | 2 +- icons/obj/2x2.dmi | Bin 6785 -> 13744 bytes icons/obj/computer.dmi | Bin 108650 -> 109211 bytes tgui/src/interfaces/cargo_express.ract | 43 ++++++ 11 files changed, 299 insertions(+), 17 deletions(-) create mode 100644 code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm create mode 100644 code/modules/cargo/expressconsole.dm create mode 100644 tgui/src/interfaces/cargo_express.ract diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 9558fecc808..afd0eeef956 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -188,21 +188,33 @@ build_path = /obj/machinery/computer/cargo var/contraband = FALSE -/obj/item/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/multitool)) - if(!emagged) - contraband = !contraband - to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") - else - to_chat(user, "The spectrum chip is unresponsive.") - else if(istype(I, /obj/item/card/emag)) - if(!emagged) - contraband = TRUE - emagged = TRUE - to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") +/obj/item/circuitboard/computer/cargo/multitool_act(mob/living/user) + if(!emagged) + contraband = !contraband + to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") else - return ..() + to_chat(user, "The spectrum chip is unresponsive.") +/obj/item/circuitboard/computer/cargo/emag_act(mob/living/user) + if(!emagged) + contraband = TRUE + emagged = TRUE + to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") + +/obj/item/circuitboard/computer/cargo/express + name = "Express Supply Console (Computer Board)" + build_path = /obj/machinery/computer/cargo/express + +/obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user) + if (!emagged) + to_chat(user, "Routing protocols are already set to: \"factory defaults\".") + else + to_chat(user, "You reset the routing protocols to: \"factory defaults\".") + emagged = FALSE + +/obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user) + to_chat(user, "You change the routing protocols, allowing the Drop Pod to land anywhere on the station.") + emagged = TRUE /obj/item/circuitboard/computer/cargo/request name = "Supply Request Console (Computer Board)" diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index a2b1ce20568..9445cd73a63 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -18,6 +18,7 @@ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' force = 5 w_class = WEIGHT_CLASS_SMALL + tool_behaviour = TOOL_MULTITOOL throwforce = 0 throw_range = 7 throw_speed = 3 diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index d46978f4b0c..b471e030612 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -132,7 +132,7 @@ if(opened || !can_open(user)) return playsound(loc, open_sound, 15, 1, -3) - opened = 1 + opened = TRUE if(!dense_when_open) density = FALSE climb_time *= 0.5 //it's faster to climb onto an open thing @@ -185,7 +185,7 @@ take_contents() playsound(loc, close_sound, 15, 1, -3) climb_time = initial(climb_time) - opened = 0 + opened = FALSE density = TRUE update_icon() return 1 @@ -206,6 +206,8 @@ bust_open() /obj/structure/closet/attackby(obj/item/W, mob/user, params) + if (istype(src, /obj/structure/closet/bsdroppod)) + return ..()//dont wanna do anything if you're a drop pod if(user in src) return if(opened) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm b/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm new file mode 100644 index 00000000000..dd89e708de9 --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm @@ -0,0 +1,89 @@ +//The "BDPtarget" temp visual is created by the expressconsole, which in turn makes two things: a falling droppod animation, and the droppod itself. + + +//------------------------------------BLUESPACE DROP POD-------------------------------------// +/obj/structure/closet/bsdroppod + name = "Bluespace Drop Pod" + desc = "A Nanotrasen supply drop pod." + icon = 'icons/obj/2x2.dmi' + icon_state = "BDP" + pixel_x = -16//2x2 sprite + pixel_y = -5 + layer = TABLE_LAYER//so that the crate inside doesn't appear underneath + allow_objects = TRUE + allow_dense = TRUE + delivery_icon = null + can_weld_shut = FALSE + armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 90, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + anchored = TRUE + anchorable = FALSE + var/datum/supply_order/SupplyOrder + +/obj/structure/closet/bsdroppod/Initialize(mapload, datum/supply_order/so) + . = ..() + SupplyOrder = so//uses Supply Order passed from expressconsole into BDPtarget + addtimer(CALLBACK(src, .proc/open), 30)//open 3seconds after appearing + +/obj/structure/closet/bsdroppod/update_icon() + cut_overlays() + if (opened) + add_overlay("BDP_open") + else + add_overlay("BDP_door") + +/obj/structure/closet/bsdroppod/toggle(mob/living/user) + return + +/obj/structure/closet/bsdroppod/open() + var/turf/T = get_turf(src) + opened = TRUE + SupplyOrder.generate(T)//not called during populateContents as supplyorder generation requires a turf + update_icon() + playsound(src, open_sound, 15, 1, -3) + addtimer(CALLBACK(src, .proc/sparks), 30)//3 seconds after opening, make some sparks and delete + +/obj/structure/closet/bsdroppod/proc/sparks()//sparks cant be called from addtimer + do_sparks(5, TRUE, src) + qdel(src)//no need for QDEL_IN if we already have a timer + +/obj/structure/closet/bsdroppod/Destroy()//make some sparks b4 deletion + QDEL_NULL(SupplyOrder) + return ..() + +//------------------------------------FALLING BLUESPACE DROP POD-------------------------------------// +/obj/effect/temp_visual/BDPfall + icon = 'icons/obj/2x2.dmi' + icon_state = "BDP_falling" + pixel_x = -16 + pixel_y = -5 + pixel_z = 200 + name = "Bluespace Drop Pod" + desc = "Get out of the way!" + layer = FLY_LAYER//that wasnt flying, that was falling with style! + randomdir = FALSE + +//------------------------------------TEMPORARY_VISUAL-------------------------------------// +/obj/effect/BDPtarget + icon = 'icons/mob/actions/actions_items.dmi' + icon_state = "sniper_zoom" + layer = PROJECTILE_HIT_THRESHHOLD_LAYER + light_range = 2 + var/obj/effect/temp_visual/fallingPod + +/obj/effect/BDPtarget/Initialize(mapload, datum/supply_order/SO) + . = ..() + addtimer(CALLBACK(src, .proc/beginLaunch, SO), 30)//wait 3 seconds + +/obj/effect/BDPtarget/proc/beginLaunch(datum/supply_order/SO) + fallingPod = new /obj/effect/temp_visual/BDPfall(drop_location()) + animate(fallingPod, pixel_z = 0, time = 3, easing = LINEAR_EASING)//make and animate a falling pod + addtimer(CALLBACK(src, .proc/endLaunch, SO), 3, TIMER_CLIENT_TIME)//fall 0.3seconds + +/obj/effect/BDPtarget/proc/endLaunch(datum/supply_order/SO) + explosion(src,0,0,2, flame_range = 2) //explosion and camshake (shoutout to @cyberboss) + new /obj/structure/closet/bsdroppod(drop_location(), SO)//pod is created + qdel(src) + +/obj/effect/BDPtarget/Destroy() + QDEL_NULL(fallingPod)//delete falling pod after animation's over + return ..() \ No newline at end of file diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm new file mode 100644 index 00000000000..60be1e83494 --- /dev/null +++ b/code/modules/cargo/expressconsole.dm @@ -0,0 +1,125 @@ +/obj/machinery/computer/cargo/express + name = "express supply console" + desc = "This console allows the user to purchase a package for double the price,\ + with 1/40th of the delivery time: made possible by NanoTrasen's new \"Drop Pod Railgun\".\ + All sales are near instantaneous - please choose carefully" + icon_screen = "supply_express" + circuit = /obj/item/circuitboard/computer/cargo/express + blockade_warning = "Bluespace instability detected. Delivery impossible." + req_access = list(ACCESS_QM) + var/message + var/locked = TRUE + + +/obj/machinery/computer/cargo/express/attackby(obj/item/W, mob/living/user, params) + ..() + if((istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda)) && allowed(user)) + locked = !locked + to_chat(user, "You [locked ? "lock" : "unlock"] the interface.") + +/obj/machinery/computer/cargo/express/emag_act(mob/living/user) + if(emagged) + return + user.visible_message("[user] swipes a suspicious card through [src]!", + "You change the routing protocols, allowing the Drop Pod to land anywhere on the station.") + emagged = TRUE + // This also sets this on the circuit board + var/obj/item/circuitboard/computer/cargo/board = circuit + board.emagged = TRUE + +/obj/machinery/computer/cargo/express/ui_interact(mob/living/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "cargo_express", name, 1000, 800, master_ui, state) + ui.open() + + +/obj/machinery/computer/cargo/express/ui_data(mob/user) + var/list/data = list() + data["locked"] = locked + data["siliconUser"] = user.has_unlimited_silicon_privilege + data["points"] = SSshuttle.points + data["supplies"] = list() + message = "For normally priced items, please use the standard Supply or Request Console. \ + Sales are near-instantaneous - please choose carefully." + if(SSshuttle.supplyBlocked) + message = blockade_warning + if(emagged) + message = "(&!#@ERROR: ROUTING_#PROTOCOL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD." + + data["message"] = message + + if (emagged) + for(var/pack in SSshuttle.supply_packs) + var/datum/supply_pack/P = SSshuttle.supply_packs[pack] + if (P.name == "Toy Crate")//Can only order toys if emagged. You gotta spend 10K points to crash a droppod somewhere on the station + data["supplies"][P.group] = list( + "name" = P.group, + "packs" = list() + ) + data["supplies"][P.group]["packs"] += list(list( + "name" = P.name, + "cost" = P.cost * 2, //displays twice the normal cost + "id" = pack + )) + else + for(var/pack in SSshuttle.supply_packs) + var/datum/supply_pack/P = SSshuttle.supply_packs[pack] + if(!data["supplies"][P.group]) + data["supplies"][P.group] = list( + "name" = P.group, + "packs" = list() + ) + if((P.hidden) || (P.contraband) || (P.special))//no fun allowed + continue + data["supplies"][P.group]["packs"] += list(list( + "name" = P.name, + "cost" = P.cost * 2, //displays twice the normal cost + "id" = pack + )) + + return data + +/obj/machinery/computer/cargo/express/ui_act(action, params, datum/tgui/ui) + switch(action) + if("add")//Generate Supply Order first + var/id = text2path(params["id"]) + var/datum/supply_pack/pack = SSshuttle.supply_packs[id] + if(!istype(pack)) + return + var/name = "*None Provided*" + var/rank = "*None Provided*" + var/ckey = usr.ckey + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + name = H.get_authentification_name() + rank = H.get_assignment() + else if(issilicon(usr)) + name = usr.real_name + rank = "Silicon" + var/reason = "" + + + var/datum/supply_order/SO = new(pack, name, rank, ckey, reason) + if(SO.pack.cost* 2 <= SSshuttle.points) //If you can afford it, then begin the delivery + SO.generateRequisition(get_turf(src)) + SSshuttle.points -= SO.pack.cost * 2//twice the normal cost + + var/list/empty_turfs = list() + var/area/landingzone + + if (!emagged) + landingzone = locate(/area/quartermaster/storage) in GLOB.sortedAreas + else + landingzone = locate(pick(GLOB.the_station_areas)) in GLOB.sortedAreas + + for(var/turf/open/floor/T in landingzone.contents) //get all the turfs in cargo bay + if(is_blocked_turf(T))//wont land on a blocked turf + continue + empty_turfs.Add(T) + + if (empty_turfs.len != 0 ) + var/LZ = empty_turfs[rand(empty_turfs.len-1)]//pick a random turf + new /obj/effect/BDPtarget(LZ, SO)//where the magic happens. this temp visual makes the actual droppod after a pause + . = TRUE + update_icon() \ No newline at end of file diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 7e743a396be..e5593ff7a61 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -194,7 +194,7 @@ id = "cargorequest" build_path = /obj/item/circuitboard/computer/cargo/request category = list("Computer Boards") - + /datum/design/board/stockexchange name = "Computer Design (Stock Exchange Console)" desc = "Allows for the construction of circuit boards used to build a Stock Exchange Console." diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index 8b193577e0d..d4c716f1254 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -2,6 +2,16 @@ ///////////////////////////////////////// /////////////////Mining////////////////// ///////////////////////////////////////// +/datum/design/cargo_express + name = "Computer Design (Express Supply Console)"//shes beautiful + desc = "Allows for the construction of circuit boards used to build an Express Supply Console."//who? + id = "cargoexpress"//the coder reading this + build_type = PROTOLATHE + materials = list(MAT_GLASS = 1000) + reagents_list = list("sacid" = 20) + build_path = /obj/item/circuitboard/computer/cargo/express + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO /datum/design/drill name = "Mining Drill" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index ba43a1c24b5..ca7616db896 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -424,7 +424,7 @@ display_name = "Mining Technology" description = "Better than Efficiency V." prereq_ids = list("engineering") - design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor") + design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor", "cargoexpress")//e a r l y g a m e) research_cost = 2500 export_price = 10000 diff --git a/icons/obj/2x2.dmi b/icons/obj/2x2.dmi index 3a4fa139af3654374f2e79391b80f70e8addc1d4..21adc379e9343d8fdd1fdbb8d1748ff2d847057e 100644 GIT binary patch literal 13744 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 literal 6785 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 delta 20829 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 diff --git a/tgui/src/interfaces/cargo_express.ract b/tgui/src/interfaces/cargo_express.ract new file mode 100644 index 00000000000..4df45173109 --- /dev/null +++ b/tgui/src/interfaces/cargo_express.ract @@ -0,0 +1,43 @@ + + + + + {{#if data.siliconUser }} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe a QM-Level ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + +{{#if !data.locked }} + + + {{Math.floor(adata.points)}} + + + + {{data.message}} + + + + {{#each data.supplies}} + + {{#each packs}} + + {{cost}} Credits (Premium Pricing) + + {{/each}} + + {{/each}} + +{{/if}} \ No newline at end of file From 65bfae057b96980526a1156bb0a9d50bd22f0c18 Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Thu, 4 Jan 2018 13:05:03 -0500 Subject: [PATCH 09/35] aaaaaand quick map fix. should be done --- _maps/map_files/BoxStation/BoxStation.dmm | 117 ++++++++---- _maps/map_files/PubbyStation/PubbyStation.dmm | 171 +++++++++++++----- tgstation.dme | 2 + 3 files changed, 208 insertions(+), 82 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index a91375d6a55..857550ffa8b 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -19323,7 +19323,7 @@ dir = 4 }, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aWD" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel, @@ -19816,7 +19816,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aXF" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/vault{ @@ -19850,7 +19850,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aXK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20003,7 +20003,7 @@ dir = 4 }, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aYd" = ( /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -20591,7 +20591,7 @@ "aZF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aZG" = ( /obj/machinery/light_switch{ pixel_y = 28 @@ -20617,7 +20617,7 @@ /obj/item/stack/sheet/cardboard, /obj/item/stack/rods/fifty, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aZJ" = ( /obj/structure/table/wood, /obj/item/device/camera/detective, @@ -21037,7 +21037,7 @@ /area/hallway/primary/starboard) "baS" = ( /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "baT" = ( /obj/structure/cable{ icon_state = "1-2" @@ -21076,7 +21076,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "baZ" = ( /obj/machinery/status_display{ layer = 4; @@ -21229,7 +21229,7 @@ /obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bbu" = ( /obj/machinery/power/apc{ dir = 1; @@ -21380,7 +21380,7 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bbQ" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/whiskey{ @@ -21398,7 +21398,7 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bbT" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp/green, @@ -21662,13 +21662,13 @@ dir = 8 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcF" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcG" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv, @@ -21690,7 +21690,7 @@ }, /obj/structure/closet/crate/freezer, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcK" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -21741,7 +21741,7 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -21751,13 +21751,13 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/closed/wall, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcU" = ( /obj/item/stack/tile/plasteel, /turf/open/space, @@ -22129,7 +22129,7 @@ "bdS" = ( /obj/structure/closet/crate/internals, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bdT" = ( /obj/machinery/power/apc{ dir = 8; @@ -22148,7 +22148,7 @@ "bdU" = ( /obj/structure/closet/crate/medical, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bdV" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating/airless, @@ -22405,7 +22405,7 @@ }, /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bey" = ( /turf/open/floor/plasteel/white/corner{ dir = 8 @@ -22447,7 +22447,7 @@ }, /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "beE" = ( /obj/machinery/light, /turf/open/floor/plasteel, @@ -22691,7 +22691,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/stack/sheet/cardboard, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bfh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22702,7 +22702,7 @@ "bfi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bfj" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ @@ -23153,7 +23153,7 @@ dir = 9 }, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "bgz" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -23162,7 +23162,7 @@ "bgA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bgB" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -23760,7 +23760,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bhX" = ( /obj/structure/disposalpipe/sorting/wrap{ dir = 1 @@ -46793,7 +46793,7 @@ "ckQ" = ( /obj/structure/closet/cardboard, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "ckS" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating, @@ -52719,7 +52719,7 @@ /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "cBj" = ( /obj/structure/table, /obj/item/folder/blue, @@ -57013,6 +57013,47 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"QoZ" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpa" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Cargo Warehouse APC"; + areastring = "/area/quartermaster/warehouse"; + pixel_x = 26 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/maintenance/port) +"Qpc" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpd" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpe" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpf" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpg" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qph" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) (1,1,1) = {" aaa @@ -77186,7 +77227,7 @@ aWu aYa aZD aZD -aZD +Qpb aZD aZD bff @@ -77705,7 +77746,7 @@ baS bdS bdU ckQ -aZE +Qpg bjq bjr bjr @@ -78219,7 +78260,7 @@ bcR bcE baS bex -bhY +aZF bgu bic bku @@ -78476,7 +78517,7 @@ bcS bbt bfi beD -aZE +Qph aZE biA bmg @@ -78726,13 +78767,13 @@ aTH aPK aWz aWC -aZE -aZE -aZE +QoZ +Qpa +Qpc bcT -aZE -aZE -aZE +Qpd +Qpe +Qpf aZE bju biv diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 1f5e67ba916..cfdd9f5acb4 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -14590,6 +14590,9 @@ dir = 6 }, /obj/effect/decal/cleanable/oil, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/maintenance/department/cargo) "aKl" = ( @@ -14867,6 +14870,9 @@ req_access_txt = "31" }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/department/cargo) "aLi" = ( @@ -15319,27 +15325,27 @@ dir = 4 }, /turf/closed/wall, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMp" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMq" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMr" = ( /obj/structure/closet/crate, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMs" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -15348,7 +15354,7 @@ pixel_y = 32 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMt" = ( /obj/structure/closet/cardboard, /obj/structure/disposalpipe/segment{ @@ -15362,20 +15368,27 @@ dir = 2 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMu" = ( /obj/item/cigbutt/cigarbutt, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMv" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, +/obj/machinery/power/apc{ + dir = 4; + name = "Cargo Warehouse APC"; + areastring = "/area/quartermaster/warehouse"; + pixel_x = 26 + }, +/obj/structure/cable, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMw" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -15952,20 +15965,20 @@ pixel_x = -32 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNO" = ( /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNP" = ( /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNQ" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNR" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16498,33 +16511,33 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aOZ" = ( /obj/item/stack/sheet/cardboard, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPa" = ( /obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPc" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPd" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -16904,16 +16917,16 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQd" = ( /obj/item/device/flashlight, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQe" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQf" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; @@ -16921,11 +16934,11 @@ }, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQg" = ( /obj/structure/closet/crate/medical, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQh" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/supply) @@ -17446,7 +17459,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRo" = ( /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; @@ -17455,7 +17468,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRp" = ( /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; @@ -17463,11 +17476,11 @@ }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRq" = ( /obj/structure/closet/crate/internals, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRr" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/supply) @@ -48291,7 +48304,7 @@ "coL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "coN" = ( /turf/open/floor/plasteel/neutral/corner, /area/hallway/secondary/exit/departure_lounge) @@ -51370,6 +51383,76 @@ /obj/machinery/vending/games, /turf/open/floor/plasteel/dark, /area/library) +"cCX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/cargo) +"cCY" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/cargo) +"cCZ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/cargo) +"cDa" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDb" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDc" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDd" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDe" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDf" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDg" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDh" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDi" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDj" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDk" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDl" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDm" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDn" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) (1,1,1) = {" aaa @@ -90793,12 +90876,12 @@ aEd aIj aJm aKg -aLg +cDa aMo -aLg -aLg -aLg -aLg +cDd +cDf +cDg +cDh aLg aTj aUu @@ -91826,8 +91909,8 @@ aMs aNO aPb aQe -aLg -aLg +cDi +cDj aTn aUx aVA @@ -92084,7 +92167,7 @@ aNP aPb aNO aNP -aLg +cDk aTo aSk aTm @@ -92341,7 +92424,7 @@ aNO aPc aQf aRq -aLg +cDl aTp aSk aTm @@ -92598,7 +92681,7 @@ aNQ aNO aQg aNP -aLg +cDm aTq aSk aVB @@ -92848,14 +92931,14 @@ aEd aEd aEd aEd -aKl -aLg -aLg -aLg +cCX +cDb +cDc +cDe coL coL coL -aLg +cDn aTr aUy aPd @@ -93105,7 +93188,7 @@ aGI aHr aEd aJp -aKm +cCY aLi aMw aEj @@ -93362,7 +93445,7 @@ aGJ aGJ aDl aEk -aEk +cCZ aLj aMx aEj diff --git a/tgstation.dme b/tgstation.dme index 09f644c7c53..73e99624d18 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1055,6 +1055,7 @@ #include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\bsdroppod.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" @@ -1246,6 +1247,7 @@ #include "code\modules\cargo\console.dm" #include "code\modules\cargo\export_scanner.dm" #include "code\modules\cargo\exports.dm" +#include "code\modules\cargo\expressconsole.dm" #include "code\modules\cargo\order.dm" #include "code\modules\cargo\packs.dm" #include "code\modules\cargo\exports\gear.dm" From 2a36b14294e3ad32b2cbdce36f4e91e3ae842ca0 Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Thu, 4 Jan 2018 17:08:45 -0500 Subject: [PATCH 10/35] cyberboss review --- .../structures/crates_lockers/closets.dm | 24 ++++++++++--------- .../closets/secure/bsdroppod.dm | 5 +++- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index b471e030612..6e6a9f8233c 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -206,10 +206,12 @@ bust_open() /obj/structure/closet/attackby(obj/item/W, mob/user, params) - if (istype(src, /obj/structure/closet/bsdroppod)) - return ..()//dont wanna do anything if you're a drop pod if(user in src) return + if(!src.tool_interact(W,user)) + return ..() + +/obj/structure/closet/proc/tool_interact(obj/item/W, mob/user)//returns TRUE if attackBy call shouldnt be continued (because tool was used/closet was of wrong type), FALSE if otherwise if(opened) if(istype(W, cutting_tool)) if(istype(W, /obj/item/weldingtool)) @@ -219,29 +221,29 @@ playsound(loc, cutting_sound, 40, 1) if(do_after(user, 40*WT.toolspeed, 1, target = src)) if(!opened || !WT.isOn()) - return + return TRUE playsound(loc, cutting_sound, 50, 1) user.visible_message("[user] slices apart \the [src].", "You cut \the [src] apart with \the [WT].", "You hear welding.") deconstruct(TRUE) - return 0 + return TRUE else // for example cardboard box is cut with wirecutters user.visible_message("[user] cut apart \the [src].", \ "You cut \the [src] apart with \the [W].") deconstruct(TRUE) - return 0 + return TRUE if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too - return 1 + return TRUE else if(istype(W, /obj/item/weldingtool) && can_weld_shut) var/obj/item/weldingtool/WT = W if(!WT.remove_fuel(0, user)) - return + return TRUE to_chat(user, "You begin [welded ? "unwelding":"welding"] \the [src]...") playsound(loc, 'sound/items/welder2.ogg', 40, 1) if(do_after(user, 40*WT.toolspeed, 1, target = src)) if(opened || !WT.isOn()) - return + return TRUE playsound(loc, WT.usesound, 50, 1) welded = !welded user.visible_message("[user] [welded ? "welds shut" : "unweldeds"] \the [src].", @@ -250,7 +252,7 @@ update_icon() else if(istype(W, /obj/item/wrench) && anchorable) if(isinspace() && !anchored) - return + return TRUE anchored = !anchored playsound(src.loc, W.usesound, 75, 1) user.visible_message("[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ @@ -259,9 +261,9 @@ else if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1)) if(W.GetID() || !toggle(user)) togglelock(user) - return 1 + return TRUE else - return ..() + return FALSE /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) if(!istype(O) || O.anchored || istype(O, /obj/screen)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm b/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm index dd89e708de9..aa8dca50a51 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm @@ -31,6 +31,9 @@ else add_overlay("BDP_door") +/obj/structure/closet/bsdroppod/tool_interact(obj/item/W, mob/user) + return TRUE + /obj/structure/closet/bsdroppod/toggle(mob/living/user) return @@ -80,8 +83,8 @@ addtimer(CALLBACK(src, .proc/endLaunch, SO), 3, TIMER_CLIENT_TIME)//fall 0.3seconds /obj/effect/BDPtarget/proc/endLaunch(datum/supply_order/SO) - explosion(src,0,0,2, flame_range = 2) //explosion and camshake (shoutout to @cyberboss) new /obj/structure/closet/bsdroppod(drop_location(), SO)//pod is created + explosion(src,0,0,2, flame_range = 2) //explosion and camshake (shoutout to @cyberboss) qdel(src) /obj/effect/BDPtarget/Destroy() From bd20f13e0c1d6310068cb72fc21a6805eb55611e Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Thu, 4 Jan 2018 23:43:33 -0500 Subject: [PATCH 11/35] adds framework for making droppod-specific packs --- code/modules/cargo/console.dm | 4 +- code/modules/cargo/packs.dm | 3561 +++++++++++++++++---------------- 2 files changed, 1783 insertions(+), 1782 deletions(-) diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 296c8766889..a41106a49d6 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -69,7 +69,7 @@ "name" = P.group, "packs" = list() ) - if((P.hidden && !emagged) || (P.contraband && !contraband) || (P.special && !P.special_enabled)) + if((P.hidden && !emagged) || (P.contraband && !contraband) || (P.special && !P.special_enabled) || P.DropPodOnly) continue data["supplies"][P.group]["packs"] += list(list( "name" = P.name, @@ -140,7 +140,7 @@ var/datum/supply_pack/pack = SSshuttle.supply_packs[id] if(!istype(pack)) return - if((pack.hidden && !emagged) || (pack.contraband && !contraband)) + if((pack.hidden && !emagged) || (pack.contraband && !contraband) || pack.DropPodOnly) return var/name = "*None Provided*" diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index de62ba465e5..9d4f98feadf 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1,1780 +1,1781 @@ -/datum/supply_pack - var/name = "Crate" - var/group = "" - var/hidden = FALSE - var/contraband = FALSE - var/cost = 700 // Minimum cost, or infinite points are possible. - var/access = FALSE - var/access_any = FALSE - var/list/contains = null - var/crate_name = "crate" - var/crate_type = /obj/structure/closet/crate - var/dangerous = FALSE // Should we message admins? - var/special = FALSE //Event/Station Goals/Admin enabled packs - var/special_enabled = FALSE - -/datum/supply_pack/proc/generate(turf/T) - var/obj/structure/closet/crate/C = new crate_type(T) - C.name = crate_name - if(access) - C.req_access = list(access) - if(access_any) - C.req_one_access = access_any - - fill(C) - - return C - -/datum/supply_pack/proc/fill(obj/structure/closet/crate/C) - for(var/item in contains) - new item(C) - - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Emergency /////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/emergency - group = "Emergency" - -/datum/supply_pack/emergency/spacesuit - name = "Space Suit Crate" - cost = 3000 - access = ACCESS_EVA - contains = list(/obj/item/clothing/suit/space, - /obj/item/clothing/suit/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath) - crate_name = "space suit crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/emergency/vehicle - name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN - cost = 2000 - contraband = TRUE - contains = list(/obj/vehicle/ridden/atv, - /obj/item/key, - /obj/item/clothing/suit/jacket/leather/overcoat, - /obj/item/clothing/gloves/color/black, - /obj/item/clothing/head/soft, - /obj/item/clothing/mask/bandana/skull)//so you can properly #cargoniabikergang - crate_name = "Biker Kit" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/emergency/equipment - name = "Emergency Equipment" - cost = 3500 - contains = list(/mob/living/simple_animal/bot/floorbot, - /mob/living/simple_animal/bot/floorbot, - /mob/living/simple_animal/bot/medbot, - /mob/living/simple_animal/bot/medbot, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas) - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/internals - name = "Internals Crate" - cost = 1000 - contains = list(/obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air) - crate_name = "internals crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/firefighting - name = "Firefighting Crate" - cost = 1000 - contains = list(/obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/device/flashlight, - /obj/item/device/flashlight, - /obj/item/tank/internals/oxygen/red, - /obj/item/tank/internals/oxygen/red, - /obj/item/extinguisher, - /obj/item/extinguisher, - /obj/item/clothing/head/hardhat/red, - /obj/item/clothing/head/hardhat/red) - crate_name = "firefighting crate" - -/datum/supply_pack/emergency/atmostank - name = "Firefighting Watertank" - cost = 1000 - access = ACCESS_ATMOSPHERICS - contains = list(/obj/item/watertank/atmos) - crate_name = "firefighting watertank crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/emergency/radiation - name = "Radiation Protection Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/radiation, - /obj/item/clothing/head/radiation, - /obj/item/clothing/suit/radiation, - /obj/item/clothing/suit/radiation, - /obj/item/device/geiger_counter, - /obj/item/device/geiger_counter, - /obj/item/reagent_containers/food/drinks/bottle/vodka, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass) - crate_name = "radiation protection crate" - crate_type = /obj/structure/closet/crate/radiation - -/datum/supply_pack/emergency/weedcontrol - name = "Weed Control Crate" - cost = 1500 - access = ACCESS_HYDROPONICS - contains = list(/obj/item/scythe, - /obj/item/clothing/mask/gas, - /obj/item/grenade/chem_grenade/antiweed, - /obj/item/grenade/chem_grenade/antiweed) - crate_name = "weed control crate" - crate_type = /obj/structure/closet/crate/secure/hydroponics - -/datum/supply_pack/emergency/metalfoam - name = "Metal Foam Grenade Crate" - cost = 1000 - contains = list(/obj/item/storage/box/metalfoam) - crate_name = "metal foam grenade crate" - -/datum/supply_pack/emergency/droneshells - name = "Drone Shell Crate" - cost = 1000 - contains = list(/obj/item/drone_shell, - /obj/item/drone_shell, - /obj/item/drone_shell) - crate_name = "drone shell crate" - -/datum/supply_pack/emergency/specialops - name = "Special Ops Supplies" - hidden = TRUE - cost = 2000 - contains = list(/obj/item/storage/box/emps, - /obj/item/grenade/smokebomb, - /obj/item/grenade/smokebomb, - /obj/item/grenade/smokebomb, - /obj/item/pen/sleepy, - /obj/item/grenade/chem_grenade/incendiary) - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/syndicate - name = "NULL_ENTRY" - hidden = TRUE - cost = 20000 - contains = list() - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - dangerous = TRUE - -/datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C) - var/crate_value = 30 - var/list/uplink_items = get_uplink_items(SSticker.mode) - while(crate_value) - var/category = pick(uplink_items) - var/item = pick(uplink_items[category]) - var/datum/uplink_item/I = uplink_items[category][item] - - if(!I.surplus || prob(100 - I.surplus)) - continue - if(crate_value < I.cost) - continue - crate_value -= I.cost - new I.item(C) - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Security //////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/security - group = "Security" - access = ACCESS_SECURITY - crate_type = /obj/structure/closet/crate/secure/gear - -/datum/supply_pack/security/supplies - name = "Security Supplies Crate" - cost = 1000 - contains = list(/obj/item/storage/box/flashbangs, - /obj/item/storage/box/teargas, - /obj/item/storage/box/flashes, - /obj/item/storage/box/handcuffs) - crate_name = "security supply crate" - -/datum/supply_pack/security/helmets - name = "Helmets Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/helmet/sec, - /obj/item/clothing/head/helmet/sec, - /obj/item/clothing/head/helmet/sec) - crate_name = "helmet crate" - -/datum/supply_pack/security/armor - name = "Armor Crate" - cost = 1000 - contains = list(/obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest) - crate_name = "armor crate" - -/datum/supply_pack/security/baton - name = "Stun Batons Crate" - cost = 1000 - contains = list(/obj/item/melee/baton/loaded, - /obj/item/melee/baton/loaded, - /obj/item/melee/baton/loaded) - crate_name = "stun baton crate" - -/datum/supply_pack/security/wall_flash - name = "Wall-Mounted Flash Crate" - cost = 1000 - contains = list(/obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash) - crate_name = "wall-mounted flash crate" - -/datum/supply_pack/security/laser - name = "Lasers Crate" - cost = 2000 - contains = list(/obj/item/gun/energy/laser, - /obj/item/gun/energy/laser, - /obj/item/gun/energy/laser) - crate_name = "laser crate" - -/datum/supply_pack/security/taser - name = "Taser Crate" - cost = 3000 - contains = list(/obj/item/gun/energy/e_gun/advtaser, - /obj/item/gun/energy/e_gun/advtaser, - /obj/item/gun/energy/e_gun/advtaser) - crate_name = "taser crate" - -/datum/supply_pack/security/disabler - name = "Disabler Crate" - cost = 1500 - contains = list(/obj/item/gun/energy/disabler, - /obj/item/gun/energy/disabler, - /obj/item/gun/energy/disabler) - crate_name = "disabler crate" - -/datum/supply_pack/security/forensics - name = "Forensics Crate" - cost = 2000 - contains = list(/obj/item/device/detective_scanner, - /obj/item/storage/box/evidence, - /obj/item/device/camera, - /obj/item/device/taperecorder, - /obj/item/toy/crayon/white, - /obj/item/clothing/head/fedora/det_hat) - crate_name = "forensics crate" - -/datum/supply_pack/security/armory - access = ACCESS_ARMORY - crate_type = /obj/structure/closet/crate/secure/weapon - -/datum/supply_pack/security/armory/riothelmets - name = "Riot Helmets Crate" - cost = 1500 - contains = list(/obj/item/clothing/head/helmet/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/head/helmet/riot) - crate_name = "riot helmets crate" - -/datum/supply_pack/security/armory/riotarmor - name = "Riot Armor Crate" - cost = 1500 - contains = list(/obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot) - crate_name = "riot armor crate" - -/datum/supply_pack/security/armory/riotshields - name = "Riot Shields Crate" - cost = 2000 - contains = list(/obj/item/shield/riot, - /obj/item/shield/riot, - /obj/item/shield/riot) - crate_name = "riot shields crate" - -/datum/supply_pack/security/armory/bulletarmor - name = "Bulletproof Armor Crate" - cost = 1500 - contains = list(/obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof) - crate_name = "bulletproof armor crate" - -/datum/supply_pack/security/armory/swat - name = "SWAT Crate" - cost = 6000 - contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/suit/space/swat, - /obj/item/clothing/suit/space/swat, - /obj/item/clothing/mask/gas/sechailer/swat, - /obj/item/clothing/mask/gas/sechailer/swat, - /obj/item/storage/belt/military/assault, - /obj/item/storage/belt/military/assault, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/gloves/combat) - crate_name = "swat crate" - -/datum/supply_pack/security/armory/combatknives - name = "Combat Knives Crate" - cost = 3000 - contains = list(/obj/item/kitchen/knife/combat, - /obj/item/kitchen/knife/combat, - /obj/item/kitchen/knife/combat) - crate_name = "combat knife crate" - -/datum/supply_pack/security/armory/laserarmor - name = "Reflector Vest Crate" - cost = 2000 - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof) - crate_name = "reflector vest crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/security/armory/ballistic - name = "Combat Shotguns Crate" - cost = 8000 - contains = list(/obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/storage/belt/bandolier, - /obj/item/storage/belt/bandolier, - /obj/item/storage/belt/bandolier) - crate_name = "combat shotguns crate" - -/datum/supply_pack/security/armory/energy - name = "Energy Guns Crate" - cost = 2500 - contains = list(/obj/item/gun/energy/e_gun, - /obj/item/gun/energy/e_gun) - crate_name = "energy gun crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/security/armory/fire - name = "Incendiary Weapons Crate" - cost = 1500 - access = ACCESS_HEADS - contains = list(/obj/item/flamethrower/full, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/grenade/chem_grenade/incendiary, - /obj/item/grenade/chem_grenade/incendiary, - /obj/item/grenade/chem_grenade/incendiary) - crate_name = "incendiary weapons crate" - crate_type = /obj/structure/closet/crate/secure/plasma - dangerous = TRUE - -/datum/supply_pack/security/armory/wt550 - name = "WT-550 Auto Rifle Crate" - cost = 3500 - contains = list(/obj/item/gun/ballistic/automatic/wt550, - /obj/item/gun/ballistic/automatic/wt550) - crate_name = "auto rifle crate" - -/datum/supply_pack/security/armory/wt550ammo - name = "WT-550 Auto Rifle Ammo Crate" - cost = 3000 - contains = list(/obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9) - crate_name = "auto rifle ammo crate" - -/datum/supply_pack/security/armory/mindshield - name = "mindshield implants Crate" - cost = 4000 - contains = list(/obj/item/storage/lockbox/loyalty) - crate_name = "mindshield implant crate" - -/datum/supply_pack/security/armory/trackingimp - name = "Tracking Implants Crate" - cost = 2000 - contains = list(/obj/item/storage/box/trackimp) - crate_name = "tracking implant crate" - -/datum/supply_pack/security/armory/chemimp - name = "Chemical Implants Crate" - cost = 2000 - contains = list(/obj/item/storage/box/chemimp) - crate_name = "chemical implant crate" - -/datum/supply_pack/security/armory/exileimp - name = "Exile Implants Crate" - cost = 3000 - contains = list(/obj/item/storage/box/exileimp) - crate_name = "exile implant crate" - -/datum/supply_pack/security/securitybarriers - name = "Security Barriers Crate" - contains = list(/obj/item/grenade/barrier, - /obj/item/grenade/barrier, - /obj/item/grenade/barrier, - /obj/item/grenade/barrier) - cost = 2000 - crate_name = "security barriers crate" - -/datum/supply_pack/security/firingpins - name = "Standard Firing Pins Crate" - cost = 2000 - contains = list(/obj/item/storage/box/firingpins, - /obj/item/storage/box/firingpins) - crate_name = "firing pins crate" - -/datum/supply_pack/security/securityclothes - name = "Security Clothing Crate" - cost = 3000 - contains = list(/obj/item/clothing/under/rank/security/navyblue, - /obj/item/clothing/under/rank/security/navyblue, - /obj/item/clothing/suit/security/officer, - /obj/item/clothing/suit/security/officer, - /obj/item/clothing/head/beret/sec/navyofficer, - /obj/item/clothing/head/beret/sec/navyofficer, - /obj/item/clothing/under/rank/warden/navyblue, - /obj/item/clothing/suit/security/warden, - /obj/item/clothing/head/beret/sec/navywarden, - /obj/item/clothing/under/rank/head_of_security/navyblue, - /obj/item/clothing/suit/security/hos, - /obj/item/clothing/head/beret/sec/navyhos) - crate_name = "security clothing crate" - -/datum/supply_pack/security/justiceinbound - name = "Standard Justice Enforcer Crate" - cost = 6000 //justice comes at a price. An expensive, noisy price. - contraband = TRUE - contains = list(/obj/item/clothing/head/helmet/justice, - /obj/item/clothing/mask/gas/sechailer) - crate_name = "security clothing crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Engineering ///////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/engineering - group = "Engineering" - crate_type = /obj/structure/closet/crate/engineering - -/datum/supply_pack/engineering/fueltank - name = "Fuel Tank Crate" - cost = 800 - contains = list(/obj/structure/reagent_dispensers/fueltank) - crate_name = "fuel tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/engineering/oxygen - name = "Oxygen Canister" - cost = 1500 - contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) - crate_name = "oxygen canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/engineering/nitrogen - name = "Nitrogen Canister" - cost = 2000 - contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) - crate_name = "nitrogen canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/engineering/carbon_dio - name = "Carbon Dioxide Canister" - cost = 3000 - contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) - crate_name = "carbon dioxide canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/science/nitrous_oxide_canister - name = "Nitrous Oxide Canister" - cost = 3000 - access = ACCESS_ATMOSPHERICS - contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide) - crate_name = "nitrous oxide canister crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/engineering/tools - name = "Toolbox Crate" - contains = list(/obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/mechanical) - cost = 1000 - crate_name = "toolbox crate" - -/datum/supply_pack/engineering/powergamermitts - name = "Insulated Gloves Crate" - cost = 2000 //Made of pure-grade bullshittinium - contains = list(/obj/item/clothing/gloves/color/yellow, - /obj/item/clothing/gloves/color/yellow, - /obj/item/clothing/gloves/color/yellow) - crate_name = "insulated gloves crate" - -/datum/supply_pack/engineering/power - name = "Powercell Crate" - cost = 1000 - contains = list(/obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high) - crate_name = "electrical maintenance crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/obj/item/stock_parts/cell/inducer_supply - maxcharge = 5000 - charge = 5000 - -/datum/supply_pack/engineering/inducers - name = "NT-75 Electromagnetic Power Inducers Crate" - cost = 2000 - contains = list(/obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}, /obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}) //FALSE doesn't work in modified type paths apparently. - crate_name = "inducer crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/engiequipment - name = "Engineering Gear Crate" - cost = 1300 - contains = list(/obj/item/storage/belt/utility, - /obj/item/storage/belt/utility, - /obj/item/storage/belt/utility, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/glasses/meson/engine, - /obj/item/clothing/glasses/meson/engine) - crate_name = "engineering gear crate" - - -/datum/supply_pack/engineering/shieldgen - name = "Anti-breach Shield Projector Crate" - cost = 2500 - contains = list(/obj/machinery/shieldgen, - /obj/machinery/shieldgen) - crate_name = "anti-breach shield projector crate" - -/datum/supply_pack/engineering/grounding_rods - name = "Grounding Rod Crate" - cost = 1700 - contains = list(/obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod) - crate_name = "grounding rod crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/pacman - name = "P.A.C.M.A.N Generator Crate" - cost = 2500 - contains = list(/obj/machinery/power/port_gen/pacman) - crate_name = "PACMAN generator crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/solar - name = "Solar Panel Crate" - cost = 2000 - contains = list(/obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/circuitboard/computer/solar_control, - /obj/item/electronics/tracker, - /obj/item/paper/guides/jobs/engi/solars) - crate_name = "solar panel crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/engine - name = "Emitter Crate" - cost = 1500 - access = ACCESS_CE - contains = list(/obj/machinery/power/emitter, - /obj/machinery/power/emitter) - crate_name = "emitter crate" - crate_type = /obj/structure/closet/crate/secure/engineering - dangerous = TRUE - -/datum/supply_pack/engineering/engine/field_gen - name = "Field Generator Crate" - cost = 1500 - contains = list(/obj/machinery/field/generator, - /obj/machinery/field/generator) - crate_name = "field generator crate" - -/datum/supply_pack/engineering/engine/sing_gen - name = "Singularity Generator Crate" - cost = 5000 - contains = list(/obj/machinery/the_singularitygen) - crate_name = "singularity generator crate" - -/datum/supply_pack/engineering/engine/tesla_gen - name = "Tesla Generator Crate" - cost = 5000 - contains = list(/obj/machinery/the_singularitygen/tesla) - crate_name = "tesla generator crate" - -/datum/supply_pack/engineering/engine/collector - name = "Collector Crate" - cost = 2500 - contains = list(/obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector) - crate_name = "collector crate" - -/datum/supply_pack/engineering/engine/PA - name = "Particle Accelerator Crate" - cost = 3000 - contains = list(/obj/structure/particle_accelerator/fuel_chamber, - /obj/machinery/particle_accelerator/control_box, - /obj/structure/particle_accelerator/particle_emitter/center, - /obj/structure/particle_accelerator/particle_emitter/left, - /obj/structure/particle_accelerator/particle_emitter/right, - /obj/structure/particle_accelerator/power_box, - /obj/structure/particle_accelerator/end_cap) - crate_name = "particle accelerator crate" - -/datum/supply_pack/engineering/engine/supermatter_shard - name = "Supermatter Shard Crate" - cost = 10000 - access = ACCESS_CE - contains = list(/obj/machinery/power/supermatter_shard) - crate_name = "supermatter shard crate" - crate_type = /obj/structure/closet/crate/secure/engineering - dangerous = TRUE - -/datum/supply_pack/engineering/engine/am_shielding - name = "Antimatter Shielding Crate" - cost = 2000 - contains = list(/obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container)//10 shields: 3x3 containment and a core - crate_name = "antimatter shielding crate" - -/datum/supply_pack/engineering/engine/am_core - name = "Antimatter Control Crate" - cost = 5000 - contains = list(/obj/machinery/power/am_control_unit) - crate_name = "antimatter control crate" - -/datum/supply_pack/engineering/engine/am_jar - name = "Antimatter Containment Jar Crate" - cost = 2000 - contains = list(/obj/item/am_containment, - /obj/item/am_containment) - crate_name = "antimatter jar crate" - -/datum/supply_pack/engineering/shuttle_engine - name = "Shuttle Engine Crate" - cost = 5000 - access = ACCESS_CE - contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo) - crate_name = "shuttle engine crate" - crate_type = /obj/structure/closet/crate/secure/engineering - special = TRUE - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Medical ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/medical - group = "Medical" - crate_type = /obj/structure/closet/crate/medical - -/datum/supply_pack/medical/supplies - name = "Medical Supplies Crate" - cost = 2000 - contains = list(/obj/item/reagent_containers/glass/bottle/charcoal, - /obj/item/reagent_containers/glass/bottle/charcoal, - /obj/item/reagent_containers/glass/bottle/epinephrine, - /obj/item/reagent_containers/glass/bottle/epinephrine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/toxin, - /obj/item/reagent_containers/glass/bottle/toxin, - /obj/item/reagent_containers/glass/beaker/large, - /obj/item/reagent_containers/glass/beaker/large, - /obj/item/reagent_containers/pill/insulin, - /obj/item/reagent_containers/pill/insulin, - /obj/item/reagent_containers/pill/insulin, - /obj/item/reagent_containers/pill/insulin, - /obj/item/stack/medical/gauze, - /obj/item/storage/box/beakers, - /obj/item/storage/box/syringes, - /obj/item/storage/box/bodybags) - crate_name = "medical supplies crate" - -/datum/supply_pack/medical/firstaid - name = "First Aid Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/regular) - crate_name = "first aid kit crate" - -/datum/supply_pack/medical/firstaidbruises - name = "Bruise Treatment Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/brute, - /obj/item/storage/firstaid/brute, - /obj/item/storage/firstaid/brute) - crate_name = "brute treatment kit crate" - -/datum/supply_pack/medical/firstaidburns - name = "Burn Treatment Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/fire, - /obj/item/storage/firstaid/fire, - /obj/item/storage/firstaid/fire) - crate_name = "burn treatment kit crate" - -/datum/supply_pack/medical/firstaidtoxins - name = "Toxin Treatment Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/toxin, - /obj/item/storage/firstaid/toxin, - /obj/item/storage/firstaid/toxin) - crate_name = "toxin treatment kit crate" - -/datum/supply_pack/medical/firstaidoxygen - name = "Oxygen Deprivation Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/o2, - /obj/item/storage/firstaid/o2, - /obj/item/storage/firstaid/o2) - crate_name = "oxygen deprivation kit crate" - -/datum/supply_pack/medical/virus - name = "Virus Crate" - cost = 2500 - access = ACCESS_CMO - contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion, - /obj/item/reagent_containers/glass/bottle/cold, - /obj/item/reagent_containers/glass/bottle/epiglottis_virion, - /obj/item/reagent_containers/glass/bottle/liver_enhance_virion, - /obj/item/reagent_containers/glass/bottle/fake_gbs, - /obj/item/reagent_containers/glass/bottle/magnitis, - /obj/item/reagent_containers/glass/bottle/pierrot_throat, - /obj/item/reagent_containers/glass/bottle/brainrot, - /obj/item/reagent_containers/glass/bottle/hallucigen_virion, - /obj/item/reagent_containers/glass/bottle/anxiety, - /obj/item/reagent_containers/glass/bottle/beesease, - /obj/item/storage/box/syringes, - /obj/item/storage/box/beakers, - /obj/item/reagent_containers/glass/bottle/mutagen) - crate_name = "virus crate" - crate_type = /obj/structure/closet/crate/secure/plasma - dangerous = TRUE - -/datum/supply_pack/medical/bloodpacks - name = "Blood Pack Variety Crate" - cost = 3500 - contains = list(/obj/item/reagent_containers/blood/empty, - /obj/item/reagent_containers/blood/empty, - /obj/item/reagent_containers/blood/APlus, - /obj/item/reagent_containers/blood/AMinus, - /obj/item/reagent_containers/blood/BPlus, - /obj/item/reagent_containers/blood/BMinus, - /obj/item/reagent_containers/blood/OPlus, - /obj/item/reagent_containers/blood/OMinus) - crate_name = "blood freezer" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/medical/iv_drip - name = "IV Drip Crate" - cost = 1000 - contains = list(/obj/machinery/iv_drip) - crate_name = "iv drip crate" - -/datum/supply_pack/medical/defibs - name = "Defibrillator Crate" - cost = 2500 - contains = list(/obj/item/defibrillator/loaded, - /obj/item/defibrillator/loaded) - crate_name = "defibrillator crate" - -/datum/supply_pack/medical/vending - name = "Medical Vending Crate" - cost = 2000 - contains = list(/obj/item/vending_refill/medical, - /obj/item/vending_refill/medical, - /obj/item/vending_refill/medical) - crate_name = "medical vending crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Science ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/science - group = "Science" - crate_type = /obj/structure/closet/crate/science - -/datum/supply_pack/science/robotics - name = "Robotics Assembly Crate" - cost = 1000 - access = ACCESS_ROBOTICS - contains = list(/obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/box/flashes, - /obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high) - crate_name = "robotics assembly crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/robotics/mecha_ripley - name = "Circuit Crate (Ripley APLU)" - cost = 3000 - access = ACCESS_ROBOTICS - contains = list(/obj/item/book/manual/ripley_build_and_repair, - /obj/item/circuitboard/mecha/ripley/main, - /obj/item/circuitboard/mecha/ripley/peripherals) - crate_name = "\improper APLU Ripley circuit crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/robotics/mecha_odysseus - name = "Circuit Crate (Odysseus)" - cost = 2500 - access = ACCESS_ROBOTICS - contains = list(/obj/item/circuitboard/mecha/odysseus/peripherals, - /obj/item/circuitboard/mecha/odysseus/main) - crate_name = "\improper Odysseus circuit crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/plasma - name = "Plasma Assembly Crate" - cost = 1000 - access = ACCESS_TOX_STORAGE - contains = list(/obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/timer, - /obj/item/device/assembly/timer, - /obj/item/device/assembly/timer) - crate_name = "plasma assembly crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/science/shieldwalls - name = "Shield Generators" - cost = 2000 - access = ACCESS_TELEPORTER - contains = list(/obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen) - crate_name = "shield generators crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/transfer_valves - name = "Tank Transfer Valves Crate" - cost = 6000 - access = ACCESS_RD - contains = list(/obj/item/device/transfer_valve, - /obj/item/device/transfer_valve) - crate_name = "tank transfer valves crate" - crate_type = /obj/structure/closet/crate/secure/science - dangerous = TRUE - -/datum/supply_pack/science/tablets - name = "Tablet Crate" - cost = 5000 - contains = list(/obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo) - crate_name = "tablet crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Organic ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/organic - group = "Food & Livestock" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/food - name = "Food Crate" - cost = 1000 - contains = list(/obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/rice, - /obj/item/reagent_containers/food/condiment/milk, - /obj/item/reagent_containers/food/condiment/soymilk, - /obj/item/reagent_containers/food/condiment/saltshaker, - /obj/item/reagent_containers/food/condiment/peppermill, - /obj/item/storage/fancy/egg_box, - /obj/item/reagent_containers/food/condiment/enzyme, - /obj/item/reagent_containers/food/condiment/sugar, - /obj/item/reagent_containers/food/snacks/meat/slab/monkey, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana) - crate_name = "food crate" - -/datum/supply_pack/organic/pizza - name = "Pizza Crate" - cost = 6000 // Best prices this side of the galaxy. - contains = list(/obj/item/pizzabox/margherita, - /obj/item/pizzabox/mushroom, - /obj/item/pizzabox/meat, - /obj/item/pizzabox/vegetable) - crate_name = "pizza crate" - -/datum/supply_pack/organic/cream_piee - name = "High-yield Clown-grade Cream Pie Crate" - cost = 6000 - contains = list(/obj/item/storage/backpack/duffelbag/clown/cream_pie) - crate_name = "party equipment crate" - contraband = TRUE - access = ACCESS_THEATRE - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/organic/monkey - name = "Monkey Crate" - cost = 2000 - contains = list (/obj/item/storage/box/monkeycubes) - crate_name = "monkey crate" - -/datum/supply_pack/organic/party - name = "Party Equipment" - cost = 2000 - contains = list(/obj/item/storage/box/drinkingglasses, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/drinks/bottle/patron, - /obj/item/reagent_containers/food/drinks/bottle/goldschlager, - /obj/item/reagent_containers/food/drinks/ale, - /obj/item/reagent_containers/food/drinks/ale, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/device/flashlight/glowstick, - /obj/item/device/flashlight/glowstick/red, - /obj/item/device/flashlight/glowstick/blue, - /obj/item/device/flashlight/glowstick/cyan, - /obj/item/device/flashlight/glowstick/orange, - /obj/item/device/flashlight/glowstick/yellow, - /obj/item/device/flashlight/glowstick/pink) - crate_name = "party equipment crate" - -/datum/supply_pack/organic/critter - crate_type = /obj/structure/closet/crate/critter - -/datum/supply_pack/organic/critter/cow - name = "Cow Crate" - cost = 3000 - contains = list(/mob/living/simple_animal/cow) - crate_name = "cow crate" - -/datum/supply_pack/organic/critter/goat - name = "Goat Crate" - cost = 2500 - contains = list(/mob/living/simple_animal/hostile/retaliate/goat) - crate_name = "goat crate" - -/datum/supply_pack/organic/critter/chick - name = "Chicken Crate" - cost = 2000 - contains = list( /mob/living/simple_animal/chick) - crate_name = "chicken crate" - -/datum/supply_pack/organic/critter/corgi - name = "Corgi Crate" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/dog/corgi, - /obj/item/clothing/neck/petcollar) - crate_name = "corgi crate" - -/datum/supply_pack/organic/critter/corgi/generate() - . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/dog/corgi/D = locate() in . - qdel(D) - new /mob/living/simple_animal/pet/dog/corgi/Lisa(.) - -/datum/supply_pack/organic/critter/cat - name = "Cat Crate" - cost = 5000 //Cats are worth as much as corgis. - contains = list(/mob/living/simple_animal/pet/cat, - /obj/item/clothing/neck/petcollar, - /obj/item/toy/cattoy) - crate_name = "cat crate" - -/datum/supply_pack/organic/critter/cat/generate() - . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/cat/C = locate() in . - qdel(C) - new /mob/living/simple_animal/pet/cat/Proc(.) - -/datum/supply_pack/organic/critter/pug - name = "Pug Crate" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/dog/pug, - /obj/item/clothing/neck/petcollar) - crate_name = "pug crate" - -/datum/supply_pack/organic/critter/fox - name = "Fox Crate" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/fox, - /obj/item/clothing/neck/petcollar) - crate_name = "fox crate" - -/datum/supply_pack/organic/critter/butterfly - name = "Butterflies Crate" - contraband = TRUE - cost = 5000 - contains = list(/mob/living/simple_animal/butterfly) - crate_name = "entomology samples crate" - -/datum/supply_pack/organic/critter/butterfly/generate() - . = ..() - for(var/i in 1 to 49) - new /mob/living/simple_animal/butterfly(.) - -/datum/supply_pack/organic/hydroponics - name = "Hydroponics Crate" - cost = 1500 - contains = list(/obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/hatchet, - /obj/item/cultivator, - /obj/item/device/plant_analyzer, - /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/suit/apron) - crate_name = "hydroponics crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/hydroponics/hydrotank - name = "Hydroponics Backpack Crate" - cost = 1000 - access = ACCESS_HYDROPONICS - contains = list(/obj/item/watertank) - crate_name = "hydroponics backpack crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/organic/potted_plants - name = "Potted Plants Crate" - cost = 700 - contains = list(/obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random) - crate_name = "potted plants crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/hydroponics/seeds - name = "Seeds Crate" - cost = 1000 - contains = list(/obj/item/seeds/chili, - /obj/item/seeds/berry, - /obj/item/seeds/corn, - /obj/item/seeds/eggplant, - /obj/item/seeds/tomato, - /obj/item/seeds/soya, - /obj/item/seeds/wheat, - /obj/item/seeds/wheat/rice, - /obj/item/seeds/carrot, - /obj/item/seeds/sunflower, - /obj/item/seeds/chanter, - /obj/item/seeds/potato, - /obj/item/seeds/sugarcane) - crate_name = "seeds crate" - -/datum/supply_pack/organic/hydroponics/exoticseeds - name = "Exotic Seeds Crate" - cost = 1500 - contains = list(/obj/item/seeds/nettle, - /obj/item/seeds/replicapod, - /obj/item/seeds/replicapod, - /obj/item/seeds/replicapod, - /obj/item/seeds/plump, - /obj/item/seeds/liberty, - /obj/item/seeds/amanita, - /obj/item/seeds/reishi, - /obj/item/seeds/banana, - /obj/item/seeds/eggplant/eggy, - /obj/item/seeds/random, - /obj/item/seeds/random) - crate_name = "exotic seeds crate" - -/datum/supply_pack/organic/hydroponics/beekeeping_fullkit - name = "Beekeeping Starter Crate" - cost = 1500 - contains = list(/obj/structure/beebox, - /obj/item/honey_frame, - /obj/item/honey_frame, - /obj/item/honey_frame, - /obj/item/queen_bee/bought, - /obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit, - /obj/item/melee/flyswatter) - crate_name = "beekeeping starter crate" - -/datum/supply_pack/organic/hydroponics/beekeeping_suits - name = "Beekeeper Suit Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit, - /obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit) - crate_name = "beekeeper suits" - -/datum/supply_pack/organic/vending - name = "Bartending Supply Crate" - cost = 2000 - contains = list(/obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/coffee, - /obj/item/vending_refill/coffee, - /obj/item/vending_refill/coffee) - crate_name = "bartending supply crate" - -/datum/supply_pack/organic/vending/snack - name = "Snack Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/snack, - /obj/item/vending_refill/snack, - /obj/item/vending_refill/snack) - crate_name = "snacks supply crate" - -/datum/supply_pack/organic/vending/cola - name = "Softdrinks Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/cola, - /obj/item/vending_refill/cola, - /obj/item/vending_refill/cola) - crate_name = "soft drinks supply crate" - -/datum/supply_pack/organic/vending/cigarette - name = "Cigarette Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette) - crate_name = "cigarette supply crate" - -/datum/supply_pack/organic/vending/games - name = "Games Supply Crate" - cost = 1000 - contains = list(/obj/item/vending_refill/games, - /obj/item/vending_refill/games, - /obj/item/vending_refill/games) - crate_name = "games supply crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Materials /////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/materials - group = "Raw Materials" - -/datum/supply_pack/materials/metal50 - name = "50 Metal Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/metal/fifty) - crate_name = "metal sheets crate" - -/datum/supply_pack/materials/plasteel20 - name = "20 Plasteel Sheets" - cost = 7500 - contains = list(/obj/item/stack/sheet/plasteel/twenty) - crate_name = "plasteel sheets crate" - -/datum/supply_pack/materials/plasteel50 - name = "50 Plasteel Sheets" - cost = 16500 - contains = list(/obj/item/stack/sheet/plasteel/fifty) - crate_name = "plasteel sheets crate" - -/datum/supply_pack/materials/glass50 - name = "50 Glass Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/glass/fifty) - crate_name = "glass sheets crate" - -/datum/supply_pack/materials/wood50 - name = "50 Wood Planks" - cost = 2000 - contains = list(/obj/item/stack/sheet/mineral/wood/fifty) - crate_name = "wood planks crate" - -/datum/supply_pack/materials/cardboard50 - name = "50 Cardboard Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/cardboard/fifty) - crate_name = "cardboard sheets crate" - -/datum/supply_pack/materials/plastic50 - name = "50 Plastic Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/plastic/fifty) - crate_name = "plastic sheets crate" - -/datum/supply_pack/materials/sandstone30 - name = "30 Sandstone Blocks" - cost = 1000 - contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty) - crate_name = "sandstone blocks crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Miscellaneous /////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/misc - group = "Miscellaneous Supplies" - -/datum/supply_pack/misc/minerkit - name = "Shaft Miner Starter Kit" - cost = 2500 - access = ACCESS_QM - contains = list(/obj/item/pickaxe/mini, - /obj/item/clothing/glasses/meson, - /obj/item/device/t_scanner/adv_mining_scanner/lesser, - /obj/item/device/radio/headset/headset_cargo/mining, - /obj/item/storage/bag/ore, - /obj/item/clothing/suit/hooded/explorer, - /obj/item/clothing/mask/gas/explorer) - crate_name = "shaft miner starter kit" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/misc/mule - name = "MULEbot Crate" - cost = 2000 - contains = list(/mob/living/simple_animal/bot/mulebot) - crate_name = "\improper MULEbot Crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/conveyor - name = "Conveyor Assembly Crate" - cost = 1500 - contains = list(/obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_switch_construct, - /obj/item/paper/guides/conveyor) - crate_name = "conveyor assembly crate" - -/datum/supply_pack/misc/watertank - name = "Water Tank Crate" - cost = 600 - contains = list(/obj/structure/reagent_dispensers/watertank) - crate_name = "water tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/hightank - name = "High-Capacity Water Tank Crate" - cost = 1200 - contains = list(/obj/structure/reagent_dispensers/watertank/high) - crate_name = "high-capacity water tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/water_vapor - name = "Water Vapor Canister" - cost = 2500 - contains = list(/obj/machinery/portable_atmospherics/canister/water_vapor) - crate_name = "water vapor canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/lasertag - name = "Laser Tag Crate" - cost = 1500 - contains = list(/obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/bluetaghelm, - /obj/item/clothing/head/helmet/bluetaghelm, - /obj/item/clothing/head/helmet/bluetaghelm) - crate_name = "laser tag crate" - -/datum/supply_pack/misc/lasertag/pins - name = "Laser Tag Firing Pins Crate" - cost = 3000 - contraband = TRUE - contains = list(/obj/item/storage/box/lasertagpins) - crate_name = "laser tag crate" - -/datum/supply_pack/misc/clownpin - name = "Hilarious Firing Pin Crate" - cost = 5000 - contraband = TRUE - contains = list(/obj/item/device/firing_pin/clown) - // It's /technically/ a toy. For the clown, at least. - crate_name = "toy crate" - -/datum/supply_pack/misc/religious_supplies - name = "Religious Supplies Crate" - cost = 4000 // it costs so much because the Space Church is ran by Space Jews - contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/storage/book/bible/booze, - /obj/item/storage/book/bible/booze, - /obj/item/clothing/suit/hooded/chaplain_hoodie, - /obj/item/clothing/suit/hooded/chaplain_hoodie, - /obj/item/clothing/under/burial, - /obj/item/clothing/under/burial) - crate_name = "religious supplies crate" - -/datum/supply_pack/misc/book_crate - name = "Book Crate" - cost = 1500 - contains = list(/obj/item/book/codex_gigas, - /obj/item/book/manual/random/, - /obj/item/book/manual/random/, - /obj/item/book/manual/random/, - /obj/item/book/random/triple) - -/datum/supply_pack/misc/paper - name = "Bureaucracy Crate" - cost = 1500 - contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, - /obj/item/device/camera_film, - /obj/item/hand_labeler, - /obj/item/hand_labeler_refill, - /obj/item/hand_labeler_refill, - /obj/item/paper_bin, - /obj/item/pen/fourcolor, - /obj/item/pen/fourcolor, - /obj/item/pen, - /obj/item/pen/fountain, - /obj/item/pen/blue, - /obj/item/pen/red, - /obj/item/folder/blue, - /obj/item/folder/red, - /obj/item/folder/yellow, - /obj/item/clipboard, - /obj/item/clipboard, - /obj/item/stamp, - /obj/item/stamp/denied) - crate_name = "bureaucracy crate" - -/datum/supply_pack/misc/fountainpens - name = "Calligraphy Crate" - cost = 700 - contains = list(/obj/item/storage/box/fountainpens) - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/misc/toner - name = "Toner Crate" - cost = 1000 - contains = list(/obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner) - crate_name = "toner crate" - -/datum/supply_pack/misc/janitor - name = "Janitorial Supplies Crate" - cost = 1000 - contains = list(/obj/item/reagent_containers/glass/bucket, - /obj/item/reagent_containers/glass/bucket, - /obj/item/reagent_containers/glass/bucket, - /obj/item/mop, - /obj/item/caution, - /obj/item/caution, - /obj/item/caution, - /obj/item/storage/bag/trash, - /obj/item/reagent_containers/spray/cleaner, - /obj/item/reagent_containers/glass/rag, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner) - crate_name = "janitorial supplies crate" - -/datum/supply_pack/misc/janitor/janicart - name = "Janitorial Cart and Galoshes Crate" - cost = 2000 - contains = list(/obj/structure/janitorialcart, - /obj/item/clothing/shoes/galoshes) - crate_name = "janitorial cart crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/janitor/janitank - name = "Janitor Backpack Crate" - cost = 1000 - access = ACCESS_JANITOR - contains = list(/obj/item/watertank/janitor) - crate_name = "janitor backpack crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/misc/janitor/lightbulbs - name = "Replacement Lights" - cost = 1000 - contains = list(/obj/item/storage/box/lights/mixed, - /obj/item/storage/box/lights/mixed, - /obj/item/storage/box/lights/mixed) - crate_name = "replacement lights" - -/datum/supply_pack/misc/noslipfloor - name = "High-traction Floor Tiles" - cost = 2000 - contains = list(/obj/item/stack/tile/noslip/thirty) - crate_name = "high-traction floor tiles crate" - -/datum/supply_pack/misc/plasmaman - name = "Plasmaman Supply Kit" - cost = 2000 - contains = list(/obj/item/clothing/under/plasmaman, - /obj/item/clothing/under/plasmaman, - /obj/item/tank/internals/plasmaman/belt/full, - /obj/item/tank/internals/plasmaman/belt/full, - /obj/item/clothing/head/helmet/space/plasmaman, - /obj/item/clothing/head/helmet/space/plasmaman) - crate_name = "plasmaman supply kit" - -/datum/supply_pack/misc/costume - name = "Standard Costume Crate" - cost = 1000 - access = ACCESS_THEATRE - contains = list(/obj/item/storage/backpack/clown, - /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/mask/gas/clown_hat, - /obj/item/clothing/under/rank/clown, - /obj/item/bikehorn, - /obj/item/clothing/under/rank/mime, - /obj/item/clothing/shoes/sneakers/black, - /obj/item/clothing/gloves/color/white, - /obj/item/clothing/mask/gas/mime, - /obj/item/clothing/head/beret, - /obj/item/clothing/suit/suspenders, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, - /obj/item/storage/backpack/mime) - crate_name = "standard costume crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/misc/costume_original - name = "Original Costume Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/snowman, - /obj/item/clothing/suit/snowman, - /obj/item/clothing/head/chicken, - /obj/item/clothing/suit/chickensuit, - /obj/item/clothing/mask/gas/monkeymask, - /obj/item/clothing/suit/monkeysuit, - /obj/item/clothing/head/cardborg, - /obj/item/clothing/suit/cardborg, - /obj/item/clothing/head/xenos, - /obj/item/clothing/suit/xenos, - /obj/item/clothing/suit/hooded/ian_costume, - /obj/item/clothing/suit/hooded/carp_costume, - /obj/item/clothing/suit/hooded/bee_costume) - crate_name = "original costume crate" - -/datum/supply_pack/misc/wizard - name = "Wizard Costume Crate" - cost = 2000 - contains = list(/obj/item/staff, - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/head/wizard/fake) - crate_name = "wizard costume crate" - -/datum/supply_pack/misc/randomised - name = "Collectable Hats Crate!" - cost = 20000 - var/num_contained = 3 //number of items picked to be contained in a randomised crate - contains = list(/obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/HoP, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat) - crate_name = "collectable hats crate" - -/datum/supply_pack/misc/randomised/fill(obj/structure/closet/crate/C) - var/list/L = contains.Copy() - for(var/i in 1 to num_contained) - var/item = pick_n_take(L) - new item(C) - -/datum/supply_pack/misc/bigband - contains = list(/obj/item/device/instrument/violin, - /obj/item/device/instrument/guitar, - /obj/item/device/instrument/glockenspiel, - /obj/item/device/instrument/accordion, - /obj/item/device/instrument/saxophone, - /obj/item/device/instrument/trombone, - /obj/item/device/instrument/recorder, - /obj/item/device/instrument/harmonica, - /obj/structure/piano/unanchored) - name = "Big band instrument collection" - cost = 5000 - crate_name = "Big band musical instruments collection" - -/datum/supply_pack/misc/randomised/contraband - name = "Contraband Crate" - contraband = TRUE - cost = 3000 - num_contained = 5 - contains = list(/obj/item/poster/random_contraband, - /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, - /obj/item/storage/fancy/cigarettes/cigpack_midori, - /obj/item/seeds/ambrosia/deus, - /obj/item/clothing/neck/necklace/dope) - crate_name = "crate" - -/datum/supply_pack/misc/randomised/toys - name = "Toy Crate" - cost = 5000 // or play the arcade machines ya lazy bum - // TODO make this actually just use the arcade machine loot list - num_contained = 5 - contains = list(/obj/item/toy/spinningtoy, - /obj/item/toy/sword, - /obj/item/toy/foamblade, - /obj/item/toy/talking/AI, - /obj/item/toy/talking/owl, - /obj/item/toy/talking/griffin, - /obj/item/toy/nuke, - /obj/item/toy/minimeteor, - /obj/item/toy/plush/carpplushie, - /obj/item/toy/plush/lizardplushie, - /obj/item/toy/plush/snakeplushie, - /obj/item/toy/plush/nukeplushie, - /obj/item/toy/plush/slimeplushie, - /obj/item/coin/antagtoken, - /obj/item/stack/tile/fakespace/loaded, - /obj/item/gun/ballistic/shotgun/toy/crossbow, - /obj/item/toy/redbutton, - /obj/item/toy/eightball, - /obj/item/vending_refill/donksoft) - crate_name = "toy crate" - -/datum/supply_pack/misc/autodrobe - name = "Autodrobe Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/autodrobe, - /obj/item/vending_refill/autodrobe) - crate_name = "autodrobe supply crate" - -/datum/supply_pack/misc/formalwear - name = "Formalwear Crate" - cost = 3000 //Lots of very expensive items. You gotta pay up to look good! - contains = list(/obj/item/clothing/under/blacktango, - /obj/item/clothing/under/assistantformal, - /obj/item/clothing/under/assistantformal, - /obj/item/clothing/under/lawyer/bluesuit, - /obj/item/clothing/suit/toggle/lawyer, - /obj/item/clothing/under/lawyer/purpsuit, - /obj/item/clothing/suit/toggle/lawyer/purple, - /obj/item/clothing/under/lawyer/blacksuit, - /obj/item/clothing/suit/toggle/lawyer/black, - /obj/item/clothing/accessory/waistcoat, - /obj/item/clothing/neck/tie/blue, - /obj/item/clothing/neck/tie/red, - /obj/item/clothing/neck/tie/black, - /obj/item/clothing/head/bowler, - /obj/item/clothing/head/fedora, - /obj/item/clothing/head/flatcap, - /obj/item/clothing/head/beret, - /obj/item/clothing/head/that, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/under/suit_jacket/charcoal, - /obj/item/clothing/under/suit_jacket/navy, - /obj/item/clothing/under/suit_jacket/burgundy, - /obj/item/clothing/under/suit_jacket/checkered, - /obj/item/clothing/under/suit_jacket/tan, - /obj/item/lipstick/random) - crate_name = "formalwear crate" - -/datum/supply_pack/misc/foamforce - name = "Foam Force Crate" - cost = 1000 - contains = list(/obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy) - crate_name = "foam force crate" - -/datum/supply_pack/misc/foamforce/bonus - name = "Foam Force Pistols Crate" - contraband = TRUE - cost = 4000 - contains = list(/obj/item/gun/ballistic/automatic/toy/pistol, - /obj/item/gun/ballistic/automatic/toy/pistol, - /obj/item/ammo_box/magazine/toy/pistol, - /obj/item/ammo_box/magazine/toy/pistol) - crate_name = "foam force crate" - -/datum/supply_pack/misc/artsupply - name = "Art Supplies" - cost = 800 - contains = list(/obj/structure/easel, - /obj/structure/easel, - /obj/item/canvas/nineteenXnineteen, - /obj/item/canvas/nineteenXnineteen, - /obj/item/canvas/twentythreeXnineteen, - /obj/item/canvas/twentythreeXnineteen, - /obj/item/canvas/twentythreeXtwentythree, - /obj/item/canvas/twentythreeXtwentythree, - /obj/item/toy/crayon/rainbow, - /obj/item/toy/crayon/rainbow) - crate_name = "art supply crate" - -/datum/supply_pack/misc/bsa - name = "Bluespace Artillery Parts" - cost = 15000 - special = TRUE - contains = list(/obj/item/circuitboard/machine/bsa/front, - /obj/item/circuitboard/machine/bsa/middle, - /obj/item/circuitboard/machine/bsa/back, - /obj/item/circuitboard/computer/bsa_control - ) - crate_name= "bluespace artillery parts crate" - -/datum/supply_pack/misc/dna_vault - name = "DNA Vault Parts" - cost = 12000 - special = TRUE - contains = list( - /obj/item/circuitboard/machine/dna_vault, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe - ) - crate_name= "dna vault parts crate" - -/datum/supply_pack/misc/dna_probes - name = "DNA Vault Samplers" - cost = 3000 - special = TRUE - contains = list(/obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe - ) - crate_name= "dna samplers crate" - - -/datum/supply_pack/misc/shield_sat - name = "Shield Generator Satellite" - cost = 3000 - special = TRUE - contains = list( - /obj/machinery/satellite/meteor_shield, - /obj/machinery/satellite/meteor_shield, - /obj/machinery/satellite/meteor_shield - ) - crate_name= "shield sat crate" - - -/datum/supply_pack/misc/shield_sat_control - name = "Shield System Control Board" - cost = 5000 - special = TRUE - contains = list(/obj/item/circuitboard/computer/sat_control) - crate_name= "shield control board crate" - -/datum/supply_pack/misc/bicycle - name = "Bicycle" - cost = 1000000 - contains = list(/obj/vehicle/bicycle) - crate_name = "Bicycle Crate" - crate_type = /obj/structure/closet/crate/large +/datum/supply_pack + var/name = "Crate" + var/group = "" + var/hidden = FALSE + var/contraband = FALSE + var/cost = 700 // Minimum cost, or infinite points are possible. + var/access = FALSE + var/access_any = FALSE + var/list/contains = null + var/crate_name = "crate" + var/crate_type = /obj/structure/closet/crate + var/dangerous = FALSE // Should we message admins? + var/special = FALSE //Event/Station Goals/Admin enabled packs + var/special_enabled = FALSE + var/rocketOnly = FALSE + +/datum/supply_pack/proc/generate(turf/T) + var/obj/structure/closet/crate/C = new crate_type(T) + C.name = crate_name + if(access) + C.req_access = list(access) + if(access_any) + C.req_one_access = access_any + + fill(C) + + return C + +/datum/supply_pack/proc/fill(obj/structure/closet/crate/C) + for(var/item in contains) + new item(C) + + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Emergency /////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/emergency + group = "Emergency" + +/datum/supply_pack/emergency/spacesuit + name = "Space Suit Crate" + cost = 3000 + access = ACCESS_EVA + contains = list(/obj/item/clothing/suit/space, + /obj/item/clothing/suit/space, + /obj/item/clothing/head/helmet/space, + /obj/item/clothing/head/helmet/space, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath) + crate_name = "space suit crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/emergency/vehicle + name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN + cost = 2000 + contraband = TRUE + contains = list(/obj/vehicle/ridden/atv, + /obj/item/key, + /obj/item/clothing/suit/jacket/leather/overcoat, + /obj/item/clothing/gloves/color/black, + /obj/item/clothing/head/soft, + /obj/item/clothing/mask/bandana/skull)//so you can properly #cargoniabikergang + crate_name = "Biker Kit" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/emergency/equipment + name = "Emergency Equipment" + cost = 3500 + contains = list(/mob/living/simple_animal/bot/floorbot, + /mob/living/simple_animal/bot/floorbot, + /mob/living/simple_animal/bot/medbot, + /mob/living/simple_animal/bot/medbot, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas) + crate_name = "emergency crate" + crate_type = /obj/structure/closet/crate/internals + +/datum/supply_pack/emergency/internals + name = "Internals Crate" + cost = 1000 + contains = list(/obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air) + crate_name = "internals crate" + crate_type = /obj/structure/closet/crate/internals + +/datum/supply_pack/emergency/firefighting + name = "Firefighting Crate" + cost = 1000 + contains = list(/obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/device/flashlight, + /obj/item/device/flashlight, + /obj/item/tank/internals/oxygen/red, + /obj/item/tank/internals/oxygen/red, + /obj/item/extinguisher, + /obj/item/extinguisher, + /obj/item/clothing/head/hardhat/red, + /obj/item/clothing/head/hardhat/red) + crate_name = "firefighting crate" + +/datum/supply_pack/emergency/atmostank + name = "Firefighting Watertank" + cost = 1000 + access = ACCESS_ATMOSPHERICS + contains = list(/obj/item/watertank/atmos) + crate_name = "firefighting watertank crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/emergency/radiation + name = "Radiation Protection Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/radiation, + /obj/item/clothing/head/radiation, + /obj/item/clothing/suit/radiation, + /obj/item/clothing/suit/radiation, + /obj/item/device/geiger_counter, + /obj/item/device/geiger_counter, + /obj/item/reagent_containers/food/drinks/bottle/vodka, + /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, + /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass) + crate_name = "radiation protection crate" + crate_type = /obj/structure/closet/crate/radiation + +/datum/supply_pack/emergency/weedcontrol + name = "Weed Control Crate" + cost = 1500 + access = ACCESS_HYDROPONICS + contains = list(/obj/item/scythe, + /obj/item/clothing/mask/gas, + /obj/item/grenade/chem_grenade/antiweed, + /obj/item/grenade/chem_grenade/antiweed) + crate_name = "weed control crate" + crate_type = /obj/structure/closet/crate/secure/hydroponics + +/datum/supply_pack/emergency/metalfoam + name = "Metal Foam Grenade Crate" + cost = 1000 + contains = list(/obj/item/storage/box/metalfoam) + crate_name = "metal foam grenade crate" + +/datum/supply_pack/emergency/droneshells + name = "Drone Shell Crate" + cost = 1000 + contains = list(/obj/item/drone_shell, + /obj/item/drone_shell, + /obj/item/drone_shell) + crate_name = "drone shell crate" + +/datum/supply_pack/emergency/specialops + name = "Special Ops Supplies" + hidden = TRUE + cost = 2000 + contains = list(/obj/item/storage/box/emps, + /obj/item/grenade/smokebomb, + /obj/item/grenade/smokebomb, + /obj/item/grenade/smokebomb, + /obj/item/pen/sleepy, + /obj/item/grenade/chem_grenade/incendiary) + crate_name = "emergency crate" + crate_type = /obj/structure/closet/crate/internals + +/datum/supply_pack/emergency/syndicate + name = "NULL_ENTRY" + hidden = TRUE + cost = 20000 + contains = list() + crate_name = "emergency crate" + crate_type = /obj/structure/closet/crate/internals + dangerous = TRUE + +/datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C) + var/crate_value = 30 + var/list/uplink_items = get_uplink_items(SSticker.mode) + while(crate_value) + var/category = pick(uplink_items) + var/item = pick(uplink_items[category]) + var/datum/uplink_item/I = uplink_items[category][item] + + if(!I.surplus || prob(100 - I.surplus)) + continue + if(crate_value < I.cost) + continue + crate_value -= I.cost + new I.item(C) + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Security //////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/security + group = "Security" + access = ACCESS_SECURITY + crate_type = /obj/structure/closet/crate/secure/gear + +/datum/supply_pack/security/supplies + name = "Security Supplies Crate" + cost = 1000 + contains = list(/obj/item/storage/box/flashbangs, + /obj/item/storage/box/teargas, + /obj/item/storage/box/flashes, + /obj/item/storage/box/handcuffs) + crate_name = "security supply crate" + +/datum/supply_pack/security/helmets + name = "Helmets Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/helmet/sec, + /obj/item/clothing/head/helmet/sec, + /obj/item/clothing/head/helmet/sec) + crate_name = "helmet crate" + +/datum/supply_pack/security/armor + name = "Armor Crate" + cost = 1000 + contains = list(/obj/item/clothing/suit/armor/vest, + /obj/item/clothing/suit/armor/vest, + /obj/item/clothing/suit/armor/vest) + crate_name = "armor crate" + +/datum/supply_pack/security/baton + name = "Stun Batons Crate" + cost = 1000 + contains = list(/obj/item/melee/baton/loaded, + /obj/item/melee/baton/loaded, + /obj/item/melee/baton/loaded) + crate_name = "stun baton crate" + +/datum/supply_pack/security/wall_flash + name = "Wall-Mounted Flash Crate" + cost = 1000 + contains = list(/obj/item/storage/box/wall_flash, + /obj/item/storage/box/wall_flash, + /obj/item/storage/box/wall_flash, + /obj/item/storage/box/wall_flash) + crate_name = "wall-mounted flash crate" + +/datum/supply_pack/security/laser + name = "Lasers Crate" + cost = 2000 + contains = list(/obj/item/gun/energy/laser, + /obj/item/gun/energy/laser, + /obj/item/gun/energy/laser) + crate_name = "laser crate" + +/datum/supply_pack/security/taser + name = "Taser Crate" + cost = 3000 + contains = list(/obj/item/gun/energy/e_gun/advtaser, + /obj/item/gun/energy/e_gun/advtaser, + /obj/item/gun/energy/e_gun/advtaser) + crate_name = "taser crate" + +/datum/supply_pack/security/disabler + name = "Disabler Crate" + cost = 1500 + contains = list(/obj/item/gun/energy/disabler, + /obj/item/gun/energy/disabler, + /obj/item/gun/energy/disabler) + crate_name = "disabler crate" + +/datum/supply_pack/security/forensics + name = "Forensics Crate" + cost = 2000 + contains = list(/obj/item/device/detective_scanner, + /obj/item/storage/box/evidence, + /obj/item/device/camera, + /obj/item/device/taperecorder, + /obj/item/toy/crayon/white, + /obj/item/clothing/head/fedora/det_hat) + crate_name = "forensics crate" + +/datum/supply_pack/security/armory + access = ACCESS_ARMORY + crate_type = /obj/structure/closet/crate/secure/weapon + +/datum/supply_pack/security/armory/riothelmets + name = "Riot Helmets Crate" + cost = 1500 + contains = list(/obj/item/clothing/head/helmet/riot, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/head/helmet/riot) + crate_name = "riot helmets crate" + +/datum/supply_pack/security/armory/riotarmor + name = "Riot Armor Crate" + cost = 1500 + contains = list(/obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/riot) + crate_name = "riot armor crate" + +/datum/supply_pack/security/armory/riotshields + name = "Riot Shields Crate" + cost = 2000 + contains = list(/obj/item/shield/riot, + /obj/item/shield/riot, + /obj/item/shield/riot) + crate_name = "riot shields crate" + +/datum/supply_pack/security/armory/bulletarmor + name = "Bulletproof Armor Crate" + cost = 1500 + contains = list(/obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/armor/bulletproof) + crate_name = "bulletproof armor crate" + +/datum/supply_pack/security/armory/swat + name = "SWAT Crate" + cost = 6000 + contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen, + /obj/item/clothing/head/helmet/swat/nanotrasen, + /obj/item/clothing/suit/space/swat, + /obj/item/clothing/suit/space/swat, + /obj/item/clothing/mask/gas/sechailer/swat, + /obj/item/clothing/mask/gas/sechailer/swat, + /obj/item/storage/belt/military/assault, + /obj/item/storage/belt/military/assault, + /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/combat) + crate_name = "swat crate" + +/datum/supply_pack/security/armory/combatknives + name = "Combat Knives Crate" + cost = 3000 + contains = list(/obj/item/kitchen/knife/combat, + /obj/item/kitchen/knife/combat, + /obj/item/kitchen/knife/combat) + crate_name = "combat knife crate" + +/datum/supply_pack/security/armory/laserarmor + name = "Reflector Vest Crate" + cost = 2000 + contains = list(/obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/suit/armor/laserproof) + crate_name = "reflector vest crate" + crate_type = /obj/structure/closet/crate/secure/plasma + +/datum/supply_pack/security/armory/ballistic + name = "Combat Shotguns Crate" + cost = 8000 + contains = list(/obj/item/gun/ballistic/shotgun/automatic/combat, + /obj/item/gun/ballistic/shotgun/automatic/combat, + /obj/item/gun/ballistic/shotgun/automatic/combat, + /obj/item/storage/belt/bandolier, + /obj/item/storage/belt/bandolier, + /obj/item/storage/belt/bandolier) + crate_name = "combat shotguns crate" + +/datum/supply_pack/security/armory/energy + name = "Energy Guns Crate" + cost = 2500 + contains = list(/obj/item/gun/energy/e_gun, + /obj/item/gun/energy/e_gun) + crate_name = "energy gun crate" + crate_type = /obj/structure/closet/crate/secure/plasma + +/datum/supply_pack/security/armory/fire + name = "Incendiary Weapons Crate" + cost = 1500 + access = ACCESS_HEADS + contains = list(/obj/item/flamethrower/full, + /obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/grenade/chem_grenade/incendiary, + /obj/item/grenade/chem_grenade/incendiary, + /obj/item/grenade/chem_grenade/incendiary) + crate_name = "incendiary weapons crate" + crate_type = /obj/structure/closet/crate/secure/plasma + dangerous = TRUE + +/datum/supply_pack/security/armory/wt550 + name = "WT-550 Auto Rifle Crate" + cost = 3500 + contains = list(/obj/item/gun/ballistic/automatic/wt550, + /obj/item/gun/ballistic/automatic/wt550) + crate_name = "auto rifle crate" + +/datum/supply_pack/security/armory/wt550ammo + name = "WT-550 Auto Rifle Ammo Crate" + cost = 3000 + contains = list(/obj/item/ammo_box/magazine/wt550m9, + /obj/item/ammo_box/magazine/wt550m9, + /obj/item/ammo_box/magazine/wt550m9, + /obj/item/ammo_box/magazine/wt550m9) + crate_name = "auto rifle ammo crate" + +/datum/supply_pack/security/armory/mindshield + name = "mindshield implants Crate" + cost = 4000 + contains = list(/obj/item/storage/lockbox/loyalty) + crate_name = "mindshield implant crate" + +/datum/supply_pack/security/armory/trackingimp + name = "Tracking Implants Crate" + cost = 2000 + contains = list(/obj/item/storage/box/trackimp) + crate_name = "tracking implant crate" + +/datum/supply_pack/security/armory/chemimp + name = "Chemical Implants Crate" + cost = 2000 + contains = list(/obj/item/storage/box/chemimp) + crate_name = "chemical implant crate" + +/datum/supply_pack/security/armory/exileimp + name = "Exile Implants Crate" + cost = 3000 + contains = list(/obj/item/storage/box/exileimp) + crate_name = "exile implant crate" + +/datum/supply_pack/security/securitybarriers + name = "Security Barriers Crate" + contains = list(/obj/item/grenade/barrier, + /obj/item/grenade/barrier, + /obj/item/grenade/barrier, + /obj/item/grenade/barrier) + cost = 2000 + crate_name = "security barriers crate" + +/datum/supply_pack/security/firingpins + name = "Standard Firing Pins Crate" + cost = 2000 + contains = list(/obj/item/storage/box/firingpins, + /obj/item/storage/box/firingpins) + crate_name = "firing pins crate" + +/datum/supply_pack/security/securityclothes + name = "Security Clothing Crate" + cost = 3000 + contains = list(/obj/item/clothing/under/rank/security/navyblue, + /obj/item/clothing/under/rank/security/navyblue, + /obj/item/clothing/suit/security/officer, + /obj/item/clothing/suit/security/officer, + /obj/item/clothing/head/beret/sec/navyofficer, + /obj/item/clothing/head/beret/sec/navyofficer, + /obj/item/clothing/under/rank/warden/navyblue, + /obj/item/clothing/suit/security/warden, + /obj/item/clothing/head/beret/sec/navywarden, + /obj/item/clothing/under/rank/head_of_security/navyblue, + /obj/item/clothing/suit/security/hos, + /obj/item/clothing/head/beret/sec/navyhos) + crate_name = "security clothing crate" + +/datum/supply_pack/security/justiceinbound + name = "Standard Justice Enforcer Crate" + cost = 6000 //justice comes at a price. An expensive, noisy price. + contraband = TRUE + contains = list(/obj/item/clothing/head/helmet/justice, + /obj/item/clothing/mask/gas/sechailer) + crate_name = "security clothing crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Engineering ///////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/engineering + group = "Engineering" + crate_type = /obj/structure/closet/crate/engineering + +/datum/supply_pack/engineering/fueltank + name = "Fuel Tank Crate" + cost = 800 + contains = list(/obj/structure/reagent_dispensers/fueltank) + crate_name = "fuel tank crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/engineering/oxygen + name = "Oxygen Canister" + cost = 1500 + contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) + crate_name = "oxygen canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/engineering/nitrogen + name = "Nitrogen Canister" + cost = 2000 + contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) + crate_name = "nitrogen canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/engineering/carbon_dio + name = "Carbon Dioxide Canister" + cost = 3000 + contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) + crate_name = "carbon dioxide canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/science/nitrous_oxide_canister + name = "Nitrous Oxide Canister" + cost = 3000 + access = ACCESS_ATMOSPHERICS + contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide) + crate_name = "nitrous oxide canister crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/engineering/tools + name = "Toolbox Crate" + contains = list(/obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/mechanical, + /obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/mechanical, + /obj/item/storage/toolbox/mechanical) + cost = 1000 + crate_name = "toolbox crate" + +/datum/supply_pack/engineering/powergamermitts + name = "Insulated Gloves Crate" + cost = 2000 //Made of pure-grade bullshittinium + contains = list(/obj/item/clothing/gloves/color/yellow, + /obj/item/clothing/gloves/color/yellow, + /obj/item/clothing/gloves/color/yellow) + crate_name = "insulated gloves crate" + +/datum/supply_pack/engineering/power + name = "Powercell Crate" + cost = 1000 + contains = list(/obj/item/stock_parts/cell/high, + /obj/item/stock_parts/cell/high, + /obj/item/stock_parts/cell/high) + crate_name = "electrical maintenance crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/obj/item/stock_parts/cell/inducer_supply + maxcharge = 5000 + charge = 5000 + +/datum/supply_pack/engineering/inducers + name = "NT-75 Electromagnetic Power Inducers Crate" + cost = 2000 + contains = list(/obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}, /obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}) //FALSE doesn't work in modified type paths apparently. + crate_name = "inducer crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/engiequipment + name = "Engineering Gear Crate" + cost = 1300 + contains = list(/obj/item/storage/belt/utility, + /obj/item/storage/belt/utility, + /obj/item/storage/belt/utility, + /obj/item/clothing/suit/hazardvest, + /obj/item/clothing/suit/hazardvest, + /obj/item/clothing/suit/hazardvest, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/glasses/meson/engine, + /obj/item/clothing/glasses/meson/engine) + crate_name = "engineering gear crate" + + +/datum/supply_pack/engineering/shieldgen + name = "Anti-breach Shield Projector Crate" + cost = 2500 + contains = list(/obj/machinery/shieldgen, + /obj/machinery/shieldgen) + crate_name = "anti-breach shield projector crate" + +/datum/supply_pack/engineering/grounding_rods + name = "Grounding Rod Crate" + cost = 1700 + contains = list(/obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod) + crate_name = "grounding rod crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/pacman + name = "P.A.C.M.A.N Generator Crate" + cost = 2500 + contains = list(/obj/machinery/power/port_gen/pacman) + crate_name = "PACMAN generator crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/solar + name = "Solar Panel Crate" + cost = 2000 + contains = list(/obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/circuitboard/computer/solar_control, + /obj/item/electronics/tracker, + /obj/item/paper/guides/jobs/engi/solars) + crate_name = "solar panel crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/engine + name = "Emitter Crate" + cost = 1500 + access = ACCESS_CE + contains = list(/obj/machinery/power/emitter, + /obj/machinery/power/emitter) + crate_name = "emitter crate" + crate_type = /obj/structure/closet/crate/secure/engineering + dangerous = TRUE + +/datum/supply_pack/engineering/engine/field_gen + name = "Field Generator Crate" + cost = 1500 + contains = list(/obj/machinery/field/generator, + /obj/machinery/field/generator) + crate_name = "field generator crate" + +/datum/supply_pack/engineering/engine/sing_gen + name = "Singularity Generator Crate" + cost = 5000 + contains = list(/obj/machinery/the_singularitygen) + crate_name = "singularity generator crate" + +/datum/supply_pack/engineering/engine/tesla_gen + name = "Tesla Generator Crate" + cost = 5000 + contains = list(/obj/machinery/the_singularitygen/tesla) + crate_name = "tesla generator crate" + +/datum/supply_pack/engineering/engine/collector + name = "Collector Crate" + cost = 2500 + contains = list(/obj/machinery/power/rad_collector, + /obj/machinery/power/rad_collector, + /obj/machinery/power/rad_collector) + crate_name = "collector crate" + +/datum/supply_pack/engineering/engine/PA + name = "Particle Accelerator Crate" + cost = 3000 + contains = list(/obj/structure/particle_accelerator/fuel_chamber, + /obj/machinery/particle_accelerator/control_box, + /obj/structure/particle_accelerator/particle_emitter/center, + /obj/structure/particle_accelerator/particle_emitter/left, + /obj/structure/particle_accelerator/particle_emitter/right, + /obj/structure/particle_accelerator/power_box, + /obj/structure/particle_accelerator/end_cap) + crate_name = "particle accelerator crate" + +/datum/supply_pack/engineering/engine/supermatter_shard + name = "Supermatter Shard Crate" + cost = 10000 + access = ACCESS_CE + contains = list(/obj/machinery/power/supermatter_shard) + crate_name = "supermatter shard crate" + crate_type = /obj/structure/closet/crate/secure/engineering + dangerous = TRUE + +/datum/supply_pack/engineering/engine/am_shielding + name = "Antimatter Shielding Crate" + cost = 2000 + contains = list(/obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container)//10 shields: 3x3 containment and a core + crate_name = "antimatter shielding crate" + +/datum/supply_pack/engineering/engine/am_core + name = "Antimatter Control Crate" + cost = 5000 + contains = list(/obj/machinery/power/am_control_unit) + crate_name = "antimatter control crate" + +/datum/supply_pack/engineering/engine/am_jar + name = "Antimatter Containment Jar Crate" + cost = 2000 + contains = list(/obj/item/am_containment, + /obj/item/am_containment) + crate_name = "antimatter jar crate" + +/datum/supply_pack/engineering/shuttle_engine + name = "Shuttle Engine Crate" + cost = 5000 + access = ACCESS_CE + contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo) + crate_name = "shuttle engine crate" + crate_type = /obj/structure/closet/crate/secure/engineering + special = TRUE + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Medical ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/medical + group = "Medical" + crate_type = /obj/structure/closet/crate/medical + +/datum/supply_pack/medical/supplies + name = "Medical Supplies Crate" + cost = 2000 + contains = list(/obj/item/reagent_containers/glass/bottle/charcoal, + /obj/item/reagent_containers/glass/bottle/charcoal, + /obj/item/reagent_containers/glass/bottle/epinephrine, + /obj/item/reagent_containers/glass/bottle/epinephrine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/toxin, + /obj/item/reagent_containers/glass/bottle/toxin, + /obj/item/reagent_containers/glass/beaker/large, + /obj/item/reagent_containers/glass/beaker/large, + /obj/item/reagent_containers/pill/insulin, + /obj/item/reagent_containers/pill/insulin, + /obj/item/reagent_containers/pill/insulin, + /obj/item/reagent_containers/pill/insulin, + /obj/item/stack/medical/gauze, + /obj/item/storage/box/beakers, + /obj/item/storage/box/syringes, + /obj/item/storage/box/bodybags) + crate_name = "medical supplies crate" + +/datum/supply_pack/medical/firstaid + name = "First Aid Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/regular, + /obj/item/storage/firstaid/regular, + /obj/item/storage/firstaid/regular, + /obj/item/storage/firstaid/regular) + crate_name = "first aid kit crate" + +/datum/supply_pack/medical/firstaidbruises + name = "Bruise Treatment Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/brute, + /obj/item/storage/firstaid/brute, + /obj/item/storage/firstaid/brute) + crate_name = "brute treatment kit crate" + +/datum/supply_pack/medical/firstaidburns + name = "Burn Treatment Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/fire, + /obj/item/storage/firstaid/fire, + /obj/item/storage/firstaid/fire) + crate_name = "burn treatment kit crate" + +/datum/supply_pack/medical/firstaidtoxins + name = "Toxin Treatment Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/toxin, + /obj/item/storage/firstaid/toxin, + /obj/item/storage/firstaid/toxin) + crate_name = "toxin treatment kit crate" + +/datum/supply_pack/medical/firstaidoxygen + name = "Oxygen Deprivation Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/o2, + /obj/item/storage/firstaid/o2, + /obj/item/storage/firstaid/o2) + crate_name = "oxygen deprivation kit crate" + +/datum/supply_pack/medical/virus + name = "Virus Crate" + cost = 2500 + access = ACCESS_CMO + contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion, + /obj/item/reagent_containers/glass/bottle/cold, + /obj/item/reagent_containers/glass/bottle/epiglottis_virion, + /obj/item/reagent_containers/glass/bottle/liver_enhance_virion, + /obj/item/reagent_containers/glass/bottle/fake_gbs, + /obj/item/reagent_containers/glass/bottle/magnitis, + /obj/item/reagent_containers/glass/bottle/pierrot_throat, + /obj/item/reagent_containers/glass/bottle/brainrot, + /obj/item/reagent_containers/glass/bottle/hallucigen_virion, + /obj/item/reagent_containers/glass/bottle/anxiety, + /obj/item/reagent_containers/glass/bottle/beesease, + /obj/item/storage/box/syringes, + /obj/item/storage/box/beakers, + /obj/item/reagent_containers/glass/bottle/mutagen) + crate_name = "virus crate" + crate_type = /obj/structure/closet/crate/secure/plasma + dangerous = TRUE + +/datum/supply_pack/medical/bloodpacks + name = "Blood Pack Variety Crate" + cost = 3500 + contains = list(/obj/item/reagent_containers/blood/empty, + /obj/item/reagent_containers/blood/empty, + /obj/item/reagent_containers/blood/APlus, + /obj/item/reagent_containers/blood/AMinus, + /obj/item/reagent_containers/blood/BPlus, + /obj/item/reagent_containers/blood/BMinus, + /obj/item/reagent_containers/blood/OPlus, + /obj/item/reagent_containers/blood/OMinus) + crate_name = "blood freezer" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/medical/iv_drip + name = "IV Drip Crate" + cost = 1000 + contains = list(/obj/machinery/iv_drip) + crate_name = "iv drip crate" + +/datum/supply_pack/medical/defibs + name = "Defibrillator Crate" + cost = 2500 + contains = list(/obj/item/defibrillator/loaded, + /obj/item/defibrillator/loaded) + crate_name = "defibrillator crate" + +/datum/supply_pack/medical/vending + name = "Medical Vending Crate" + cost = 2000 + contains = list(/obj/item/vending_refill/medical, + /obj/item/vending_refill/medical, + /obj/item/vending_refill/medical) + crate_name = "medical vending crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Science ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/science + group = "Science" + crate_type = /obj/structure/closet/crate/science + +/datum/supply_pack/science/robotics + name = "Robotics Assembly Crate" + cost = 1000 + access = ACCESS_ROBOTICS + contains = list(/obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/storage/toolbox/electrical, + /obj/item/storage/box/flashes, + /obj/item/stock_parts/cell/high, + /obj/item/stock_parts/cell/high) + crate_name = "robotics assembly crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/robotics/mecha_ripley + name = "Circuit Crate (Ripley APLU)" + cost = 3000 + access = ACCESS_ROBOTICS + contains = list(/obj/item/book/manual/ripley_build_and_repair, + /obj/item/circuitboard/mecha/ripley/main, + /obj/item/circuitboard/mecha/ripley/peripherals) + crate_name = "\improper APLU Ripley circuit crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/robotics/mecha_odysseus + name = "Circuit Crate (Odysseus)" + cost = 2500 + access = ACCESS_ROBOTICS + contains = list(/obj/item/circuitboard/mecha/odysseus/peripherals, + /obj/item/circuitboard/mecha/odysseus/main) + crate_name = "\improper Odysseus circuit crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/plasma + name = "Plasma Assembly Crate" + cost = 1000 + access = ACCESS_TOX_STORAGE + contains = list(/obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/timer, + /obj/item/device/assembly/timer, + /obj/item/device/assembly/timer) + crate_name = "plasma assembly crate" + crate_type = /obj/structure/closet/crate/secure/plasma + +/datum/supply_pack/science/shieldwalls + name = "Shield Generators" + cost = 2000 + access = ACCESS_TELEPORTER + contains = list(/obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen) + crate_name = "shield generators crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/transfer_valves + name = "Tank Transfer Valves Crate" + cost = 6000 + access = ACCESS_RD + contains = list(/obj/item/device/transfer_valve, + /obj/item/device/transfer_valve) + crate_name = "tank transfer valves crate" + crate_type = /obj/structure/closet/crate/secure/science + dangerous = TRUE + +/datum/supply_pack/science/tablets + name = "Tablet Crate" + cost = 5000 + contains = list(/obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo) + crate_name = "tablet crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Organic ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/organic + group = "Food & Livestock" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/food + name = "Food Crate" + cost = 1000 + contains = list(/obj/item/reagent_containers/food/condiment/flour, + /obj/item/reagent_containers/food/condiment/rice, + /obj/item/reagent_containers/food/condiment/milk, + /obj/item/reagent_containers/food/condiment/soymilk, + /obj/item/reagent_containers/food/condiment/saltshaker, + /obj/item/reagent_containers/food/condiment/peppermill, + /obj/item/storage/fancy/egg_box, + /obj/item/reagent_containers/food/condiment/enzyme, + /obj/item/reagent_containers/food/condiment/sugar, + /obj/item/reagent_containers/food/snacks/meat/slab/monkey, + /obj/item/reagent_containers/food/snacks/grown/banana, + /obj/item/reagent_containers/food/snacks/grown/banana, + /obj/item/reagent_containers/food/snacks/grown/banana) + crate_name = "food crate" + +/datum/supply_pack/organic/pizza + name = "Pizza Crate" + cost = 6000 // Best prices this side of the galaxy. + contains = list(/obj/item/pizzabox/margherita, + /obj/item/pizzabox/mushroom, + /obj/item/pizzabox/meat, + /obj/item/pizzabox/vegetable) + crate_name = "pizza crate" + +/datum/supply_pack/organic/cream_piee + name = "High-yield Clown-grade Cream Pie Crate" + cost = 6000 + contains = list(/obj/item/storage/backpack/duffelbag/clown/cream_pie) + crate_name = "party equipment crate" + contraband = TRUE + access = ACCESS_THEATRE + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/organic/monkey + name = "Monkey Crate" + cost = 2000 + contains = list (/obj/item/storage/box/monkeycubes) + crate_name = "monkey crate" + +/datum/supply_pack/organic/party + name = "Party Equipment" + cost = 2000 + contains = list(/obj/item/storage/box/drinkingglasses, + /obj/item/reagent_containers/food/drinks/shaker, + /obj/item/reagent_containers/food/drinks/bottle/patron, + /obj/item/reagent_containers/food/drinks/bottle/goldschlager, + /obj/item/reagent_containers/food/drinks/ale, + /obj/item/reagent_containers/food/drinks/ale, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/device/flashlight/glowstick, + /obj/item/device/flashlight/glowstick/red, + /obj/item/device/flashlight/glowstick/blue, + /obj/item/device/flashlight/glowstick/cyan, + /obj/item/device/flashlight/glowstick/orange, + /obj/item/device/flashlight/glowstick/yellow, + /obj/item/device/flashlight/glowstick/pink) + crate_name = "party equipment crate" + +/datum/supply_pack/organic/critter + crate_type = /obj/structure/closet/crate/critter + +/datum/supply_pack/organic/critter/cow + name = "Cow Crate" + cost = 3000 + contains = list(/mob/living/simple_animal/cow) + crate_name = "cow crate" + +/datum/supply_pack/organic/critter/goat + name = "Goat Crate" + cost = 2500 + contains = list(/mob/living/simple_animal/hostile/retaliate/goat) + crate_name = "goat crate" + +/datum/supply_pack/organic/critter/chick + name = "Chicken Crate" + cost = 2000 + contains = list( /mob/living/simple_animal/chick) + crate_name = "chicken crate" + +/datum/supply_pack/organic/critter/corgi + name = "Corgi Crate" + cost = 5000 + contains = list(/mob/living/simple_animal/pet/dog/corgi, + /obj/item/clothing/neck/petcollar) + crate_name = "corgi crate" + +/datum/supply_pack/organic/critter/corgi/generate() + . = ..() + if(prob(50)) + var/mob/living/simple_animal/pet/dog/corgi/D = locate() in . + qdel(D) + new /mob/living/simple_animal/pet/dog/corgi/Lisa(.) + +/datum/supply_pack/organic/critter/cat + name = "Cat Crate" + cost = 5000 //Cats are worth as much as corgis. + contains = list(/mob/living/simple_animal/pet/cat, + /obj/item/clothing/neck/petcollar, + /obj/item/toy/cattoy) + crate_name = "cat crate" + +/datum/supply_pack/organic/critter/cat/generate() + . = ..() + if(prob(50)) + var/mob/living/simple_animal/pet/cat/C = locate() in . + qdel(C) + new /mob/living/simple_animal/pet/cat/Proc(.) + +/datum/supply_pack/organic/critter/pug + name = "Pug Crate" + cost = 5000 + contains = list(/mob/living/simple_animal/pet/dog/pug, + /obj/item/clothing/neck/petcollar) + crate_name = "pug crate" + +/datum/supply_pack/organic/critter/fox + name = "Fox Crate" + cost = 5000 + contains = list(/mob/living/simple_animal/pet/fox, + /obj/item/clothing/neck/petcollar) + crate_name = "fox crate" + +/datum/supply_pack/organic/critter/butterfly + name = "Butterflies Crate" + contraband = TRUE + cost = 5000 + contains = list(/mob/living/simple_animal/butterfly) + crate_name = "entomology samples crate" + +/datum/supply_pack/organic/critter/butterfly/generate() + . = ..() + for(var/i in 1 to 49) + new /mob/living/simple_animal/butterfly(.) + +/datum/supply_pack/organic/hydroponics + name = "Hydroponics Crate" + cost = 1500 + contains = list(/obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/hatchet, + /obj/item/cultivator, + /obj/item/device/plant_analyzer, + /obj/item/clothing/gloves/botanic_leather, + /obj/item/clothing/suit/apron) + crate_name = "hydroponics crate" + crate_type = /obj/structure/closet/crate/hydroponics + +/datum/supply_pack/organic/hydroponics/hydrotank + name = "Hydroponics Backpack Crate" + cost = 1000 + access = ACCESS_HYDROPONICS + contains = list(/obj/item/watertank) + crate_name = "hydroponics backpack crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/organic/potted_plants + name = "Potted Plants Crate" + cost = 700 + contains = list(/obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random) + crate_name = "potted plants crate" + crate_type = /obj/structure/closet/crate/hydroponics + +/datum/supply_pack/organic/hydroponics/seeds + name = "Seeds Crate" + cost = 1000 + contains = list(/obj/item/seeds/chili, + /obj/item/seeds/berry, + /obj/item/seeds/corn, + /obj/item/seeds/eggplant, + /obj/item/seeds/tomato, + /obj/item/seeds/soya, + /obj/item/seeds/wheat, + /obj/item/seeds/wheat/rice, + /obj/item/seeds/carrot, + /obj/item/seeds/sunflower, + /obj/item/seeds/chanter, + /obj/item/seeds/potato, + /obj/item/seeds/sugarcane) + crate_name = "seeds crate" + +/datum/supply_pack/organic/hydroponics/exoticseeds + name = "Exotic Seeds Crate" + cost = 1500 + contains = list(/obj/item/seeds/nettle, + /obj/item/seeds/replicapod, + /obj/item/seeds/replicapod, + /obj/item/seeds/replicapod, + /obj/item/seeds/plump, + /obj/item/seeds/liberty, + /obj/item/seeds/amanita, + /obj/item/seeds/reishi, + /obj/item/seeds/banana, + /obj/item/seeds/eggplant/eggy, + /obj/item/seeds/random, + /obj/item/seeds/random) + crate_name = "exotic seeds crate" + +/datum/supply_pack/organic/hydroponics/beekeeping_fullkit + name = "Beekeeping Starter Crate" + cost = 1500 + contains = list(/obj/structure/beebox, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/queen_bee/bought, + /obj/item/clothing/head/beekeeper_head, + /obj/item/clothing/suit/beekeeper_suit, + /obj/item/melee/flyswatter) + crate_name = "beekeeping starter crate" + +/datum/supply_pack/organic/hydroponics/beekeeping_suits + name = "Beekeeper Suit Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/beekeeper_head, + /obj/item/clothing/suit/beekeeper_suit, + /obj/item/clothing/head/beekeeper_head, + /obj/item/clothing/suit/beekeeper_suit) + crate_name = "beekeeper suits" + +/datum/supply_pack/organic/vending + name = "Bartending Supply Crate" + cost = 2000 + contains = list(/obj/item/vending_refill/boozeomat, + /obj/item/vending_refill/boozeomat, + /obj/item/vending_refill/boozeomat, + /obj/item/vending_refill/coffee, + /obj/item/vending_refill/coffee, + /obj/item/vending_refill/coffee) + crate_name = "bartending supply crate" + +/datum/supply_pack/organic/vending/snack + name = "Snack Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/snack, + /obj/item/vending_refill/snack, + /obj/item/vending_refill/snack) + crate_name = "snacks supply crate" + +/datum/supply_pack/organic/vending/cola + name = "Softdrinks Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/cola, + /obj/item/vending_refill/cola, + /obj/item/vending_refill/cola) + crate_name = "soft drinks supply crate" + +/datum/supply_pack/organic/vending/cigarette + name = "Cigarette Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/cigarette, + /obj/item/vending_refill/cigarette, + /obj/item/vending_refill/cigarette) + crate_name = "cigarette supply crate" + +/datum/supply_pack/organic/vending/games + name = "Games Supply Crate" + cost = 1000 + contains = list(/obj/item/vending_refill/games, + /obj/item/vending_refill/games, + /obj/item/vending_refill/games) + crate_name = "games supply crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Materials /////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/materials + group = "Raw Materials" + +/datum/supply_pack/materials/metal50 + name = "50 Metal Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/metal/fifty) + crate_name = "metal sheets crate" + +/datum/supply_pack/materials/plasteel20 + name = "20 Plasteel Sheets" + cost = 7500 + contains = list(/obj/item/stack/sheet/plasteel/twenty) + crate_name = "plasteel sheets crate" + +/datum/supply_pack/materials/plasteel50 + name = "50 Plasteel Sheets" + cost = 16500 + contains = list(/obj/item/stack/sheet/plasteel/fifty) + crate_name = "plasteel sheets crate" + +/datum/supply_pack/materials/glass50 + name = "50 Glass Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/glass/fifty) + crate_name = "glass sheets crate" + +/datum/supply_pack/materials/wood50 + name = "50 Wood Planks" + cost = 2000 + contains = list(/obj/item/stack/sheet/mineral/wood/fifty) + crate_name = "wood planks crate" + +/datum/supply_pack/materials/cardboard50 + name = "50 Cardboard Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/cardboard/fifty) + crate_name = "cardboard sheets crate" + +/datum/supply_pack/materials/plastic50 + name = "50 Plastic Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/plastic/fifty) + crate_name = "plastic sheets crate" + +/datum/supply_pack/materials/sandstone30 + name = "30 Sandstone Blocks" + cost = 1000 + contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty) + crate_name = "sandstone blocks crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Miscellaneous /////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/misc + group = "Miscellaneous Supplies" + +/datum/supply_pack/misc/minerkit + name = "Shaft Miner Starter Kit" + cost = 2500 + access = ACCESS_QM + contains = list(/obj/item/pickaxe/mini, + /obj/item/clothing/glasses/meson, + /obj/item/device/t_scanner/adv_mining_scanner/lesser, + /obj/item/device/radio/headset/headset_cargo/mining, + /obj/item/storage/bag/ore, + /obj/item/clothing/suit/hooded/explorer, + /obj/item/clothing/mask/gas/explorer) + crate_name = "shaft miner starter kit" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/misc/mule + name = "MULEbot Crate" + cost = 2000 + contains = list(/mob/living/simple_animal/bot/mulebot) + crate_name = "\improper MULEbot Crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/conveyor + name = "Conveyor Assembly Crate" + cost = 1500 + contains = list(/obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_switch_construct, + /obj/item/paper/guides/conveyor) + crate_name = "conveyor assembly crate" + +/datum/supply_pack/misc/watertank + name = "Water Tank Crate" + cost = 600 + contains = list(/obj/structure/reagent_dispensers/watertank) + crate_name = "water tank crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/hightank + name = "High-Capacity Water Tank Crate" + cost = 1200 + contains = list(/obj/structure/reagent_dispensers/watertank/high) + crate_name = "high-capacity water tank crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/water_vapor + name = "Water Vapor Canister" + cost = 2500 + contains = list(/obj/machinery/portable_atmospherics/canister/water_vapor) + crate_name = "water vapor canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/lasertag + name = "Laser Tag Crate" + cost = 1500 + contains = list(/obj/item/gun/energy/laser/redtag, + /obj/item/gun/energy/laser/redtag, + /obj/item/gun/energy/laser/redtag, + /obj/item/gun/energy/laser/bluetag, + /obj/item/gun/energy/laser/bluetag, + /obj/item/gun/energy/laser/bluetag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/head/helmet/redtaghelm, + /obj/item/clothing/head/helmet/redtaghelm, + /obj/item/clothing/head/helmet/redtaghelm, + /obj/item/clothing/head/helmet/bluetaghelm, + /obj/item/clothing/head/helmet/bluetaghelm, + /obj/item/clothing/head/helmet/bluetaghelm) + crate_name = "laser tag crate" + +/datum/supply_pack/misc/lasertag/pins + name = "Laser Tag Firing Pins Crate" + cost = 3000 + contraband = TRUE + contains = list(/obj/item/storage/box/lasertagpins) + crate_name = "laser tag crate" + +/datum/supply_pack/misc/clownpin + name = "Hilarious Firing Pin Crate" + cost = 5000 + contraband = TRUE + contains = list(/obj/item/device/firing_pin/clown) + // It's /technically/ a toy. For the clown, at least. + crate_name = "toy crate" + +/datum/supply_pack/misc/religious_supplies + name = "Religious Supplies Crate" + cost = 4000 // it costs so much because the Space Church is ran by Space Jews + contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, + /obj/item/reagent_containers/food/drinks/bottle/holywater, + /obj/item/storage/book/bible/booze, + /obj/item/storage/book/bible/booze, + /obj/item/clothing/suit/hooded/chaplain_hoodie, + /obj/item/clothing/suit/hooded/chaplain_hoodie, + /obj/item/clothing/under/burial, + /obj/item/clothing/under/burial) + crate_name = "religious supplies crate" + +/datum/supply_pack/misc/book_crate + name = "Book Crate" + cost = 1500 + contains = list(/obj/item/book/codex_gigas, + /obj/item/book/manual/random/, + /obj/item/book/manual/random/, + /obj/item/book/manual/random/, + /obj/item/book/random/triple) + +/datum/supply_pack/misc/paper + name = "Bureaucracy Crate" + cost = 1500 + contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, + /obj/item/device/camera_film, + /obj/item/hand_labeler, + /obj/item/hand_labeler_refill, + /obj/item/hand_labeler_refill, + /obj/item/paper_bin, + /obj/item/pen/fourcolor, + /obj/item/pen/fourcolor, + /obj/item/pen, + /obj/item/pen/fountain, + /obj/item/pen/blue, + /obj/item/pen/red, + /obj/item/folder/blue, + /obj/item/folder/red, + /obj/item/folder/yellow, + /obj/item/clipboard, + /obj/item/clipboard, + /obj/item/stamp, + /obj/item/stamp/denied) + crate_name = "bureaucracy crate" + +/datum/supply_pack/misc/fountainpens + name = "Calligraphy Crate" + cost = 700 + contains = list(/obj/item/storage/box/fountainpens) + crate_type = /obj/structure/closet/crate/wooden + +/datum/supply_pack/misc/toner + name = "Toner Crate" + cost = 1000 + contains = list(/obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner) + crate_name = "toner crate" + +/datum/supply_pack/misc/janitor + name = "Janitorial Supplies Crate" + cost = 1000 + contains = list(/obj/item/reagent_containers/glass/bucket, + /obj/item/reagent_containers/glass/bucket, + /obj/item/reagent_containers/glass/bucket, + /obj/item/mop, + /obj/item/caution, + /obj/item/caution, + /obj/item/caution, + /obj/item/storage/bag/trash, + /obj/item/reagent_containers/spray/cleaner, + /obj/item/reagent_containers/glass/rag, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner) + crate_name = "janitorial supplies crate" + +/datum/supply_pack/misc/janitor/janicart + name = "Janitorial Cart and Galoshes Crate" + cost = 2000 + contains = list(/obj/structure/janitorialcart, + /obj/item/clothing/shoes/galoshes) + crate_name = "janitorial cart crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/janitor/janitank + name = "Janitor Backpack Crate" + cost = 1000 + access = ACCESS_JANITOR + contains = list(/obj/item/watertank/janitor) + crate_name = "janitor backpack crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/misc/janitor/lightbulbs + name = "Replacement Lights" + cost = 1000 + contains = list(/obj/item/storage/box/lights/mixed, + /obj/item/storage/box/lights/mixed, + /obj/item/storage/box/lights/mixed) + crate_name = "replacement lights" + +/datum/supply_pack/misc/noslipfloor + name = "High-traction Floor Tiles" + cost = 2000 + contains = list(/obj/item/stack/tile/noslip/thirty) + crate_name = "high-traction floor tiles crate" + +/datum/supply_pack/misc/plasmaman + name = "Plasmaman Supply Kit" + cost = 2000 + contains = list(/obj/item/clothing/under/plasmaman, + /obj/item/clothing/under/plasmaman, + /obj/item/tank/internals/plasmaman/belt/full, + /obj/item/tank/internals/plasmaman/belt/full, + /obj/item/clothing/head/helmet/space/plasmaman, + /obj/item/clothing/head/helmet/space/plasmaman) + crate_name = "plasmaman supply kit" + +/datum/supply_pack/misc/costume + name = "Standard Costume Crate" + cost = 1000 + access = ACCESS_THEATRE + contains = list(/obj/item/storage/backpack/clown, + /obj/item/clothing/shoes/clown_shoes, + /obj/item/clothing/mask/gas/clown_hat, + /obj/item/clothing/under/rank/clown, + /obj/item/bikehorn, + /obj/item/clothing/under/rank/mime, + /obj/item/clothing/shoes/sneakers/black, + /obj/item/clothing/gloves/color/white, + /obj/item/clothing/mask/gas/mime, + /obj/item/clothing/head/beret, + /obj/item/clothing/suit/suspenders, + /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, + /obj/item/storage/backpack/mime) + crate_name = "standard costume crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/misc/costume_original + name = "Original Costume Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/snowman, + /obj/item/clothing/suit/snowman, + /obj/item/clothing/head/chicken, + /obj/item/clothing/suit/chickensuit, + /obj/item/clothing/mask/gas/monkeymask, + /obj/item/clothing/suit/monkeysuit, + /obj/item/clothing/head/cardborg, + /obj/item/clothing/suit/cardborg, + /obj/item/clothing/head/xenos, + /obj/item/clothing/suit/xenos, + /obj/item/clothing/suit/hooded/ian_costume, + /obj/item/clothing/suit/hooded/carp_costume, + /obj/item/clothing/suit/hooded/bee_costume) + crate_name = "original costume crate" + +/datum/supply_pack/misc/wizard + name = "Wizard Costume Crate" + cost = 2000 + contains = list(/obj/item/staff, + /obj/item/clothing/suit/wizrobe/fake, + /obj/item/clothing/shoes/sandal, + /obj/item/clothing/head/wizard/fake) + crate_name = "wizard costume crate" + +/datum/supply_pack/misc/randomised + name = "Collectable Hats Crate!" + cost = 20000 + var/num_contained = 3 //number of items picked to be contained in a randomised crate + contains = list(/obj/item/clothing/head/collectable/chef, + /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/collectable/tophat, + /obj/item/clothing/head/collectable/captain, + /obj/item/clothing/head/collectable/beret, + /obj/item/clothing/head/collectable/welding, + /obj/item/clothing/head/collectable/flatcap, + /obj/item/clothing/head/collectable/pirate, + /obj/item/clothing/head/collectable/kitty, + /obj/item/clothing/head/collectable/rabbitears, + /obj/item/clothing/head/collectable/wizard, + /obj/item/clothing/head/collectable/hardhat, + /obj/item/clothing/head/collectable/HoS, + /obj/item/clothing/head/collectable/HoP, + /obj/item/clothing/head/collectable/thunderdome, + /obj/item/clothing/head/collectable/swat, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/police, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/xenom, + /obj/item/clothing/head/collectable/petehat) + crate_name = "collectable hats crate" + +/datum/supply_pack/misc/randomised/fill(obj/structure/closet/crate/C) + var/list/L = contains.Copy() + for(var/i in 1 to num_contained) + var/item = pick_n_take(L) + new item(C) + +/datum/supply_pack/misc/bigband + contains = list(/obj/item/device/instrument/violin, + /obj/item/device/instrument/guitar, + /obj/item/device/instrument/glockenspiel, + /obj/item/device/instrument/accordion, + /obj/item/device/instrument/saxophone, + /obj/item/device/instrument/trombone, + /obj/item/device/instrument/recorder, + /obj/item/device/instrument/harmonica, + /obj/structure/piano/unanchored) + name = "Big band instrument collection" + cost = 5000 + crate_name = "Big band musical instruments collection" + +/datum/supply_pack/misc/randomised/contraband + name = "Contraband Crate" + contraband = TRUE + cost = 3000 + num_contained = 5 + contains = list(/obj/item/poster/random_contraband, + /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, + /obj/item/storage/fancy/cigarettes/cigpack_midori, + /obj/item/seeds/ambrosia/deus, + /obj/item/clothing/neck/necklace/dope) + crate_name = "crate" + +/datum/supply_pack/misc/randomised/toys + name = "Toy Crate" + cost = 5000 // or play the arcade machines ya lazy bum + // TODO make this actually just use the arcade machine loot list + num_contained = 5 + contains = list(/obj/item/toy/spinningtoy, + /obj/item/toy/sword, + /obj/item/toy/foamblade, + /obj/item/toy/talking/AI, + /obj/item/toy/talking/owl, + /obj/item/toy/talking/griffin, + /obj/item/toy/nuke, + /obj/item/toy/minimeteor, + /obj/item/toy/plush/carpplushie, + /obj/item/toy/plush/lizardplushie, + /obj/item/toy/plush/snakeplushie, + /obj/item/toy/plush/nukeplushie, + /obj/item/toy/plush/slimeplushie, + /obj/item/coin/antagtoken, + /obj/item/stack/tile/fakespace/loaded, + /obj/item/gun/ballistic/shotgun/toy/crossbow, + /obj/item/toy/redbutton, + /obj/item/toy/eightball, + /obj/item/vending_refill/donksoft) + crate_name = "toy crate" + +/datum/supply_pack/misc/autodrobe + name = "Autodrobe Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/autodrobe, + /obj/item/vending_refill/autodrobe) + crate_name = "autodrobe supply crate" + +/datum/supply_pack/misc/formalwear + name = "Formalwear Crate" + cost = 3000 //Lots of very expensive items. You gotta pay up to look good! + contains = list(/obj/item/clothing/under/blacktango, + /obj/item/clothing/under/assistantformal, + /obj/item/clothing/under/assistantformal, + /obj/item/clothing/under/lawyer/bluesuit, + /obj/item/clothing/suit/toggle/lawyer, + /obj/item/clothing/under/lawyer/purpsuit, + /obj/item/clothing/suit/toggle/lawyer/purple, + /obj/item/clothing/under/lawyer/blacksuit, + /obj/item/clothing/suit/toggle/lawyer/black, + /obj/item/clothing/accessory/waistcoat, + /obj/item/clothing/neck/tie/blue, + /obj/item/clothing/neck/tie/red, + /obj/item/clothing/neck/tie/black, + /obj/item/clothing/head/bowler, + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/flatcap, + /obj/item/clothing/head/beret, + /obj/item/clothing/head/that, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/under/suit_jacket/charcoal, + /obj/item/clothing/under/suit_jacket/navy, + /obj/item/clothing/under/suit_jacket/burgundy, + /obj/item/clothing/under/suit_jacket/checkered, + /obj/item/clothing/under/suit_jacket/tan, + /obj/item/lipstick/random) + crate_name = "formalwear crate" + +/datum/supply_pack/misc/foamforce + name = "Foam Force Crate" + cost = 1000 + contains = list(/obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy) + crate_name = "foam force crate" + +/datum/supply_pack/misc/foamforce/bonus + name = "Foam Force Pistols Crate" + contraband = TRUE + cost = 4000 + contains = list(/obj/item/gun/ballistic/automatic/toy/pistol, + /obj/item/gun/ballistic/automatic/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol) + crate_name = "foam force crate" + +/datum/supply_pack/misc/artsupply + name = "Art Supplies" + cost = 800 + contains = list(/obj/structure/easel, + /obj/structure/easel, + /obj/item/canvas/nineteenXnineteen, + /obj/item/canvas/nineteenXnineteen, + /obj/item/canvas/twentythreeXnineteen, + /obj/item/canvas/twentythreeXnineteen, + /obj/item/canvas/twentythreeXtwentythree, + /obj/item/canvas/twentythreeXtwentythree, + /obj/item/toy/crayon/rainbow, + /obj/item/toy/crayon/rainbow) + crate_name = "art supply crate" + +/datum/supply_pack/misc/bsa + name = "Bluespace Artillery Parts" + cost = 15000 + special = TRUE + contains = list(/obj/item/circuitboard/machine/bsa/front, + /obj/item/circuitboard/machine/bsa/middle, + /obj/item/circuitboard/machine/bsa/back, + /obj/item/circuitboard/computer/bsa_control + ) + crate_name= "bluespace artillery parts crate" + +/datum/supply_pack/misc/dna_vault + name = "DNA Vault Parts" + cost = 12000 + special = TRUE + contains = list( + /obj/item/circuitboard/machine/dna_vault, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe + ) + crate_name= "dna vault parts crate" + +/datum/supply_pack/misc/dna_probes + name = "DNA Vault Samplers" + cost = 3000 + special = TRUE + contains = list(/obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe + ) + crate_name= "dna samplers crate" + + +/datum/supply_pack/misc/shield_sat + name = "Shield Generator Satellite" + cost = 3000 + special = TRUE + contains = list( + /obj/machinery/satellite/meteor_shield, + /obj/machinery/satellite/meteor_shield, + /obj/machinery/satellite/meteor_shield + ) + crate_name= "shield sat crate" + + +/datum/supply_pack/misc/shield_sat_control + name = "Shield System Control Board" + cost = 5000 + special = TRUE + contains = list(/obj/item/circuitboard/computer/sat_control) + crate_name= "shield control board crate" + +/datum/supply_pack/misc/bicycle + name = "Bicycle" + cost = 1000000 + contains = list(/obj/vehicle/bicycle) + crate_name = "Bicycle Crate" + crate_type = /obj/structure/closet/crate/large From 24d352c14c593804e25f3ce17c2b0f276179df6d Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Fri, 5 Jan 2018 15:52:09 -0500 Subject: [PATCH 12/35] name change + comment --- code/modules/cargo/packs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 9d4f98feadf..e5757732333 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -12,7 +12,7 @@ var/dangerous = FALSE // Should we message admins? var/special = FALSE //Event/Station Goals/Admin enabled packs var/special_enabled = FALSE - var/rocketOnly = FALSE + var/DropPodOnly = FALSE//only usable by the Bluespace Drop Pod via the express cargo console /datum/supply_pack/proc/generate(turf/T) var/obj/structure/closet/crate/C = new crate_type(T) From 777eda66a56de1a10d02a01d903558bb838ca619 Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Mon, 8 Jan 2018 08:42:22 -0500 Subject: [PATCH 13/35] 2+2=4-1=3 quick rebase --- tgui/assets/tgui.css | 2 +- tgui/assets/tgui.js | 36 ++++++++++++++++++------------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index c73fc2adfac..256b53c1069 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file +@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 7fc94608a2d..7aad9924f1e 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,18 +1,18 @@ -require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var p="function"==typeof require&&require;if(!s&&p)return p(o,!0);if(i)return i(o,!0);var u=Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?u[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-p,o-s),d=1;for(s>p&&p+l>s&&(d=-1,p+=l-1,s+=l-1);l-- >0;)p in n?n[s]=n[p]:delete n[s],s+=d,p+=d;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,p=r(s>1?o[1]:void 0,n),u=s>2?o[2]:void 0,c=void 0===u?n:r(u,n);c>p;)e[p++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,p=a(e),u=r(p.length),c=i(o,u);if(t&&n!=n){for(;u>c;)if(s=p[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in p)&&p[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,p=3==t,u=4==t,c=6==t,l=5==t||c;return function(d,f,h){for(var m,g,v=i(d),b=r(v),y=a(f,h,3),x=o(b.length),_=0,w=e?s(d,x):n?s(d,0):void 0;x>_;_++)if((l||_ in b)&&(m=b[_],g=y(m,_,v),t))if(e)w[_]=g;else if(g)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(u)return!1;return c?-1:p||u?u:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),p=t(18),u=t(27),c=t(42),l=t(44),d=t(82)("id"),f=t(30),h=t(38),m=t(65),g=t(19),v=Object.isExtensible||h,b=g?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!f(t,d)){if(!v(t))return"F";if(!e)return"E";r(t,d,++y)}return"O"+t[d]},_=function(t,e){var n,a=x(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&u(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),g&&a.setDesc(c.prototype,"size",{get:function(){return p(this[b])}}),c},def:function(t,e,n){var a,r,i=_(t,e);return i?i.v=n:(t._l=i={i:r=x(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:_,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),p=t(27),u=t(8),c=t(30),l=t(82)("weak"),d=Object.isExtensible||o,f=u(5),h=u(6),m=0,g=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},b=function(t,e){return f(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&p(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:g(this)["delete"](t):!1},has:function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i):g(this).has(t):!1}}),i},def:function(t,e,n){return d(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):g(t).set(e,n),t},frozenStore:g,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),p=t(69),u=t(38),c=t(24),l=t(43),d=t(66);e.exports=function(t,e,n,f,h,m){var g=a[t],v=g,b=h?"set":"add",y=v&&v.prototype,x={},_=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!u(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof v&&(m||y.forEach&&!c(function(){(new v).entries().next()}))){var w,k=new v,E=k[b](m?{}:-0,1)!=k,S=c(function(){k.has(1)}),P=l(function(t){new v(t)});P||(v=e(function(e,n){p(e,v,t);var a=new g;return void 0!=n&&s(n,h,a[b],a),a}),v.prototype=y,y.constructor=v),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else v=f.getConstructor(e,t,h,b),o(v.prototype,n);return d(v,t),x[t]=v,r(r.G+r.W+r.F*(v!=g),x),m||f.setStrong(v,t,h),v}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),p="prototype",u=function(t,e,n){var c,l,d,f,h=t&u.F,m=t&u.G,g=t&u.S,v=t&u.P,b=t&u.B,y=m?a:g?a[e]||(a[e]={}):(a[e]||{})[p],x=m?r:r[e]||(r[e]={}),_=x[p]||(x[p]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,d=(l?y:n)[c],f=b&&l?s(d,a):v&&"function"==typeof d?s(Function.call,d):d,y&&!l&&o(y,c,d),x[c]!=d&&i(x,c,f),v&&_[c]!=d&&(_[c]=d)};a.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,e.exports=u},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var p=s(t),u=""[t];i(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,p,u)),a(RegExp.prototype,p,2==e?function(t,e){return u.call(t,this,e)}:function(t){return u.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),p=t(84);e.exports=function(t,e,n,u){var c,l,d,f=p(t),h=a(n,u,e?2:1),m=0;if("function"!=typeof f)throw TypeError(t+" is not iterable!");if(i(f))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(d=f.call(t);!(l=d.next()).done;)r(d,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),p=t(45),u=t(41),c=t(66),l=t(46).getProto,d=t(83)("iterator"),f=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",g="values",v=function(){return this};e.exports=function(t,e,n,b,y,x,_){u(n,e,b);var w,k,E=function(t){if(!f&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case g:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",P=y==g,C=!1,A=t.prototype,O=A[d]||A[h]||y&&A[y],T=O||E(y);if(O){var R=l(T.call(new t));c(R,S,!0),!a&&s(A,h)&&o(R,d,v),P&&O.name!==g&&(C=!0,T=function(){return O.call(this)})}if(a&&!_||!f&&!C&&A[d]||o(A,d,T),p[e]=T,p[S]=v,y)if(w={values:P?T:E(g),keys:x?T:E(m),entries:P?E("entries"):T},_)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(f||C),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,p=0;s>p;)if(i[n=o[p++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,p=o.MutationObserver||o.WebKitMutationObserver,u=o.process,c=o.Promise,l="process"==t(11)(u),d=function(){var t,e,n;for(l&&(t=u.domain)&&(u.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){u.nextTick(d)};else if(p){var f=1,h=document.createTextNode("");new p(d).observe(h,{characterData:!0}),i=function(){h.data=f=-f}}else i=c&&c.resolve?function(){c.resolve().then(d)}:function(){s.call(o,d)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&u.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,p=1,u=a.getKeys,c=a.getSymbols,l=a.isEnum;s>p;)for(var d,f=i(o[p++]),h=c?u(f).concat(c(f)):u(f),m=h.length,g=0;m>g;)l.call(f,d=h[g++])&&(n[d]=f[d]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),p=s.length,u=0,c=[];p>u;)i.call(o,n=s[u++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,p=!1;e>o;)(n[o]=arguments[o++])===s&&(p=!0);return function(){var a,i=this,o=arguments,u=o.length,c=0,l=0;if(!p&&!u)return r(t,n,i);if(a=n.slice(),p)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;u>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],p=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:p.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",p=a(n),u=s.length;return 0>p||p>=u?t?"":void 0:(i=s.charCodeAt(p),55296>i||i>56319||p+1===u||(o=s.charCodeAt(p+1))<56320||o>57343?t?s.charAt(p):i:t?s.slice(p,p+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",p=s.length,u=void 0===n?" ":n+"",c=a(e);if(p>=c)return s;""==u&&(u=" ");var l=c-p,d=r.call(u,Math.ceil(l/u.length));return d.length>l&&(d=d.slice(0,l)),o?d+s:s+d}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",p="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(d),a(a.P+a.F*i(function(){return!!o[t]()||p[t]()!=p}),"String",n)},d=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),p=t(32),u=t(20),c=t(29),l=c.process,d=c.setImmediate,f=c.clearImmediate,h=c.MessageChannel,m=0,g={},v="onreadystatechange",b=function(){var t=+this;if(g.hasOwnProperty(t)){var e=g[t];delete g[t],e()}},y=function(t){b.call(t.data)};d&&f||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return g[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},f=function(t){delete g[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=v in u("script")?function(t){p.appendChild(u("script"))[v]=function(){p.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:d,clear:f}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),p=t(32),u=t(20),c=t(30),l=t(11),d=t(33),f=t(24),h=t(4),m=t(2),g=t(38),v=t(80),b=t(78),y=t(77),x=t(76),_=t(79),w=t(34),k=t(82)("__proto__"),E=t(8),S=t(7)(!1),P=Object.prototype,C=Array.prototype,A=C.slice,O=C.join,T=r.setDesc,R=r.getDesc,L=r.setDescs,D={};o||(a=!f(function(){return 7!=T(u("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return R(t,e)}catch(n){}return c(t,e)?s(!P.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=L=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:L});var j="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),M=j.concat("length","prototype"),N=j.length,F=function(){var t,e=u("iframe"),n=N,a=">";for(e.style.display="none",p.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("