From b4a7def5cae252f31a2082db4ce661a3fb0b6b61 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Wed, 21 Mar 2018 15:28:06 -0500 Subject: [PATCH] Hypospray kits and reworks! (#5907) * Adds Hypospray kits, fixes reagent overlays Also adds colors to trek chems other than PINK. * reee admins.txt * adds the CMO Hypo MK II kit to the CMO's locker renames the locker overrides as well, because lazy * grammer gud * hypo vial fix suggested by Kfive * Modifies hypospray functions * Fixed the Hypospray mk.II, is now comprehensive where it must. * Fixed bugs, including the vending machine problem. * Either fixed or didn't fix line terminator issues. * Turns out there were no line ending problems, rather there were literally spaces after some lines, which got removed automatically. * Forgot a comma. * Forgot a comma, even though it's in a comment. Good thing I caught it before somebody tried decommenting it. * Left a line in the alternative reskin function for hypovials. This has been removed since it's unnecessary. * delay tweaks. otherwise all good. * reee github * unneeded \the I thought were purged * grammar fix, gives MDs and Chemist hypokits * Makes chem masters able to produce vials * recompiles tgui * Update belt.dm --- cfg/admin.txt | 0 code/game/machinery/vending.dm | 40 ++-- code/game/objects/items/storage/belt.dm | 5 +- code/game/objects/items/vending_items.dm | 2 + code/modules/clothing/suits/labcoat.dm | 2 +- .../chemistry/machinery/chem_master.dm | 28 +++ .../chemistry/reagents/medicine_reagents.dm | 12 +- modular_citadel/cit_medkits.dm | 113 --------- .../code/game/machinery/vending.dm | 28 ++- .../game/objects/items/storage/firstaid.dm | 143 +++++++++++ .../code/game/objects/items/vending_items.dm | 5 + .../secure/{cargo.dm => citadel_lockers.dm} | 4 +- .../code/modules/clothing/under/trek_under.dm | 3 +- .../code/modules/jobs/job_types/medical.dm | 7 + .../reagent container/hypospraymkii.dm | 222 +++++++++++------- .../reagents/reagent container/hypovial.dm | 159 ++++++++++--- .../research/designs/autolathe_designs.dm | 15 ++ modular_citadel/icons/obj/hypospraymkii.dmi | Bin 1038 -> 1265 bytes modular_citadel/icons/obj/vial.dmi | Bin 2148 -> 2574 bytes tgstation.dme | 6 +- tgui/assets/tgui.js | 32 +-- tgui/src/interfaces/chem_master.ract | 6 + 22 files changed, 553 insertions(+), 279 deletions(-) delete mode 100644 cfg/admin.txt mode change 100644 => 100755 code/game/machinery/vending.dm mode change 100644 => 100755 code/game/objects/items/storage/belt.dm mode change 100644 => 100755 code/game/objects/items/vending_items.dm delete mode 100644 modular_citadel/cit_medkits.dm mode change 100644 => 100755 modular_citadel/code/game/machinery/vending.dm create mode 100755 modular_citadel/code/game/objects/items/storage/firstaid.dm create mode 100755 modular_citadel/code/game/objects/items/vending_items.dm rename modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/{cargo.dm => citadel_lockers.dm} (54%) create mode 100644 modular_citadel/code/modules/jobs/job_types/medical.dm mode change 100644 => 100755 modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm mode change 100644 => 100755 modular_citadel/code/modules/reagents/reagent container/hypovial.dm create mode 100755 modular_citadel/code/modules/research/designs/autolathe_designs.dm mode change 100644 => 100755 modular_citadel/icons/obj/hypospraymkii.dmi mode change 100644 => 100755 modular_citadel/icons/obj/vial.dmi 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 f5e89227c77d936dc67045deefaedb0bbb704c5f..3f32219d84ef446d3101ae43397c27e1bacbc993 GIT binary patch delta 1172 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 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("