diff --git a/cfg/admin.txt b/cfg/admin.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm old mode 100644 new mode 100755 index b707ff8bd0..12b55c4205 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -849,25 +849,27 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_deny = "med-deny" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" req_access_txt = "5" - products = list(/obj/item/reagent_containers/syringe = 12, - /obj/item/reagent_containers/dropper = 3, - /obj/item/device/healthanalyzer = 4, - /obj/item/device/sensor_device = 2, + /* + products = list(/obj/item/reagent_containers/syringe = 12, + /obj/item/reagent_containers/dropper = 3, + /obj/item/device/healthanalyzer = 4, + /obj/item/device/sensor_device = 2, /obj/item/pinpointer/crew = 2, /obj/item/reagent_containers/medspray/sterilizine = 1, - /obj/item/stack/medical/gauze = 8, - /obj/item/reagent_containers/pill/patch/styptic = 5, - /obj/item/reagent_containers/medspray/styptic = 2, - /obj/item/reagent_containers/pill/patch/silver_sulf = 5, + /obj/item/stack/medical/gauze = 8, + /obj/item/reagent_containers/pill/patch/styptic = 5, + /obj/item/reagent_containers/medspray/styptic = 2, + /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/medspray/silver_sulf = 2, /obj/item/reagent_containers/pill/insulin = 10, - /obj/item/reagent_containers/pill/salbutamol = 2, - /obj/item/reagent_containers/glass/bottle/charcoal = 4, - /obj/item/reagent_containers/glass/bottle/epinephrine = 4, + /obj/item/reagent_containers/pill/salbutamol = 2, + /obj/item/reagent_containers/glass/bottle/charcoal = 4, + /obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/salglu_solution = 3, - /obj/item/reagent_containers/glass/bottle/morphine = 4, - /obj/item/reagent_containers/glass/bottle/toxin = 3, + /obj/item/reagent_containers/glass/bottle/morphine = 4, + /obj/item/reagent_containers/glass/bottle/toxin = 3, /obj/item/reagent_containers/syringe/antiviral = 6) + */ //products list in modular_citadel's version of this file contraband = list(/obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, /obj/item/reagent_containers/pill/charcoal = 6) premium = list(/obj/item/storage/box/hug/medical = 1, /obj/item/reagent_containers/hypospray/medipen = 3, /obj/item/storage/belt/medical = 3, /obj/item/wrench/medical = 1) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) @@ -1066,15 +1068,15 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_state = "engivend" icon_deny = "engivend-deny" req_access_txt = "11" //Engineering Equipment access - products = list(/obj/item/clothing/glasses/meson/engine = 2, + products = list(/obj/item/clothing/glasses/meson/engine = 2, /obj/item/clothing/glasses/welding = 3, - /obj/item/device/multitool = 4, - /obj/item/construction/rcd/loaded = 3, + /obj/item/device/multitool = 4, + /obj/item/construction/rcd/loaded = 3, /obj/item/grenade/chem_grenade/smart_metal_foam = 10, - /obj/item/device/geiger_counter = 5, + /obj/item/device/geiger_counter = 5, /obj/item/stock_parts/cell/high = 10, - /obj/item/electronics/airlock = 10, - /obj/item/electronics/apc = 10, + /obj/item/electronics/airlock = 10, + /obj/item/electronics/apc = 10, /obj/item/electronics/airalarm = 10) contraband = list(/obj/item/stock_parts/cell/potato = 3) premium = list(/obj/item/storage/belt/utility = 3, /obj/item/storage/box/smart_metal_foam = 1) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm old mode 100644 new mode 100755 index 31fdcc6dbb..d0b3480f04 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -160,9 +160,10 @@ /obj/item/gun/syringe/syndicate, /obj/item/implantcase, /obj/item/implant, - /obj/item/implanter + /obj/item/implanter, + /obj/item/hypospray ) - + // CIT CHANGE added hypospray mk IIs to belt /obj/item/hypospray /obj/item/storage/belt/security name = "security belt" diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm old mode 100644 new mode 100755 index 42b8757b7e..c135166d69 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -75,11 +75,13 @@ charges = list(37, 4, 4)// of 111 standard, 12 contraband, 10 premium(?) init_charges = list(37, 4, 4) +/* /obj/item/vending_refill/medical machine_name = "NanoMed" icon_state = "refill_medical" charges = list(26, 5, 3)// of 76 standard, 13 contraband, 8 premium init_charges = list(26, 5, 3) +*/ //I don't know how citadel change comments work, see the modular_citadel folder instead. /obj/item/vending_refill/donksoft machine_name = "Donksoft Toy Vendor" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index b89d0c464b..11540f9932 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -5,7 +5,7 @@ item_state = "labcoat" blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman,/obj/item/hypospray) //CITADEL ADD, Hyposprays to laboats armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) togglename = "buttons" species_exception = list(/datum/species/golem) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index c336e3b745..96b454cc71 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -307,6 +307,34 @@ reagents.trans_to(P, vol_part) . = TRUE + if("createvial") + var/many = params["many"] + if(reagents.total_volume == 0) + return + + var/amount_full = 0 + var/vol_part = min(reagents.total_volume, 30) + if(text2num(many)) + amount_full = round(reagents.total_volume / 30) + vol_part = reagents.total_volume % 30 + var/name = stripped_input(usr, "Name:","Name your hypovial!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, BE_CLOSE)) + return + + var/obj/item/reagent_containers/glass/bottle/vial/small/V + for(var/i = 0; i < amount_full; i++) + V = new/obj/item/reagent_containers/glass/bottle/vial/small(drop_location()) + V.name = trim("[name] hypovial") + adjust_item_drop_location(V) + reagents.trans_to(V, 30) + + if(vol_part) + V = new/obj/item/reagent_containers/glass/bottle/vial/small(drop_location()) + V.name = trim("[name] hypovial") + adjust_item_drop_location(V) + reagents.trans_to(V, vol_part) + . = TRUE + if("analyze") var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]] if(R) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 101e391a52..66c341a7a8 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -931,7 +931,7 @@ id = "bicaridine" description = "Restores bruising. Overdose causes it instead." reagent_state = LIQUID - color = "#C8A5DC" + color = "#BF0000" overdose_threshold = 30 /datum/reagent/medicine/bicaridine/on_mob_life(mob/living/M) @@ -949,7 +949,7 @@ id = "dexalin" description = "Restores oxygen loss. Overdose causes it instead." reagent_state = LIQUID - color = "#C8A5DC" + color = "#0080FF" overdose_threshold = 30 /datum/reagent/medicine/dexalin/on_mob_life(mob/living/M) @@ -967,7 +967,7 @@ id = "kelotane" description = "Restores fire damage. Overdose causes it instead." reagent_state = LIQUID - color = "#C8A5DC" + color = "#FFA800" overdose_threshold = 30 /datum/reagent/medicine/kelotane/on_mob_life(mob/living/M) @@ -985,7 +985,7 @@ id = "antitoxin" description = "Heals toxin damage and removes toxins in the bloodstream. Overdose causes toxin damage." reagent_state = LIQUID - color = "#C8A5DC" + color = "#00A000" overdose_threshold = 30 taste_description = "a roll of gauze" @@ -1006,7 +1006,7 @@ id = "inaprovaline" description = "Stabilizes the breathing of patients. Good for those in critical condition." reagent_state = LIQUID - color = "#C8A5DC" + color = "#00BFFF" /datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/M) if(M.losebreath >= 5) @@ -1018,7 +1018,7 @@ id = "tricordrazine" description = "Has a high chance to heal all types of damage. Overdose instead causes it." reagent_state = LIQUID - color = "#C8A5DC" + color = "#8040FF" overdose_threshold = 30 taste_description = "grossness" diff --git a/modular_citadel/cit_medkits.dm b/modular_citadel/cit_medkits.dm deleted file mode 100644 index c01ba07573..0000000000 --- a/modular_citadel/cit_medkits.dm +++ /dev/null @@ -1,113 +0,0 @@ -//help I have no idea what I'm doing - -/obj/item/storage/firstaid - icon = 'modular_citadel/icons/firstaid.dmi' - -/obj/item/storage/firstaid/Initialize(mapload) - . = ..() - icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - -/obj/item/storage/firstaid/fire - icon_state = "burn" - -/obj/item/storage/firstaid/fire/Initialize(mapload) - . = ..() - icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - -/obj/item/storage/firstaid/toxin - icon_state = "toxin" - -/obj/item/storage/firstaid/toxin/Initialize(mapload) - . = ..() - icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - -/obj/item/storage/firstaid/o2 - icon_state = "oxy" - -/obj/item/storage/firstaid/tactical - icon_state = "tactical" - -/obj/item/storage/minifirstaid - name = "mini first-aid kit" - desc = "It's an emergency medical kit for those serious boo-boos." - icon = 'modular_citadel/icons/firstaid.dmi' - icon_state = "firstaid-mini" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - throw_speed = 3 - throw_range = 7 - var/empty = FALSE - item_state = "firstaid" - w_class = WEIGHT_CLASS_SMALL - max_combined_w_class = 4 //half that of regular kits - storage_slots = 2 - -/obj/item/storage/minifirstaid/regular - icon_state = "firstaid-mini" - desc = "An emergency first aid kit with the ability to heal the most minor of common injuries." - -/obj/item/storage/minifirstaid/regular/PopulateContents() - if(empty) - return - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/ointment(src) - -/obj/item/storage/minifirstaid/fire - name = "micro burn treatment kit" - desc = "A specialized medical kit for when some bloke sets themselves on fire." - icon_state = "burn-mini" - item_state = "firstaid-ointment" - -/obj/item/storage/minifirstaid/fire/PopulateContents() - if(empty) - return - new /obj/item/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/reagent_containers/pill/oxandrolone(src) - -/obj/item/storage/minifirstaid/toxin - name = "micro toxin treatment kit" - desc = "Used to treat the various crewmembers whose blood alcohol content are above 0.1." - icon_state = "toxin-mini" - item_state = "firstaid-toxin" - -/obj/item/storage/minifirstaid/toxin/PopulateContents() - if(empty) - return - new /obj/item/reagent_containers/syringe/charcoal(src) - new /obj/item/storage/pill_bottle/charcoal(src) - -/obj/item/storage/minifirstaid/o2 - name = "micro oxygen deprivation treatment kit" - desc = "A nice box for spacewalking with." - icon_state = "oxy-mini" - item_state = "firstaid-o2" - -/obj/item/storage/minifirstaid/o2/PopulateContents() - if(empty) - return - new /obj/item/reagent_containers/pill/salbutamol(src) - new /obj/item/reagent_containers/hypospray/medipen(src) - -/obj/item/storage/minifirstaid/brute - name = "brute trauma treatment kit" - desc = "A first aid kit for when you stub your toe." - icon_state = "brute-mini" - item_state = "firstaid-brute" - -/obj/item/storage/minifirstaid/brute/PopulateContents() - if(empty) - return - new /obj/item/reagent_containers/pill/patch/styptic(src) - new /obj/item/stack/medical/gauze(src) - -/obj/item/storage/minifirstaid/tactical - name = "mini combat medkit" - desc = "A miniature box containing tactical medical supplies." - icon_state = "tactical-mini" - max_w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/minifirstaid/tactical/PopulateContents() - if(empty) - return - new /obj/item/defibrillator/compact/combat/loaded(src) - new /obj/item/reagent_containers/hypospray/combat(src) \ No newline at end of file diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm old mode 100644 new mode 100755 index ac8069769f..9bcfbe888b --- a/modular_citadel/code/game/machinery/vending.dm +++ b/modular_citadel/code/game/machinery/vending.dm @@ -1,7 +1,33 @@ /obj/machinery/vending/security contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/storage/fancy/donut_box = 2, /obj/item/device/ssword_kit = 1) premium = list(/obj/item/coin/antagtoken = 1, /obj/item/device/ssword_kit = 1) - + +/obj/machinery/vending/medical + products = list(/obj/item/reagent_containers/syringe = 12, + /obj/item/reagent_containers/dropper = 3, + /obj/item/device/healthanalyzer = 4, + /obj/item/device/sensor_device = 2, + /obj/item/pinpointer/crew = 2, + /obj/item/reagent_containers/medspray/sterilizine = 1, + /obj/item/stack/medical/gauze = 8, + /obj/item/reagent_containers/pill/patch/styptic = 5, + /obj/item/reagent_containers/medspray/styptic = 2, + /obj/item/reagent_containers/pill/patch/silver_sulf = 5, + /obj/item/reagent_containers/medspray/silver_sulf = 2, + /obj/item/reagent_containers/pill/insulin = 10, + /obj/item/reagent_containers/pill/salbutamol = 2, + /obj/item/reagent_containers/glass/bottle/charcoal = 4, + /obj/item/reagent_containers/glass/bottle/epinephrine = 4, + /obj/item/reagent_containers/glass/bottle/salglu_solution = 3, + /obj/item/reagent_containers/glass/bottle/morphine = 4, + /obj/item/reagent_containers/glass/bottle/toxin = 3, + /obj/item/reagent_containers/syringe/antiviral = 6, + /obj/item/storage/hypospraykit/fire = 2, + /obj/item/storage/hypospraykit/toxin = 2, + /obj/item/storage/hypospraykit/o2 = 2, + /obj/item/storage/hypospraykit/brute = 2, + /obj/item/reagent_containers/glass/bottle/vial/small = 5) + #define STANDARD_CHARGE 1 #define CONTRABAND_CHARGE 2 #define COIN_CHARGE 3 diff --git a/modular_citadel/code/game/objects/items/storage/firstaid.dm b/modular_citadel/code/game/objects/items/storage/firstaid.dm new file mode 100755 index 0000000000..cc42eb5d57 --- /dev/null +++ b/modular_citadel/code/game/objects/items/storage/firstaid.dm @@ -0,0 +1,143 @@ +//help I have no idea what I'm doing + +/obj/item/storage/firstaid + icon = 'modular_citadel/icons/firstaid.dmi' + +/obj/item/storage/firstaid/Initialize(mapload) + . = ..() + icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") + +/obj/item/storage/firstaid/fire + icon_state = "burn" + +/obj/item/storage/firstaid/fire/Initialize(mapload) + . = ..() + icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") + +/obj/item/storage/firstaid/toxin + icon_state = "toxin" + +/obj/item/storage/firstaid/toxin/Initialize(mapload) + . = ..() + icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") + +/obj/item/storage/firstaid/o2 + icon_state = "oxy" + +/obj/item/storage/firstaid/tactical + icon_state = "tactical" + +//hijacking the minature first aids for hypospray boxes. <3 +/obj/item/storage/hypospraykit + name = "hypospray kit" + desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials." + icon = 'modular_citadel/icons/firstaid.dmi' + icon_state = "firstaid-mini" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + throw_speed = 3 + throw_range = 7 + var/empty = FALSE + item_state = "firstaid" + w_class = WEIGHT_CLASS_SMALL + max_combined_w_class = 5 //half that of regular kits + storage_slots = 5 + +/obj/item/storage/hypospraykit/regular + icon_state = "firstaid-mini" + desc = "A hypospray kit with general use vials." + +/obj/item/storage/hypospraykit/regular/PopulateContents() + if(empty) + return + new /obj/item/hypospray/mkii/tricord(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src) + +/obj/item/storage/hypospraykit/fire + name = "burn treatment hypospray kit" + desc = "A specialized hypospray kit for burn treatments. Apply with sass." + icon_state = "burn-mini" + item_state = "firstaid-ointment" + +/obj/item/storage/hypospraykit/fire/PopulateContents() + if(empty) + return + new /obj/item/hypospray/mkii/burn(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src) + +/obj/item/storage/hypospraykit/toxin + name = "toxin treatment hypospray kit" + icon_state = "toxin-mini" + item_state = "firstaid-toxin" + +/obj/item/storage/hypospraykit/toxin/PopulateContents() + if(empty) + return + new /obj/item/hypospray/mkii/toxin(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src) + +/obj/item/storage/hypospraykit/o2 + name = "oxygen deprivation hypospray kit" + icon_state = "oxy-mini" + item_state = "firstaid-o2" + +/obj/item/storage/hypospraykit/o2/PopulateContents() + if(empty) + return + new /obj/item/hypospray/mkii/oxygen(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src) + +/obj/item/storage/hypospraykit/brute + name = "brute trauma hypospray kit" + icon_state = "brute-mini" + item_state = "firstaid-brute" + +/obj/item/storage/hypospraykit/brute/PopulateContents() + if(empty) + return + new /obj/item/hypospray/mkii/brute(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src) + new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src) + +/obj/item/storage/hypospraykit/tactical + name = "combat hypospray kit" + desc = "A hypospray kit best suited for combat situations." + icon_state = "tactical-mini" + max_w_class = WEIGHT_CLASS_NORMAL + +/obj/item/storage/hypospraykit/tactical/PopulateContents() + if(empty) + return + new /obj/item/defibrillator/compact/combat/loaded(src) + new /obj/item/hypospray/mkii/CMO/combat(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src) + +/obj/item/storage/hypospraykit/cmo + name = "deluxe hypospray kit" + desc = "A kit containing a Deluxe hypospray and Vials." + icon_state = "tactical-mini" + max_w_class = WEIGHT_CLASS_NORMAL + storage_slots = 6 + max_combined_w_class = 6 + +/obj/item/storage/hypospraykit/cmo/PopulateContents() + if(empty) + return + new /obj/item/hypospray/mkii/CMO(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/tricord(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/charcoal(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/synthflesh(src) + +/obj/item/storage/box/vials + name = "box of hypovials" + +/obj/item/storage/box/vials/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/glass/bottle/vial/small( src ) diff --git a/modular_citadel/code/game/objects/items/vending_items.dm b/modular_citadel/code/game/objects/items/vending_items.dm new file mode 100755 index 0000000000..d2347579d1 --- /dev/null +++ b/modular_citadel/code/game/objects/items/vending_items.dm @@ -0,0 +1,5 @@ +/obj/item/vending_refill/medical + machine_name = "NanoMed" + icon_state = "refill_medical" + charges = list(32, 5, 3)// of 95 standard, 13 contraband, 8 premium + init_charges = list(32, 5, 3) \ No newline at end of file diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm similarity index 54% rename from modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm rename to modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm index 7c0e9ef71e..bd84d2c3d1 100644 --- a/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm @@ -2,4 +2,6 @@ ..() new /obj/item/device/radio/headset/heads/qm(src) - +/obj/structure/closet/secure_closet/CMO/PopulateContents() + ..() + new /obj/item/storage/hypospraykit/cmo(src) \ No newline at end of file diff --git a/modular_citadel/code/modules/clothing/under/trek_under.dm b/modular_citadel/code/modules/clothing/under/trek_under.dm index 60276325cb..f3ee0ae22a 100644 --- a/modular_citadel/code/modules/clothing/under/trek_under.dm +++ b/modular_citadel/code/modules/clothing/under/trek_under.dm @@ -103,7 +103,7 @@ /obj/item/device/radio, /obj/item/tank/internals/emergency_oxygen, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer,/obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs + /obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray ) armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 5, "rad" = 10, "fire" = 10, "acid" = 0) @@ -153,6 +153,7 @@ /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/reagent_containers/hypospray, + /obj/item/hypospray, /obj/item/device/healthanalyzer, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/bottle/vial, diff --git a/modular_citadel/code/modules/jobs/job_types/medical.dm b/modular_citadel/code/modules/jobs/job_types/medical.dm new file mode 100644 index 0000000000..4981df89d4 --- /dev/null +++ b/modular_citadel/code/modules/jobs/job_types/medical.dm @@ -0,0 +1,7 @@ +/datum/outfit/job/doctor + ..() + backpack_contents = list(/obj/item/storage/hypospraykit/regular) + +/datum/outfit/job/chemist + ..() + backpack_contents = list(/obj/item/storage/hypospraykit/regular) diff --git a/modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm b/modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm old mode 100644 new mode 100755 index e89068c95f..f39896b953 --- a/modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm +++ b/modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm @@ -1,43 +1,89 @@ #define HYPO_SPRAY 0 #define HYPO_INJECT 1 +#define WAIT_SPRAY 50 +#define WAIT_INJECT 50 +#define SELF_SPRAY 30 +#define SELF_INJECT 30 + +#define DELUXE_WAIT_SPRAY 40 +#define DELUXE_WAIT_INJECT 40 +#define DELUXE_SELF_SPRAY 20 +#define DELUXE_SELF_INJECT 20 + +#define COMBAT_WAIT_SPRAY 0 +#define COMBAT_WAIT_INJECT 0 +#define COMBAT_SELF_SPRAY 0 +#define COMBAT_SELF_INJECT 0 + //A vial-loaded hypospray. Cartridge-based! -/obj/item/reagent_containers/hypospray/mkii +/obj/item/hypospray/mkii name = "hypospray mk.II" icon = 'modular_citadel/icons/obj/hypospraymkii.dmi' icon_state = "hypo2" - var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small) - desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping." - volume = 0 - amount_per_transfer_from_this = 5 - possible_transfer_amounts = list(5,10,15) + desc = "A new development from DeForest Medical, this hypospray takes 30-unit vials as the drug supply for easy swapping." + w_class = WEIGHT_CLASS_TINY + var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small) var/mode = HYPO_INJECT var/obj/item/reagent_containers/glass/bottle/vial/vial - var/loaded_vial = /obj/item/reagent_containers/glass/bottle/vial/small + var/start_vial = /obj/item/reagent_containers/glass/bottle/vial/small var/spawnwithvial = TRUE - var/start_vial = null + var/inject_wait = WAIT_INJECT + var/spray_wait = WAIT_SPRAY + var/spray_self = SELF_SPRAY + var/inject_self = SELF_INJECT + var/quickload = FALSE + var/penetrates = FALSE -/obj/item/reagent_containers/hypospray/mkii/CMO +/obj/item/hypospray/mkii/brute + start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine + +/obj/item/hypospray/mkii/toxin + start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin + +/obj/item/hypospray/mkii/oxygen + start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin + +/obj/item/hypospray/mkii/burn + start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane + +/obj/item/hypospray/mkii/tricord + start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord + +/obj/item/hypospray/mkii/CMO name = "hypospray mk.II deluxe" - allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large) + allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large) icon_state = "cmo2" - ignore_flags = 1 - desc = "The Chief Medical Officer's hypospray is identically functional to the base model, excepting that it can take larger vials in addition to regular sized. It is also able to penetrate harder materials and deliver more reagents per spray." + desc = "The Deluxe Hypospray can take larger-size vials. It also acts faster and delivers more reagents per spray." resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - loaded_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO - possible_transfer_amounts = list(5,10,15,30,60) //cmo hypo should be able to dump lots into it + start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO + inject_wait = DELUXE_WAIT_INJECT + spray_wait = DELUXE_WAIT_SPRAY + spray_self = DELUXE_SELF_SPRAY + inject_self = DELUXE_SELF_INJECT -/obj/item/reagent_containers/hypospray/mkii/Initialize() +/obj/item/hypospray/mkii/CMO/combat + name = "combat hypospray mk.II" + desc = "A combat-ready deluxe hypospray that acts almost instantly. It can be tactically reloaded by using a vial on it." + icon_state = "combat2" + start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat + inject_wait = COMBAT_WAIT_INJECT + spray_wait = COMBAT_WAIT_SPRAY + spray_self = COMBAT_SELF_SPRAY + inject_self = COMBAT_SELF_INJECT + quickload = TRUE + penetrates = TRUE + +/obj/item/hypospray/mkii/Initialize() . = ..() if(!spawnwithvial) update_icon() return - if (!start_vial) - start_vial = new loaded_vial(src) - vial = start_vial + if(start_vial) + vial = new start_vial update_icon() -/obj/item/reagent_containers/hypospray/mkii/update_icon() +/obj/item/hypospray/mkii/update_icon() ..() icon_state = "[initial(icon_state)][vial ? "" : "-e"]" if(ismob(loc)) @@ -45,18 +91,17 @@ M.update_inv_hands() return -/obj/item/reagent_containers/hypospray/mkii/examine(mob/user) +/obj/item/hypospray/mkii/examine(mob/user) . = ..() + to_chat(user, "[vial] has [vial.reagents.total_volume]u remaining.") to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.") -/obj/item/reagent_containers/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user) +/obj/item/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user) if((istype(I, /obj/item/reagent_containers/glass/bottle/vial))) var/obj/item/reagent_containers/glass/bottle/vial/V = I - reagents.trans_to(V, reagents.total_volume) - reagents.maximum_volume = 0 V.forceMove(user.loc) user.put_in_hands(V) - to_chat(user, "You remove the vial from the [src].") + to_chat(user, "You remove [vial] from [src].") vial = null update_icon() playsound(loc, 'sound/weapons/empty.ogg', 50, 1) @@ -64,33 +109,52 @@ to_chat(user, "This hypo isn't loaded!") return -/obj/item/reagent_containers/hypospray/mkii/attackby(obj/item/I, mob/living/user) +/obj/item/hypospray/mkii/attackby(obj/item/I, mob/living/user) if((istype(I, /obj/item/reagent_containers/glass/bottle/vial) && vial != null)) - to_chat(user, "[src] can not hold more than one vial!") - return FALSE + if(!quickload) + to_chat(user, "[src] can not hold more than one vial!") + return FALSE + unload_hypo(vial, user) if((istype(I, /obj/item/reagent_containers/glass/bottle/vial))) var/obj/item/reagent_containers/glass/bottle/vial/V = I if(!is_type_in_list(V, allowed_containers)) - to_chat(user, "\The [src] doesn't accept this vial.") - return - vial = V - reagents.maximum_volume = V.volume - V.reagents.trans_to(src, V.reagents.total_volume) + to_chat(user, "[src] doesn't accept this type of vial.") + return FALSE if(!user.transferItemToLoc(V,src)) - return - user.visible_message("[user] has loads vial into \the [src].","You have loaded [vial] into \the [src].") + return FALSE + vial = V + user.visible_message("[user] has loaded a vial into [src].","You have loaded [vial] into [src].") update_icon() - playsound(loc, 'sound/weapons/autoguninsert.ogg', 50, 1) + playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1) return TRUE else - to_chat(user, "This doesn't fit in \the [src].") + to_chat(user, "This doesn't fit in [src].") return FALSE return FALSE -/obj/item/reagent_containers/hypospray/mkii/attack(obj/item/I, mob/user, params) +/obj/item/hypospray/mkii/AltClick(mob/user) + if(vial) + vial.attack_self(user) + +// Gunna allow this for now, still really don't approve - Pooj +/obj/item/hypospray/mkii/emag_act(mob/user) + inject_wait = COMBAT_WAIT_INJECT + spray_wait = COMBAT_WAIT_SPRAY + spray_self = COMBAT_SELF_INJECT + inject_self = COMBAT_SELF_SPRAY + penetrates = TRUE + to_chat(user, "You overcharge [src]'s control circuit.") + +/obj/item/hypospray/mkii/attack_hand(mob/user) + . = ..() //Don't bother changing this or removing it from containers will break. + +/obj/item/hypospray/mkii/attack(obj/item/I, mob/user, params) return -/obj/item/reagent_containers/hypospray/mkii/afterattack(atom/target, mob/user, proximity) +/obj/item/hypospray/mkii/afterattack(atom/target, mob/user, proximity) + if(!vial) + return + if(!proximity) return @@ -100,7 +164,7 @@ var/mob/living/L if(isliving(target)) L = target - if(!L.can_inject(user, 1)) + if(!penetrates && !L.can_inject(user, 1)) //This check appears another four times, since otherwise the penetrating sprays will break in do_mob. return if(!L && !target.is_injectable()) //only checks on non-living mobs, due to how can_inject() handles @@ -120,104 +184,104 @@ to_chat(user, "Medicine won't work on a robotic limb!") return - var/contained = reagents.log_list() + var/contained = vial.reagents.log_list() add_logs(user, L, "attemped to inject", src, addition="which had [contained]") //Always log attemped injections for admins if(vial != null) switch(mode) if(HYPO_INJECT) if(L) //living mob - if(!L.can_inject(user, TRUE)) - return if(L != user) L.visible_message("[user] is trying to inject [L] with [src]!", \ - "[user] is trying to inject [L] with the [src]!") - if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1))) + "[user] is trying to inject [L] with [src]!") + if(!do_mob(user, L, inject_wait)) return - if(!reagents.total_volume) + if(!penetrates && !L.can_inject(user, 1)) + return + if(!vial.reagents.total_volume) return if(L.reagents.total_volume >= L.reagents.maximum_volume) return L.visible_message("[user] uses the [src] on [L]!", \ "[user] uses the [src] on [L]!") else - if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1))) + if(!do_mob(user, L, inject_self)) return - if(!reagents.total_volume) + if(!penetrates && !L.can_inject(user, 1)) + return + if(!vial.reagents.total_volume) return if(L.reagents.total_volume >= L.reagents.maximum_volume) return log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])") L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG) - var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1) - reagents.reaction(L, INJECT, fraction) - reagents.trans_to(target, amount_per_transfer_from_this) - if(amount_per_transfer_from_this >= 15) + var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1) + vial.reagents.reaction(L, INJECT, fraction) + vial.reagents.trans_to(target, vial.amount_per_transfer_from_this) + if(vial.amount_per_transfer_from_this >= 15) playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1) - if(amount_per_transfer_from_this < 15) + if(vial.amount_per_transfer_from_this < 15) playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1) - to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [reagents.total_volume] units.") + to_chat(user, "You inject [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.") if(HYPO_SPRAY) if(L) //living mob - if(!L.can_inject(user, TRUE)) - return if(L != user) - L.visible_message("[user] is trying to inject [L] with [src]!", \ - "[user] is trying to inject [L] with the [src]!") - if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1))) + L.visible_message("[user] is trying to spray [L] with [src]!", \ + "[user] is trying to spray [L] with [src]!") + if(!do_mob(user, L, spray_wait)) return - if(!reagents.total_volume) + if(!penetrates && !L.can_inject(user, 1)) + return + if(!vial.reagents.total_volume) return if(L.reagents.total_volume >= L.reagents.maximum_volume) return L.visible_message("[user] uses the [src] on [L]!", \ "[user] uses the [src] on [L]!") else - if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1))) + if(!do_mob(user, L, spray_self)) return - if(!reagents.total_volume) + if(!penetrates && !L.can_inject(user, 1)) + return + if(!vial.reagents.total_volume) return if(L.reagents.total_volume >= L.reagents.maximum_volume) return log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])") L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG) - var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1) - reagents.reaction(L, PATCH, fraction) - reagents.trans_to(target, amount_per_transfer_from_this) - if(amount_per_transfer_from_this >= 15) + var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1) + vial.reagents.reaction(L, PATCH, fraction) + vial.reagents.trans_to(target, vial.amount_per_transfer_from_this) + if(vial.amount_per_transfer_from_this >= 15) playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1) - if(amount_per_transfer_from_this < 15) + if(vial.amount_per_transfer_from_this < 15) playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1) - to_chat(user, "You spray [amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [reagents.total_volume] units.") + to_chat(user, "You spray [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.") else to_chat(user, "[src] doesn't work here!") return -/obj/item/reagent_containers/hypospray/mkii/AltClick(mob/living/user) +/obj/item/hypospray/mkii/attack_self(mob/living/user) if(user) if(user.incapacitated()) return - else if(!contents) + else if(!vial) to_chat(user, "This Hypo needs to be loaded first!") return else - for(var/obj/item/I in contents) - unload_hypo(I,user) + unload_hypo(vial,user) -/obj/item/reagent_containers/hypospray/mkii/verb/modes() - set name = "Change Application Method" +/obj/item/hypospray/mkii/verb/modes() + set name = "Toggle Application Mode" set category = "Object" set src in usr var/mob/M = usr - var/choice = alert(M, "Which application mode should this be? Current mode is: [mode ? "Spray" : "Inject"]", "", "Spray", "Cancel", "Inject") - switch(choice) - if("Cancel") - return - if("Inject") + switch(mode) + if(HYPO_SPRAY) mode = HYPO_INJECT to_chat(M, "[src] is now set to inject contents on application.") - if("Spray") + if(HYPO_INJECT) mode = HYPO_SPRAY to_chat(M, "[src] is now set to spray contents on application.") \ No newline at end of file diff --git a/modular_citadel/code/modules/reagents/reagent container/hypovial.dm b/modular_citadel/code/modules/reagents/reagent container/hypovial.dm old mode 100644 new mode 100755 index e3e82e22a7..32ff1a8b80 --- a/modular_citadel/code/modules/reagents/reagent container/hypovial.dm +++ b/modular_citadel/code/modules/reagents/reagent container/hypovial.dm @@ -1,116 +1,197 @@ /obj/item/reagent_containers/glass/bottle/vial - name = "hypospray vial" - desc = "This is a vial suitable for loading into mk II hyposprays." + name = "broken hypovial" + desc = "A hypovial compatible with most hyposprays." icon = 'modular_citadel/icons/obj/vial.dmi' icon_state = "hypovial" spillable = FALSE var/comes_with = list() //Easy way of doing this. volume = 10 + possible_transfer_amounts = list(1,2,5,10) obj_flags = UNIQUE_RENAME - unique_reskin = list("Hypospray vial" = "hypovial", - "Red hypospray vial" = "hypovial-b", - "Blue hypospray vial" = "hypovial-d", - "Green hypospray vial" = "hypovial-a", - "Orange hypospray vial" = "hypovial-k", - "Purple hypospray vial" = "hypovial-p", - "Black hypospray vial" = "hypovial-t" + unique_reskin = list("hypovial" = "hypovial", + "red hypovial" = "hypovial-b", + "blue hypovial" = "hypovial-d", + "green hypovial" = "hypovial-a", + "orange hypovial" = "hypovial-k", + "purple hypovial" = "hypovial-p", + "black hypovial" = "hypovial-t" ) /obj/item/reagent_containers/glass/bottle/vial/Initialize() . = ..() if(!icon_state) icon_state = "hypovial" - update_icon() for(var/R in comes_with) reagents.add_reagent(R,comes_with[R]) + update_icon() + /obj/item/reagent_containers/glass/bottle/vial/on_reagent_change() update_icon() +/obj/item/reagent_containers/glass/bottle/vial/reskin_obj(mob/M) //Makes the vials completely reskinnable, and renames them - overrides /obj/proc/reskin_obj + if(!LAZYLEN(unique_reskin)) + return + var/choice = input(M,"Do you wish to recolour your [src]?","Vial Recolour") as null|anything in unique_reskin + if(!QDELETED(src) && choice && !current_skin && !M.incapacitated() && in_range(M,src)) + if(!unique_reskin[choice]) + return + icon_state = unique_reskin[choice] + name = choice + to_chat(M, "[src] is now skinned as '[choice].'") + /obj/item/reagent_containers/glass/bottle/vial/update_icon() cut_overlays() if(reagents.total_volume) - var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "[icon_state]10") + var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "hypovial10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) if(0 to 9) - filling.icon_state = "[icon_state]10" + filling.icon_state = "hypovial10" if(10 to 29) - filling.icon_state = "[icon_state]25" + filling.icon_state = "hypovial25" if(30 to 49) - filling.icon_state = "[icon_state]50" - if(50 to 69) - filling.icon_state = "[icon_state]75" - if(70 to INFINITY) - filling.icon_state = "[icon_state]100" + filling.icon_state = "hypovial50" + if(50 to 85) + filling.icon_state = "hypovial75" + if(86 to INFINITY) + filling.icon_state = "hypovial100" filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) +/obj/item/reagent_containers/glass/bottle/vial/tiny + name = "small hypovial" + //Shouldn't be possible to get this without adminbuse + /obj/item/reagent_containers/glass/bottle/vial/small + name = "hypovial" volume = 30 + possible_transfer_amounts = list(5,10,15,30) + +/obj/item/reagent_containers/glass/bottle/vial/small/bluespace + volume = 60 + possible_transfer_amounts = list(5,10,15,20,30,60) + name = "bluespace hypovial" + icon_state = "hypovialbs" + unique_reskin = null /obj/item/reagent_containers/glass/bottle/vial/large - name = "large hypospray vial" - desc = "This is a vial suitable for loading into the Chief Medical Officer's Hypospray mk II." + name = "large hypovial" + desc = "A large hypovial, for deluxe hypospray models." icon_state = "hypoviallarge" volume = 60 - unique_reskin = list("Large hypospray vial" = "hypoviallarge", - "Red hypospray vial" = "hypoviallarge-b", - "Blue hypospray vial" = "hypoviallarge-d", - "Green hypospray vial" = "hypoviallarge-a", - "Orange hypospray vial" = "hypoviallarge-k", - "Purple hypospray vial" = "hypoviallarge-p", - "Black hypospray vial" = "hypoviallarge-t" + possible_transfer_amounts = list(5,10,15,20,30,60) + unique_reskin = list("large hypovial" = "hypoviallarge", + "large red hypovial" = "hypoviallarge-b", + "large blue hypovial" = "hypoviallarge-d", + "large green hypovial" = "hypoviallarge-a", + "large orange hypovial" = "hypoviallarge-k", + "large purple hypovial" = "hypoviallarge-p", + "large black hypovial" = "hypoviallarge-t" ) +/obj/item/reagent_containers/glass/bottle/vial/large/update_icon() + cut_overlays() + if(reagents.total_volume) + var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "hypoviallarge10") + + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) + filling.icon_state = "hypoviallarge10" + if(10 to 29) + filling.icon_state = "hypoviallarge25" + if(30 to 49) + filling.icon_state = "hypoviallarge50" + if(50 to 85) + filling.icon_state = "hypoviallarge75" + if(86 to INFINITY) + filling.icon_state = "hypoviallarge100" + + filling.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(filling) + +/obj/item/reagent_containers/glass/bottle/vial/large/bluespace + possible_transfer_amounts = list(5,10,15,20,25,30,60,120) + name = "bluespace large hypovial" + volume = 120 + icon_state = "hypoviallargebs" + unique_reskin = null + + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine - name = "vial (bicaridine)" + name = "red hypovial (bicaridine)" icon_state = "hypovial-b" comes_with = list("bicaridine" = 30) /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin - name = "vial (Anti-Tox)" + name = "green hypovial (Anti-Tox)" icon_state = "hypovial-a" comes_with = list("antitoxin" = 30) /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane - name = "vial (kelotane)" + name = "orange hypovial (kelotane)" icon_state = "hypovial-k" comes_with = list("kelotane" = 30) /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin - name = "vial (dexalin)" + name = "blue hypovial (dexalin)" icon_state = "hypovial-d" comes_with = list("dexalin" = 30) -/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricordrazine - name = "vial (tricordrazine)" +/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord + name = "hypovial (tricordrazine)" icon_state = "hypovial" comes_with = list("tricordrazine" = 30) /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO - name = "large vial (CMO Special)" + name = "deluxe hypovial" icon_state = "hypoviallarge-cmos" - comes_with = list("epinephrine" = 15, "kelotane" = 15, "charcoal" = 15, "bicaridine" = 15) + comes_with = list("omnizine" = 20, "leporazine" = 20, "atropine" = 20) /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/bicaridine - name = "large vial (bicaridine)" + name = "large red hypovial (bicaridine)" icon_state = "hypoviallarge-b" comes_with = list("bicaridine" = 60) /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/antitoxin - name = "large vial (Anti-Tox)" + name = "large green hypovial (anti-tox)" icon_state = "hypoviallarge-a" comes_with = list("antitoxin" = 60) /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/kelotane - name = "large vial (kelotane)" + name = "large orange hypovial (kelotane)" icon_state = "hypoviallarge-k" comes_with = list("kelotane" = 60) /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin - name = "large vial (dexalin)" + name = "large blue hypovial (dexalin)" icon_state = "hypoviallarge-d" comes_with = list("dexalin" = 60) + +/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/charcoal + name = "large black hypovial (charcoal)" + icon_state = "hypoviallarge-t" + comes_with = list("charcoal" = 60) + +/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/tricord + name = "large hypovial (tricord)" + icon_state = "hypoviallarge" + comes_with = list("tricordrazine" = 60) + +/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu + name = "large green hypovial (salglu)" + icon_state = "hypoviallarge-a" + comes_with = list("salglu_solution" = 60) + +/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/synthflesh + name = "large orange hypovial (synthflesh)" + icon_state = "hypoviallarge-k" + comes_with = list("synthflesh" = 60) + +/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat + name = "combat hypovial" + icon_state = "hypoviallarge-t" + comes_with = list("epinephrine" = 3, "omnizine" = 19, "leporazine" = 19, "atropine" = 19) //Epinephrine's main effect here is to kill suff damage, so we don't need much given atropine \ No newline at end of file diff --git a/modular_citadel/code/modules/research/designs/autolathe_designs.dm b/modular_citadel/code/modules/research/designs/autolathe_designs.dm new file mode 100755 index 0000000000..55b83a2262 --- /dev/null +++ b/modular_citadel/code/modules/research/designs/autolathe_designs.dm @@ -0,0 +1,15 @@ +/datum/design/hypovialsmall + name = "Hypovial" + id = "hypovial" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/reagent_containers/glass/bottle/vial/small + category = list("initial","Medical") + +/datum/design/hypoviallarge + name = "Large Hypovial" + id = "large_hypovial" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2500) + build_path = /obj/item/reagent_containers/glass/bottle/vial/large + category = list("initial","Medical") diff --git a/modular_citadel/icons/obj/hypospraymkii.dmi b/modular_citadel/icons/obj/hypospraymkii.dmi old mode 100644 new mode 100755 index f5e89227c7..3f32219d84 Binary files a/modular_citadel/icons/obj/hypospraymkii.dmi and b/modular_citadel/icons/obj/hypospraymkii.dmi differ diff --git a/modular_citadel/icons/obj/vial.dmi b/modular_citadel/icons/obj/vial.dmi old mode 100644 new mode 100755 index 694cc1741b..bc282ab1d3 Binary files a/modular_citadel/icons/obj/vial.dmi and b/modular_citadel/icons/obj/vial.dmi differ diff --git a/tgstation.dme b/tgstation.dme index f51fc06b4e..4f63d6dd14 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2638,6 +2638,7 @@ #include "modular_citadel\code\game\objects\items\holy_weapons.dm" #include "modular_citadel\code\game\objects\items\meat.dm" #include "modular_citadel\code\game\objects\items\stunsword.dm" +#include "modular_citadel\code\game\objects\items\vending_items.dm" #include "modular_citadel\code\game\objects\items\circuitboards\machine_circuitboards.dm" #include "modular_citadel\code\game\objects\items\devices\aicard.dm" #include "modular_citadel\code\game\objects\items\devices\flashlight.dm" @@ -2648,11 +2649,12 @@ #include "modular_citadel\code\game\objects\items\melee\energy.dm" #include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm" #include "modular_citadel\code\game\objects\items\melee\transforming.dm" +#include "modular_citadel\code\game\objects\items\storage\firstaid.dm" #include "modular_citadel\code\game\objects\structures\beds_chairs\chair.dm" #include "modular_citadel\code\game\objects\structures\beds_chairs\sofa.dm" #include "modular_citadel\code\game\objects\structures\crates_lockers\closets\fitness.dm" #include "modular_citadel\code\game\objects\structures\crates_lockers\closets\wardrobe.dm" -#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" +#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\secure\citadel_lockers.dm" #include "modular_citadel\code\modules\admin\admin.dm" #include "modular_citadel\code\modules\admin\holder2.dm" #include "modular_citadel\code\modules\admin\secrets.dm" @@ -2716,6 +2718,7 @@ #include "modular_citadel\code\modules\jobs\job_types\captain.dm" #include "modular_citadel\code\modules\jobs\job_types\cargo_service.dm" #include "modular_citadel\code\modules\jobs\job_types\engineering.dm" +#include "modular_citadel\code\modules\jobs\job_types\medical.dm" #include "modular_citadel\code\modules\jobs\job_types\security.dm" #include "modular_citadel\code\modules\keybindings\bindings_carbon.dm" #include "modular_citadel\code\modules\keybindings\bindings_human.dm" @@ -2769,6 +2772,7 @@ #include "modular_citadel\code\modules\reagents\reagent container\hypovial.dm" #include "modular_citadel\code\modules\reagents\reagents\cit_reagents.dm" #include "modular_citadel\code\modules\recycling\disposal\bin.dm" +#include "modular_citadel\code\modules\research\designs\autolathe_designs.dm" #include "modular_citadel\code\modules\research\designs\autoylathe_designs.dm" #include "modular_citadel\code\modules\research\designs\machine_designs.dm" #include "modular_citadel\code\modules\research\designs\xenobio_designs.dm" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index e5c86b9e78..6476446710 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)}),C=l(function(t){new v(t)});C||(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",C=y==g,P=!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),C&&O.name!==g&&(P=!0,T=function(){return O.call(this)})}if(a&&!_||!f&&!P&&A[d]||o(A,d,T),p[e]=T,p[S]=v,y)if(w={values:C?T:E(g),keys:x?T:E(m),entries:C?E("entries"):T},_)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(f||P),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,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),C=Object.prototype,P=Array.prototype,A=P.slice,O=P.join,T=r.setDesc,R=r.getDesc,L=r.setDescs,j={};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(!C.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 M="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),D=M.concat("length","prototype"),N=M.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("