From 3a5bc5ccba1586cd9160bfab5b43d2792c3b72b1 Mon Sep 17 00:00:00 2001 From: AlbertNanotracen <155601848+AlbertNanotracen@users.noreply.github.com> Date: Mon, 24 Jun 2024 00:44:24 -0300 Subject: [PATCH] [Port] Chemmaster refactor (#1644) * ChemMaster and CondiMaster refactored, prints items over time (#75849) ![ZceBfkJaFG](https://github.com/tgstation/tgstation/assets/3625094/aedf6178-dad7-40b2-a7ea-18da6f56e9e8) Chem master has been using some hard coded styles for containers, pills and patches. Some people didn't bother to update styles, and they stayed outdated. Now it uses just a list of reagent containers instead, which makes it easy to add new containers - just one line of code. Also changed its sprite for better animations, emissive overlay, and to display buffer reagents on the sprite itself. Now it plays printing animation when you actually print containers and servos have a purpose now - they increase the amount of containers printed at once by up to 100% * part_tier. Pills and patches are always printed at double amount. And fixes #59734 Makes chem master easier to manage in code and easier to use in-game. Printing delay is added for consistency with other fabrication machines (like lathes), to give a purpose for the servo motor used in construction, for visuals (to show the printing animation only when something is being printed, and not just when you move stuff in and out of buffer as before) and to prevent people from spamming the world with unneeded objects with 0 second delay. :cl: qol: Chemmaster UI tweaked fix: Fixed chem master showing wrong data during reagent analysis fix: Fixed chem master not working with fermented drinks image: Chemmaster resprited, now has an indicator for buffer reagents refactor: Refactored chemmaster code, it now uses reagent containers instead of styles balance: Chemmaster now uses servos and has printing animation of 0.75 second duration. Outputs 1 container or up to 2 pills/patches per cycle by default. Can be upgraded to output up to 4 and 8 with t4 servos. /:cl: * Condiments resprited (#75715) ![image](https://github.com/tgstation/tgstation/assets/3625094/021a6d6e-6f25-40e1-8c1a-6cebb25e7614) Resprited many condiment containers. And a tray (don't know why, it just was in the dmi) Replaced the old condiment bottle from Condi Master with the one that was used in Chem Master before the test tubes. More in line with other 3/4 stuff :cl: image: Resprited many condiment containers image: Added a sprite for cooking oil / corn oil container image: Replaced old condiment bottles with the newer bottles in Condi Master /:cl: * Test tubes and racks (#75179) ![image](https://user-images.githubusercontent.com/3625094/236466928-dd7beffb-ff26-4d78-a10b-7be29aae56f2.png) Bottles have varied volumes - some of them hold 30, some 50, while having the same sprite. And the size is comparable with small beaker, so it was a bit weird that it can hold only 30 units. Now the default bottle volume is 50, consistently. Test tubes are the new 30u container that replaces bottles created in chem master (but not condi master) and pandemic. For better management of test tubes, this PR also adds a rack that can be crafted from 1 wooden plank. The rack stores up to 10 test tubes and can pick them up and drop quickly similar to how the pill bottle works with pills. ![image](https://user-images.githubusercontent.com/3625094/236472298-df4932a4-4620-4a6b-87c0-67efc7317d02.png) Consistent volume for the bottle sprite instead of some being 30, some 50. Essential attribute for chemical lab, good company for Chem Separator. :cl: MTandi, coiledlamb add: Added test tubes and racks for them balance: All 30u bottles now have 50u volume and chem master/pandemic spawn tubes instead of bottles /:cl: * fix conflicts in chemical.dmi * merging dmis is too hard * vials * removes a null reference error i made * gives test tubes a crafting recipe (must be researched) * factory ouput uses same pill/patch styles as chem master * why were these sprites not added, i dont get dmi files * remove extra newlines * Porting some of tg#79059 * fixed merge conflict correctly * context begone! --------- Co-authored-by: Andrew --- .../lavaland_surface_syndicate_base1.dmm | 4 +- _maps/map_files/BoxStation/BoxStation.dmm | 4 +- .../map_files/Deltastation/DeltaStation2.dmm | 20 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 4 +- _maps/map_files/MetaStation/MetaStation.dmm | 16 +- _maps/map_files/tramstation/tramstation.dmm | 16 +- _maps/templates/holodeck_medicalsim.dmm | 6 +- code/__DEFINES/reagents.dm | 20 +- .../items/devices/portable_chem_mixer.dm | 1 + .../items/stacks/sheets/sheet_types.dm | 1 + code/game/objects/items/storage/bags.dm | 3 + code/game/objects/items/storage/belt.dm | 2 + code/game/objects/items/storage/medkit.dm | 29 + code/modules/asset_cache/assets/chemmaster.dm | 15 + code/modules/asset_cache/assets/condiments.dm | 22 +- code/modules/asset_cache/assets/patches.dm | 8 - code/modules/asset_cache/assets/pills.dm | 26 - code/modules/clothing/suits/jobs.dm | 2 + code/modules/clothing/suits/labcoat.dm | 1 + code/modules/clothing/suits/wintercoats.dm | 3 + code/modules/jobs/job_types/virologist.dm | 2 +- code/modules/mod/mod_theme.dm | 2 + code/modules/plumbing/plumbers/pill_press.dm | 204 ++-- .../chemistry/machinery/chem_master.dm | 899 ++++++++---------- .../reagents/chemistry/machinery/pandemic.dm | 12 +- .../chemistry/reagents/food_reagents.dm | 3 +- .../reagents/reagent_containers/condiment.dm | 22 +- .../reagents/reagent_containers/cups/_cup.dm | 12 + .../reagent_containers/cups/bottle.dm | 6 +- .../reagents/reagent_containers/patch.dm | 43 + .../reagents/reagent_containers/pill.dm | 51 + code/modules/research/techweb/all_nodes.dm | 2 +- icons/obj/food/containers.dmi | Bin 21997 -> 23459 bytes icons/obj/medical/chemical.dmi | Bin 64688 -> 69629 bytes icons/obj/reagentfillings.dmi | Bin 7739 -> 8366 bytes icons/ui_icons/condiments/bbqsauce.png | Bin 202 -> 429 bytes icons/ui_icons/condiments/bottle.png | Bin 0 -> 387 bytes icons/ui_icons/condiments/cherryjelly.png | Bin 519 -> 498 bytes icons/ui_icons/condiments/coldsauce.png | Bin 193 -> 497 bytes icons/ui_icons/condiments/cookingoil.png | Bin 0 -> 473 bytes icons/ui_icons/condiments/emptycondiment.png | Bin 166 -> 0 bytes icons/ui_icons/condiments/enzyme.png | Bin 177 -> 458 bytes icons/ui_icons/condiments/flour.png | Bin 231 -> 459 bytes icons/ui_icons/condiments/honey.png | Bin 0 -> 461 bytes icons/ui_icons/condiments/hotsauce.png | Bin 177 -> 376 bytes icons/ui_icons/condiments/ketchup.png | Bin 176 -> 350 bytes icons/ui_icons/condiments/mayonnaise.png | Bin 210 -> 346 bytes icons/ui_icons/condiments/milk.png | Bin 232 -> 323 bytes icons/ui_icons/condiments/oliveoil.png | Bin 212 -> 440 bytes icons/ui_icons/condiments/peanutbutter.png | Bin 322 -> 415 bytes icons/ui_icons/condiments/peppermillsmall.png | Bin 162 -> 331 bytes icons/ui_icons/condiments/rice.png | Bin 229 -> 498 bytes icons/ui_icons/condiments/saltshakersmall.png | Bin 160 -> 288 bytes icons/ui_icons/condiments/soymilk.png | Bin 232 -> 334 bytes icons/ui_icons/condiments/soysauce.png | Bin 201 -> 342 bytes icons/ui_icons/condiments/sugar.png | Bin 231 -> 565 bytes .../code/modules/virology/items/vials.dm | 20 +- .../modules/virology/machines/centrifuge.dm | 232 ++--- .../code/modules/virology/machines/curer.dm | 10 +- .../modules/virology/research/research.dm | 8 +- .../components/ouputs/factory_output.dm | 34 +- tgstation.dme | 3 +- tgui/packages/tgui/interfaces/ChemMaster.tsx | 453 +++++++++ tgui/packages/tgui/interfaces/ChemPress.tsx | 111 +++ 64 files changed, 1444 insertions(+), 888 deletions(-) create mode 100644 code/modules/asset_cache/assets/chemmaster.dm delete mode 100644 code/modules/asset_cache/assets/patches.dm delete mode 100644 code/modules/asset_cache/assets/pills.dm create mode 100644 icons/ui_icons/condiments/bottle.png create mode 100644 icons/ui_icons/condiments/cookingoil.png delete mode 100644 icons/ui_icons/condiments/emptycondiment.png create mode 100644 icons/ui_icons/condiments/honey.png create mode 100644 tgui/packages/tgui/interfaces/ChemMaster.tsx create mode 100644 tgui/packages/tgui/interfaces/ChemPress.tsx diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 776b3c9f6a83b3..86dd9329f4089d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -2657,8 +2657,8 @@ /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/east, -/obj/item/storage/box/vials, -/obj/item/storage/box/vials, +/obj/item/storage/box/tube, +/obj/item/storage/box/tube, /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, /obj/item/clothing/gloves/latex, diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index e65fa7bdb511a5..33cd689a5247a3 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -6123,7 +6123,7 @@ pixel_x = 4; pixel_y = 4 }, -/obj/item/storage/box/vials{ +/obj/item/storage/box/tube{ pixel_y = 4; pixel_x = -2 }, @@ -26185,7 +26185,7 @@ pixel_x = 4; pixel_y = 4 }, -/obj/item/storage/box/vials{ +/obj/item/storage/box/tube{ pixel_y = 4; pixel_x = -2 }, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 756eaee810fb20..7a7e80d875b1bf 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -52704,16 +52704,16 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe/antiviral, /obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, /obj/item/storage/box/monkeycubes/mousecubes, /obj/item/storage/box/monkeycubes/mousecubes, /obj/item/storage/box/monkeycubes/mousecubes, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 4edb0df49a0205..9ee3db62c4b74f 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -49456,11 +49456,11 @@ /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, -/obj/item/storage/box/vials{ +/obj/item/storage/box/tube{ pixel_y = 10; pixel_x = -10 }, -/obj/item/storage/box/vials{ +/obj/item/storage/box/tube{ pixel_y = 10; pixel_x = -10 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index fc309d010dff47..a70d0bdf0d96ee 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -28524,14 +28524,14 @@ dir = 8 }, /obj/item/device/antibody_scanner, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index c0bf64b04ce1a8..1e42fda13d9828 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -6145,14 +6145,14 @@ /obj/effect/turf_decal/trimline/green/filled/line, /obj/item/radio/intercom/directional/south, /obj/structure/table/glass, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, /obj/item/clothing/glasses/science, /obj/item/clothing/glasses/science, /obj/item/clothing/glasses/hud/health, diff --git a/_maps/templates/holodeck_medicalsim.dmm b/_maps/templates/holodeck_medicalsim.dmm index b81ec8393fdf75..54dc73dbd7c1bd 100644 --- a/_maps/templates/holodeck_medicalsim.dmm +++ b/_maps/templates/holodeck_medicalsim.dmm @@ -388,9 +388,9 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, +/obj/item/reagent_containers/cup/tube, /turf/open/floor/holofloor{ icon_state = "white" }, diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index f762929ba54b7e..724a8bee05ba39 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -42,23 +42,18 @@ #define SYNTHFLESH_UNHUSK_AMOUNT 100 //used by chem masters and pill presses -#define PILL_STYLE_COUNT 22 //Update this if you add more pill icons or you die -#define RANDOM_PILL_STYLE 22 //Dont change this one though - -//used by chem masters and pill presses -//update this if you add more patch icons -#define PATCH_STYLE_LIST list("bandaid", "bandaid_brute", "bandaid_burn", "bandaid_both") //icon_state list -#define DEFAULT_PATCH_STYLE "bandaid" - +// The categories of reagent packaging +#define CAT_CONDIMENTS "condiments" +#define CAT_TUBES "tubes" +#define CAT_PILLS "pills" +#define CAT_PATCHES "patches" +#define DEFAULT_PATCH_STYLE "bandaid_blank" //used by chem master #define CONDIMASTER_STYLE_AUTO "auto" #define CONDIMASTER_STYLE_FALLBACK "_" #define ALLERGIC_REMOVAL_SKIP "Allergy" -/// the default temperature at which chemicals are added to reagent holders at -#define DEFAULT_REAGENT_TEMPERATURE 300 - //Used in holder.dm/equlibrium.dm to set values and volume limits ///stops floating point errors causing issues with checking reagent amounts #define CHEMICAL_QUANTISATION_LEVEL 0.0001 @@ -70,9 +65,10 @@ #define CHEMICAL_NORMAL_PH 7.000 ///The maximum temperature a reagent holder can attain #define CHEMICAL_MAXIMUM_TEMPERATURE 99999 - ///The default purity of all non reacted reagents #define REAGENT_STANDARD_PURITY 0.75 +/// the default temperature at which chemicals are added to reagent holders at +#define DEFAULT_REAGENT_TEMPERATURE 300 //reagent bitflags, used for altering how they works ///allows on_mob_dead() if present in a dead body diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm index 5344cddf283dec..43c74de6c7fd57 100644 --- a/code/game/objects/items/devices/portable_chem_mixer.dm +++ b/code/game/objects/items/devices/portable_chem_mixer.dm @@ -25,6 +25,7 @@ atom_storage.set_holdable(list( /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/cup/glass/waterbottle, /obj/item/reagent_containers/condiment, )) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index e1548c5c4a5d4e..ae3187b927ed85 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -344,6 +344,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 10, time = 6 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ new/datum/stack_recipe("easel", /obj/structure/easel, 5, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ new/datum/stack_recipe("noticeboard", /obj/item/wallframe/noticeboard, 1, time = 1 SECONDS, one_per_turf = FALSE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("test tube rack", /obj/item/storage/test_tube_rack, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \ null, \ new/datum/stack_recipe_list("pews", list( new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 2d4d46e6a3c6bf..6e73797ccaaca4 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -447,6 +447,7 @@ /obj/item/reagent_containers/cup/glass/waterbottle, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/medigel, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, @@ -477,6 +478,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/syringe, /obj/item/weapon/virusdish,//Monkestation Addition @@ -508,6 +510,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/syringe, /obj/item/slime_extract, /obj/item/swab, diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index c9970c7876f1bd..9ffe29cce5030e 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -247,6 +247,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/medigel, /obj/item/reagent_containers/pill, @@ -850,6 +851,7 @@ /obj/item/plant_analyzer, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/spray/pestspray, /obj/item/reagent_containers/spray/plantbgone, /obj/item/secateurs, diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 2ea5365b456ba8..1e695014d6e1cb 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -80,6 +80,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/medigel, @@ -673,3 +674,31 @@ /obj/item/storage/organbox/preloaded/Initialize(mapload) . = ..() reagents.add_reagent(/datum/reagent/cryostylane, reagents.maximum_volume) + +/obj/item/storage/test_tube_rack + name = "test tube rack" + desc = "A wooden rack for storing test tubes." + icon_state = "rack" + base_icon_state = "rack" + icon = 'icons/obj/medical/chemical.dmi' + inhand_icon_state = "contsolid" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + w_class = WEIGHT_CLASS_SMALL + +/obj/item/storage/test_tube_rack/Initialize(mapload) + . = ..() + atom_storage.allow_quick_gather = TRUE + atom_storage.max_slots = 8 + atom_storage.screen_max_columns = 4 + atom_storage.screen_max_rows = 2 + atom_storage.set_holdable(list( + /obj/item/reagent_containers/cup/tube, + )) + +/obj/item/storage/test_tube_rack/attack_self(mob/user) + emptyStorage() + +/obj/item/storage/test_tube_rack/update_icon_state() + icon_state = "[base_icon_state][contents.len > 0 ? contents.len : null]" + return ..() diff --git a/code/modules/asset_cache/assets/chemmaster.dm b/code/modules/asset_cache/assets/chemmaster.dm new file mode 100644 index 00000000000000..d37e6de91a58fa --- /dev/null +++ b/code/modules/asset_cache/assets/chemmaster.dm @@ -0,0 +1,15 @@ +///Icons for containers printed in ChemMaster +/datum/asset/spritesheet/chemmaster + name = "chemmaster" + +/datum/asset/spritesheet/chemmaster/create_spritesheets() + var/list/ids = list() + for(var/category in GLOB.chem_master_containers) + for(var/obj/item/reagent_containers/container as anything in GLOB.chem_master_containers[category]) + var/icon_file = initial(container.icon) + var/icon_state = initial(container.icon_state) + var/id = sanitize_css_class_name("[container]") + if(id in ids) // exclude duplicate containers + continue + ids += id + Insert(id, icon_file, icon_state) diff --git a/code/modules/asset_cache/assets/condiments.dm b/code/modules/asset_cache/assets/condiments.dm index 89bd3eed0cfbe9..d5a7490904d334 100644 --- a/code/modules/asset_cache/assets/condiments.dm +++ b/code/modules/asset_cache/assets/condiments.dm @@ -1,22 +1,24 @@ /datum/asset/spritesheet/simple/condiments name = "condiments" assets = list( - CONDIMASTER_STYLE_FALLBACK = 'icons/ui_icons/condiments/emptycondiment.png', - "enzyme" = 'icons/ui_icons/condiments/enzyme.png', + CONDIMASTER_STYLE_FALLBACK = 'icons/ui_icons/condiments/bottle.png', "flour" = 'icons/ui_icons/condiments/flour.png', - "mayonnaise" = 'icons/ui_icons/condiments/mayonnaise.png', - "milk" = 'icons/ui_icons/condiments/milk.png', - "blackpepper" = 'icons/ui_icons/condiments/peppermillsmall.png', "rice" = 'icons/ui_icons/condiments/rice.png', - "sodiumchloride" = 'icons/ui_icons/condiments/saltshakersmall.png', - "soymilk" = 'icons/ui_icons/condiments/soymilk.png', - "soysauce" = 'icons/ui_icons/condiments/soysauce.png', "sugar" = 'icons/ui_icons/condiments/sugar.png', - "ketchup" = 'icons/ui_icons/condiments/ketchup.png', + "milk" = 'icons/ui_icons/condiments/milk.png', + "enzyme" = 'icons/ui_icons/condiments/enzyme.png', "capsaicin" = 'icons/ui_icons/condiments/hotsauce.png', "frostoil" = 'icons/ui_icons/condiments/coldsauce.png', "bbqsauce" = 'icons/ui_icons/condiments/bbqsauce.png', - "cornoil" = 'icons/ui_icons/condiments/oliveoil.png', + "soymilk" = 'icons/ui_icons/condiments/soymilk.png', + "soysauce" = 'icons/ui_icons/condiments/soysauce.png', + "ketchup" = 'icons/ui_icons/condiments/ketchup.png', + "mayonnaise" = 'icons/ui_icons/condiments/mayonnaise.png', + "oliveoil" = 'icons/ui_icons/condiments/oliveoil.png', + "cooking_oil" = 'icons/ui_icons/condiments/cookingoil.png', "peanut_butter" = 'icons/ui_icons/condiments/peanutbutter.png', "cherryjelly" = 'icons/ui_icons/condiments/cherryjelly.png', + "honey" = 'icons/ui_icons/condiments/honey.png', + "blackpepper" = 'icons/ui_icons/condiments/peppermillsmall.png', + "sodiumchloride" = 'icons/ui_icons/condiments/saltshakersmall.png', ) diff --git a/code/modules/asset_cache/assets/patches.dm b/code/modules/asset_cache/assets/patches.dm deleted file mode 100644 index 2c5bf7e252a8ae..00000000000000 --- a/code/modules/asset_cache/assets/patches.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/asset/spritesheet/simple/patches - name = "patches" - assets = list( - "bandaid" = 'icons/ui_icons/patches/bandaid.png', - "bandaid_brute" = 'icons/ui_icons/patches/bandaid_brute.png', - "bandaid_burn" = 'icons/ui_icons/patches/bandaid_burn.png', - "bandaid_both" = 'icons/ui_icons/patches/bandaid_both.png' - ) diff --git a/code/modules/asset_cache/assets/pills.dm b/code/modules/asset_cache/assets/pills.dm deleted file mode 100644 index bbc551e544d555..00000000000000 --- a/code/modules/asset_cache/assets/pills.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/asset/spritesheet/simple/pills - name = "pills" - assets = list( - "pill1" = 'icons/ui_icons/pills/pill1.png', - "pill2" = 'icons/ui_icons/pills/pill2.png', - "pill3" = 'icons/ui_icons/pills/pill3.png', - "pill4" = 'icons/ui_icons/pills/pill4.png', - "pill5" = 'icons/ui_icons/pills/pill5.png', - "pill6" = 'icons/ui_icons/pills/pill6.png', - "pill7" = 'icons/ui_icons/pills/pill7.png', - "pill8" = 'icons/ui_icons/pills/pill8.png', - "pill9" = 'icons/ui_icons/pills/pill9.png', - "pill10" = 'icons/ui_icons/pills/pill10.png', - "pill11" = 'icons/ui_icons/pills/pill11.png', - "pill12" = 'icons/ui_icons/pills/pill12.png', - "pill13" = 'icons/ui_icons/pills/pill13.png', - "pill14" = 'icons/ui_icons/pills/pill14.png', - "pill15" = 'icons/ui_icons/pills/pill15.png', - "pill16" = 'icons/ui_icons/pills/pill16.png', - "pill17" = 'icons/ui_icons/pills/pill17.png', - "pill18" = 'icons/ui_icons/pills/pill18.png', - "pill19" = 'icons/ui_icons/pills/pill19.png', - "pill20" = 'icons/ui_icons/pills/pill20.png', - "pill21" = 'icons/ui_icons/pills/pill21.png', - "pill22" = 'icons/ui_icons/pills/pill22.png', - ) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 26a9619336460b..fb05df7e26d383 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -20,6 +20,7 @@ /obj/item/plant_analyzer, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/spray/pestspray, /obj/item/reagent_containers/spray/plantbgone, /obj/item/secateurs, @@ -267,6 +268,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/syringe, /obj/item/retractor, diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 743cb8d2c06a17..1b5f22cceeafde 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -18,6 +18,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index ec4370f61d4c58..d4461b8812f19a 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -221,6 +221,7 @@ /obj/item/holosign_creator, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/spray, ) hoodtype = /obj/item/clothing/head/hooded/winterhood/janitor @@ -276,6 +277,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, @@ -382,6 +384,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 6e4a0859f73f36..59e1d531f44c09 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -55,7 +55,7 @@ uniform = /obj/item/clothing/under/rank/medical/virologist backpack_contents = list( // /obj/item/extrapolator = 1, //monkestation edit - extrapolator is useless with pathology. - /obj/item/storage/box/vials = 1, + /obj/item/storage/box/tube = 1, ) suit = /obj/item/clothing/suit/toggle/labcoat/virologist suit_store = /obj/item/flashlight/pen diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 26b206ef3de407..e680bb3cc60644 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -474,6 +474,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, @@ -569,6 +570,7 @@ /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/cup/beaker, /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index c8eed1e3d78a7c..873177819cbed0 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -1,113 +1,115 @@ +///the minimum size of a pill or patch +#define MIN_VOLUME 5 +///the maximum size a pill or patch can be +#define MAX_VOLUME 50 +///max amount of pills allowed on our tile before we start storing them instead +#define MAX_FLOOR_PRODUCTS 10 + ///We take a constant input of reagents, and produce a pill once a set volume is reached /obj/machinery/plumbing/pill_press name = "chemical press" - desc = "A press that makes pills, patches and bottles." + desc = "A press that makes pills, patches and tubes." icon_state = "pill_press" - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 ///category for plumbing RCD category="Storage" - - ///maximum size of a pill - var/max_pill_volume = 50 - ///maximum size of a patch - var/max_patch_volume = 40 - ///maximum size of a bottle - var/max_bottle_volume = 30 - ///current operating product (pills or patches) + /// current operating product (pills or patches) var/product = "pill" - ///the minimum size a pill or patch can be - var/min_volume = 5 - ///the maximum size a pill or patch can be - var/max_volume = 50 - ///selected size of the product + /// selected size of the product var/current_volume = 10 - ///prefix for the product name + /// prefix for the product name var/product_name = "factory" - ///the icon_state number for the pill. - var/pill_number = RANDOM_PILL_STYLE - ///list of id's and icons for the pill selection of the ui - var/list/pill_styles - /// Currently selected patch style - var/patch_style = DEFAULT_PATCH_STYLE - /// List of available patch styles for UI - var/list/patch_styles - ///list of products stored in the machine, so we dont have 610 pills on one tile + /// All packaging types wrapped up in 1 big list + var/static/list/packaging_types = null + ///The type of packaging to use + var/packaging_type + ///Category of packaging + var/packaging_category + /// list of products stored in the machine, so we dont have 610 pills on one tile var/list/stored_products = list() - ///max amount of pills allowed on our tile before we start storing them instead - var/max_floor_products = 10 - -/obj/machinery/plumbing/pill_press/examine(mob/user) - . = ..() - . += span_notice("The [name] currently has [stored_products.len] stored. There needs to be less than [max_floor_products] on the floor to continue dispensing.") /obj/machinery/plumbing/pill_press/Initialize(mapload, bolt, layer) . = ..() + if(!packaging_types) + var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/chemmaster) + + var/list/types = list( + CAT_PILLS = GLOB.chem_master_containers[CAT_PILLS], + CAT_PATCHES = GLOB.chem_master_containers[CAT_PATCHES], + CAT_TUBES = list(/obj/item/reagent_containers/cup/tube), + ) + + packaging_types = list() + for(var/category in types) + var/list/packages = types[category] + + var/list/category_item = list("cat_name" = category) + for(var/obj/item/reagent_containers/container as anything in packages) + var/list/package_item = list( + "class_name" = assets.icon_class_name(sanitize_css_class_name("[container]")), + "ref" = REF(container) + ) + category_item["products"] += list(package_item) + + packaging_types += list(category_item) + + packaging_type = REF(GLOB.chem_master_containers[CAT_PILLS][1]) + decode_category() + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) +/obj/machinery/plumbing/pill_press/examine(mob/user) + . = ..() + . += span_notice("The [name] currently has [stored_products.len] stored. There needs to be less than [MAX_FLOOR_PRODUCTS] on the floor to continue dispensing.") + +/// decode product category from it's type path and returns the decoded typepath +/obj/machinery/plumbing/pill_press/proc/decode_category() + var/obj/item/reagent_containers/container = locate(packaging_type) + if(ispath(container, /obj/item/reagent_containers/pill/patch)) + packaging_category = CAT_PATCHES + else if(ispath(container, /obj/item/reagent_containers/pill)) + packaging_category = CAT_PILLS + else + packaging_category = CAT_TUBES + return container + /obj/machinery/plumbing/pill_press/process(seconds_per_tick) - if(machine_stat & NOPOWER) + if(!is_operational) return + + //shift & check to account for floating point inaccuracies if(reagents.total_volume >= current_volume) - if (product == "pill") - var/obj/item/reagent_containers/pill/P = new(src) - reagents.trans_to(P, current_volume) - P.name = trim("[product_name] pill") - stored_products += P - if(pill_number == RANDOM_PILL_STYLE) - P.icon_state = "pill[rand(1,21)]" + var/obj/item/reagent_containers/container = locate(packaging_type) + container = new container(src) + var/suffix + switch(packaging_category) + if(CAT_PILLS) + suffix = "Pill" + if(CAT_PATCHES) + suffix = "Patch" else - P.icon_state = "pill[pill_number]" - if(P.icon_state == "pill4") //mirrored from chem masters - P.desc = "A tablet or capsule, but not just any, a red one, one taken by the ones not scared of knowledge, freedom, uncertainty and the brutal truths of reality." - else if (product == "patch") - var/obj/item/reagent_containers/pill/patch/P = new(src) - reagents.trans_to(P, current_volume) - P.name = trim("[product_name] patch") - P.icon_state = patch_style - stored_products += P - else if (product == "bottle") - var/obj/item/reagent_containers/cup/bottle/P = new(src) - reagents.trans_to(P, current_volume) - P.name = trim("[product_name] bottle") - stored_products += P + suffix = "Tube" + container.name = "[product_name] [suffix]" + reagents.trans_to(container, current_volume) + stored_products += container + + //dispense stored products on the floor if(stored_products.len) var/pill_amount = 0 - for(var/thing in loc) - if(!istype(thing, /obj/item/reagent_containers/cup/bottle) && !istype(thing, /obj/item/reagent_containers/pill)) - continue + for(var/obj/item/reagent_containers/thing in loc) pill_amount++ - if(pill_amount >= max_floor_products) //too much so just stop + if(pill_amount >= MAX_FLOOR_PRODUCTS) //too much so just stop break - if(pill_amount < max_floor_products && anchored) + if(pill_amount < MAX_FLOOR_PRODUCTS && anchored) var/atom/movable/AM = stored_products[1] //AM because forceMove is all we need stored_products -= AM AM.forceMove(drop_location()) use_power(active_power_usage * seconds_per_tick) -/obj/machinery/plumbing/pill_press/proc/load_styles() - //expertly copypasted from chemmasters - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) - pill_styles = list() - for (var/x in 1 to PILL_STYLE_COUNT) - var/list/SL = list() - SL["id"] = x - SL["class_name"] = assets.icon_class_name("pill[x]") - pill_styles += list(SL) - var/datum/asset/spritesheet/simple/patches_assets = get_asset_datum(/datum/asset/spritesheet/simple/patches) - patch_styles = list() - for (var/raw_patch_style in PATCH_STYLE_LIST) - //adding class_name for use in UI - var/list/patch_style = list() - patch_style["style"] = raw_patch_style - patch_style["class_name"] = patches_assets.icon_class_name(raw_patch_style) - patch_styles += list(patch_style) - /obj/machinery/plumbing/pill_press/ui_assets(mob/user) return list( - get_asset_datum(/datum/asset/spritesheet/simple/pills), - get_asset_datum(/datum/asset/spritesheet/simple/patches), + get_asset_datum(/datum/asset/spritesheet/chemmaster) ) /obj/machinery/plumbing/pill_press/ui_interact(mob/user, datum/tgui/ui) @@ -116,45 +118,45 @@ ui = new(user, src, "ChemPress", name) ui.open() +/obj/machinery/plumbing/pill_press/ui_static_data(mob/user) + var/list/data = list() + + data["min_volume"] = MIN_VOLUME + data["max_volume"] = MAX_VOLUME + data["packaging_types"] = packaging_types + + return data + /obj/machinery/plumbing/pill_press/ui_data(mob/user) - if(!pill_styles || !patch_styles) - load_styles() var/list/data = list() - data["pill_style"] = pill_number + data["current_volume"] = current_volume data["product_name"] = product_name - data["pill_styles"] = pill_styles - data["product"] = product - data["min_volume"] = min_volume - data["max_volume"] = max_volume - data["patch_style"] = patch_style - data["patch_styles"] = patch_styles + data["packaging_type"] = packaging_type + data["packaging_category"] = packaging_category + return data /obj/machinery/plumbing/pill_press/ui_act(action, params) . = ..() if(.) return + . = TRUE switch(action) - if("change_pill_style") - pill_number = clamp(text2num(params["id"]), 1 , PILL_STYLE_COUNT) if("change_current_volume") - current_volume = clamp(text2num(params["volume"]), min_volume, max_volume) + current_volume = round(clamp(text2num(params["volume"]), MIN_VOLUME, MAX_VOLUME)) if("change_product_name") var/formatted_name = html_encode(params["name"]) if (length(formatted_name) > MAX_NAME_LEN) - product_name = copytext(formatted_name, 1, MAX_NAME_LEN+1) + product_name = copytext(formatted_name, 1, MAX_NAME_LEN + 1) else product_name = formatted_name if("change_product") - product = params["product"] - if (product == "pill") - max_volume = max_pill_volume - else if (product == "patch") - max_volume = max_patch_volume - else if (product == "bottle") - max_volume = max_bottle_volume - current_volume = clamp(current_volume, min_volume, max_volume) - if("change_patch_style") - patch_style = params["patch_style"] + packaging_type = params["ref"] + var/obj/item/reagent_containers/container = decode_category() + current_volume = clamp(current_volume, MIN_VOLUME, initial(container.volume)) + +#undef MIN_VOLUME +#undef MAX_VOLUME +#undef MAX_FLOOR_PRODUCTS diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 98c8e9e9adc4f0..fde4d21ea444f2 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -1,143 +1,184 @@ -/** - * Machine that allows to identify and separate reagents in fitting container - * as well as to create new containers with separated reagents in it. - * - * Contains logic for both ChemMaster and CondiMaster, switched by "condi". - */ +#define TRANSFER_MODE_DESTROY 0 +#define TRANSFER_MODE_MOVE 1 +#define TARGET_BEAKER "beaker" +#define TARGET_BUFFER "buffer" + +/// List of containers the Chem Master machine can print +GLOBAL_LIST_INIT(chem_master_containers, list( + CAT_CONDIMENTS = list( + /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/condiment/flour, + /obj/item/reagent_containers/condiment/sugar, + /obj/item/reagent_containers/condiment/rice, + /obj/item/reagent_containers/condiment/cornmeal, + /obj/item/reagent_containers/condiment/milk, + /obj/item/reagent_containers/condiment/soymilk, + /obj/item/reagent_containers/condiment/yoghurt, + /obj/item/reagent_containers/condiment/saltshaker, + /obj/item/reagent_containers/condiment/peppermill, + /obj/item/reagent_containers/condiment/soysauce, + /obj/item/reagent_containers/condiment/bbqsauce, + /obj/item/reagent_containers/condiment/enzyme, + /obj/item/reagent_containers/condiment/hotsauce, + /obj/item/reagent_containers/condiment/coldsauce, + /obj/item/reagent_containers/condiment/mayonnaise, + /obj/item/reagent_containers/condiment/ketchup, + /obj/item/reagent_containers/condiment/quality_oil, + /obj/item/reagent_containers/condiment/cooking_oil, + /obj/item/reagent_containers/condiment/peanut_butter, + /obj/item/reagent_containers/condiment/cherryjelly, + /obj/item/reagent_containers/condiment/honey, + /obj/item/reagent_containers/condiment/pack, + ), + CAT_TUBES = list( + /obj/item/reagent_containers/cup/tube + ), + CAT_PILLS = typecacheof(list( + /obj/item/reagent_containers/pill/style + )), + CAT_PATCHES = typecacheof(list( + /obj/item/reagent_containers/pill/patch/style + )) +)) + /obj/machinery/chem_master name = "ChemMaster 3000" desc = "Used to separate chemicals and distribute them in a variety of forms." density = TRUE layer = BELOW_OBJ_LAYER icon = 'icons/obj/medical/chemical.dmi' - icon_state = "mixer0" - base_icon_state = "mixer" + icon_state = "chemmaster" + base_icon_state = "chemmaster" idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.2 resistance_flags = FIRE_PROOF | ACID_PROOF circuit = /obj/item/circuitboard/machine/chem_master - - /// Input reagents container + /// Icons for different percentages of buffer reagents + var/fill_icon = 'icons/obj/reagentfillings.dmi' + var/fill_icon_state = "chemmaster" + var/list/fill_icon_thresholds = list(10,20,30,40,50,60,70,80,90,100) + /// Inserted reagent container var/obj/item/reagent_containers/beaker - /// Pill bottle for newly created pills - var/obj/item/storage/pill_bottle/bottle - /// Whether separated reagents should be moved back to container or destroyed. 1 - move, 0 - destroy - var/mode = 1 - /// Decides what UI to show. If TRUE shows UI of CondiMaster, if FALSE - ChemMaster - var/condi = FALSE - /// Currently selected pill style - var/chosen_pill_style = 1 - /// Currently selected condiment bottle style - var/chosen_condi_style = CONDIMASTER_STYLE_AUTO - /// Current UI screen. On the moment of writing this comment there were two: 'home' - main screen, and 'analyze' - info about specific reagent - var/screen = "home" - /// Info to display on 'analyze' screen - var/analyze_vars[0] - /// List of available pill styles for UI - var/list/pill_styles - /// List of available condibottle styles for UI - var/list/condi_styles - /// Currently selected patch style - var/patch_style = DEFAULT_PATCH_STYLE - /// List of available patch styles for UI - var/list/patch_styles + /// Whether separated reagents should be moved back to container or destroyed. + var/transfer_mode = TRANSFER_MODE_MOVE + /// Whether reagent analysis screen is active + var/reagent_analysis_mode = FALSE + /// Reagent being analyzed + var/datum/reagent/analyzed_reagent + /// List of printable container types + var/list/printable_containers = list() + /// Container used by default to reset to (REF) + var/default_container + /// Selected printable container type (REF) + var/selected_container + /// Whether the machine has an option to suggest container + var/has_container_suggestion = FALSE + /// Whether to suggest container or not + var/do_suggest_container = FALSE + /// The container suggested by main reagent in the buffer + var/suggested_container + /// Whether the machine is busy with printing containers + var/is_printing = FALSE + /// Number of printed containers in the current printing cycle for UI progress bar + var/printing_progress + var/printing_total + /// Default duration of printing cycle + var/printing_speed = 0.75 SECONDS // Duration of animation + /// The amount of containers printed in one cycle + var/printing_amount = 1 /obj/machinery/chem_master/Initialize(mapload) create_reagents(100) - . = ..() + load_printable_containers() + default_container = REF(printable_containers[printable_containers[1]][1]) + selected_container = default_container + return ..() /obj/machinery/chem_master/Destroy() QDEL_NULL(beaker) - QDEL_NULL(bottle) return ..() -/obj/machinery/chem_master/RefreshParts() - . = ..() - reagents.maximum_volume = 0 - for(var/obj/item/reagent_containers/cup/beaker/B in component_parts) - reagents.maximum_volume += B.reagents.maximum_volume - -/obj/machinery/chem_master/ex_act(severity, target) - if(severity <= EXPLODE_LIGHT) - return FALSE +/obj/machinery/chem_master/on_deconstruction() + replace_beaker() return ..() -/obj/machinery/chem_master/contents_explosion(severity, target) - . = ..() - switch(severity) - if(EXPLODE_DEVASTATE) - if(beaker) - SSexplosions.high_mov_atom += beaker - if(bottle) - SSexplosions.high_mov_atom += bottle - if(EXPLODE_HEAVY) - if(beaker) - SSexplosions.med_mov_atom += beaker - if(bottle) - SSexplosions.med_mov_atom += bottle - if(EXPLODE_LIGHT) - if(beaker) - SSexplosions.low_mov_atom += beaker - if(bottle) - SSexplosions.low_mov_atom += bottle - -/obj/machinery/chem_master/handle_atom_del(atom/A) +/obj/machinery/chem_master/handle_atom_del(atom/deleted_atom) ..() - if(A == beaker) + if(deleted_atom == beaker) beaker = null - reagents.clear_reagents() - update_appearance() - else if(A == bottle) - bottle = null + update_appearance(UPDATE_ICON) -/obj/machinery/chem_master/update_icon_state() - icon_state = "[base_icon_state][beaker ? 1 : 0][(machine_stat & BROKEN) ? "_b" : (powered() ? null : "_nopower")]" - return ..() +/obj/machinery/chem_master/RefreshParts() + . = ..() + reagents.maximum_volume = 0 + for(var/obj/item/reagent_containers/cup/beaker/beaker in component_parts) + reagents.maximum_volume += beaker.reagents.maximum_volume + printing_amount = 0 + for(var/datum/stock_part/manipulator/manipulator in component_parts)//Monkestation Edit: We use manipulators instead of servos + printing_amount += manipulator.tier + +/obj/machinery/chem_master/update_appearance(updates=ALL) + . = ..() + if(panel_open || (machine_stat & (NOPOWER|BROKEN))) + set_light(0) + else + set_light(1, 1, "#fffb00") /obj/machinery/chem_master/update_overlays() . = ..() + if(!isnull(beaker)) + . += mutable_appearance(icon, base_icon_state + "_overlay_container") if(machine_stat & BROKEN) - . += "waitlight" + . += mutable_appearance(icon, base_icon_state + "_overlay_broken") + if(panel_open) + . += mutable_appearance(icon, base_icon_state + "_overlay_panel") -/obj/machinery/chem_master/blob_act(obj/structure/blob/B) - if (prob(50)) - qdel(src) + if(is_printing) + . += mutable_appearance(icon, base_icon_state + "_overlay_extruder_active") + else + . += mutable_appearance(icon, base_icon_state + "_overlay_extruder") + + // Screen overlay + if(!panel_open && !(machine_stat & (NOPOWER | BROKEN))) + var/screen_overlay = base_icon_state + "_overlay_screen" + if(reagent_analysis_mode) + screen_overlay += "_analysis" + else if(is_printing) + screen_overlay += "_active" + else if(reagents.total_volume > 0) + screen_overlay += "_main" + . += mutable_appearance(icon, screen_overlay) + . += emissive_appearance(icon, base_icon_state + "_overlay_lightmask", src, alpha = src.alpha) + + // Buffer reagents overlay + if(reagents.total_volume) + var/threshold = null + for(var/i in 1 to fill_icon_thresholds.len) + if(ROUND_UP(100 * reagents.total_volume / reagents.maximum_volume) >= fill_icon_thresholds[i]) + threshold = i + if(threshold) + var/fill_name = "[fill_icon_state][fill_icon_thresholds[threshold]]" + var/mutable_appearance/filling = mutable_appearance(fill_icon, fill_name) + filling.color = mix_color_from_reagents(reagents.reagent_list) + . += filling /obj/machinery/chem_master/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) return TOOL_ACT_TOOLTYPE_SUCCESS -/obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I)) +/obj/machinery/chem_master/attackby(obj/item/item, mob/user, params) + if(default_deconstruction_screwdriver(user, icon_state, icon_state, item)) + update_appearance(UPDATE_ICON) return - - else if(default_deconstruction_crowbar(I)) + if(default_deconstruction_crowbar(item)) return - - if(is_reagent_container(I) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - . = TRUE // no afterattack - if(panel_open) - to_chat(user, span_warning("You can't use the [src.name] while its panel is opened!")) - return - var/obj/item/reagent_containers/B = I - . = TRUE // no afterattack - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, span_notice("You add [B] to [src].")) - ui_interact(user) - update_appearance() - else if(!condi && istype(I, /obj/item/storage/pill_bottle)) - if(bottle) - to_chat(user, span_warning("A pill bottle is already loaded into [src]!")) - return - if(!user.transferItemToLoc(I, src)) - return - bottle = I - to_chat(user, span_notice("You add [I] into the dispenser slot.")) - ui_interact(user) - else - return ..() + if(is_reagent_container(item) && !(item.item_flags & ABSTRACT) && item.is_open_container()) + . = TRUE // No afterattack + var/obj/item/reagent_containers/beaker = item + replace_beaker(user, beaker) + if(!panel_open) + ui_interact(user) + return ..() /obj/machinery/chem_master/attack_hand_secondary(mob/user, list/modifiers) . = ..() @@ -154,62 +195,28 @@ /obj/machinery/chem_master/attack_ai_secondary(mob/user, list/modifiers) return attack_hand_secondary(user, modifiers) -/** - * Handles process of moving input reagents containers in/from machine - * - * When called checks for previously inserted beaker and gives it to user. - * Then, if new_beaker provided, places it into src.beaker. - * Returns `boolean`. TRUE if user provided (ignoring whether threre was any beaker change) and FALSE if not. - * - * Arguments: - * * user - Mob that initialized replacement, gets previously inserted beaker if there's any - * * new_beaker - New beaker to insert. Optional - */ +/// Insert new beaker and/or eject the inserted one /obj/machinery/chem_master/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(!user) + if(!user?.transferItemToLoc(new_beaker, src)) return FALSE if(beaker) try_put_in_hand(beaker, user) beaker = null if(new_beaker) beaker = new_beaker - update_appearance() + update_appearance(UPDATE_ICON) return TRUE -/obj/machinery/chem_master/on_deconstruction() - replace_beaker() - if(bottle) - bottle.forceMove(drop_location()) - adjust_item_drop_location(bottle) - bottle = null - return ..() - -/obj/machinery/chem_master/proc/load_styles() - //Calculate the span tags and ids fo all the available pill icons - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) - pill_styles = list() - for (var/x in 1 to PILL_STYLE_COUNT) - var/list/SL = list() - SL["id"] = x - SL["className"] = assets.icon_class_name("pill[x]") - pill_styles += list(SL) - - var/datum/asset/spritesheet/simple/patches_assets = get_asset_datum(/datum/asset/spritesheet/simple/patches) - patch_styles = list() - for (var/raw_patch_style in PATCH_STYLE_LIST) - //adding class_name for use in UI - var/list/patch_style = list() - patch_style["style"] = raw_patch_style - patch_style["class_name"] = patches_assets.icon_class_name(raw_patch_style) - patch_styles += list(patch_style) - - condi_styles = strip_condi_styles_to_icons(get_condi_styles()) +/obj/machinery/chem_master/proc/load_printable_containers() + printable_containers = list( + CAT_TUBES = GLOB.chem_master_containers[CAT_TUBES], + CAT_PILLS = GLOB.chem_master_containers[CAT_PILLS], + CAT_PATCHES = GLOB.chem_master_containers[CAT_PATCHES], + ) /obj/machinery/chem_master/ui_assets(mob/user) return list( - get_asset_datum(/datum/asset/spritesheet/simple/pills), - get_asset_datum(/datum/asset/spritesheet/simple/condiments), - get_asset_datum(/datum/asset/spritesheet/simple/patches), + get_asset_datum(/datum/asset/spritesheet/chemmaster) ) /obj/machinery/chem_master/ui_interact(mob/user, datum/tgui/ui) @@ -218,45 +225,97 @@ ui = new(user, src, "ChemMaster", name) ui.open() +/obj/machinery/chem_master/ui_static_data(mob/user) + var/list/data = list() + data["categories"] = list() + for(var/category in printable_containers) + var/container_data = list() + for(var/obj/item/reagent_containers/container as anything in printable_containers[category]) + container_data += list(list( + "icon" = sanitize_css_class_name("[container]"), + "ref" = REF(container), + "name" = initial(container.name), + "volume" = initial(container.volume), + )) + data["categories"]+= list(list( + "name" = category, + "containers" = container_data, + )) + + return data + /obj/machinery/chem_master/ui_data(mob/user) var/list/data = list() - data["isBeakerLoaded"] = beaker ? 1 : 0 - data["beakerCurrentVolume"] = beaker ? round(beaker.reagents.total_volume, 0.01) : null - data["beakerMaxVolume"] = beaker ? beaker.volume : null - data["mode"] = mode - data["condi"] = condi - data["screen"] = screen - data["analyzeVars"] = analyze_vars - data["chosenPillStyle"] = chosen_pill_style - data["chosenCondiStyle"] = chosen_condi_style - data["autoCondiStyle"] = CONDIMASTER_STYLE_AUTO - data["isPillBottleLoaded"] = bottle ? 1 : 0 - if(bottle) - data["pillBottleCurrentAmount"] = bottle.contents.len - data["pillBottleMaxAmount"] = bottle.atom_storage.max_slots - - var/beaker_contents[0] - if(beaker) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - var/chem_name = R.name - if(istype(R, /datum/reagent/ammonia/urine) && user.client?.prefs.read_preference(/datum/preference/toggle/prude_mode)) - chem_name = "Ammonia?" - beaker_contents.Add(list(list("name" = chem_name, "id" = ckey(R.name), "volume" = round(R.volume, 0.01)))) // list in a list because Byond merges the first list... - data["beakerContents"] = beaker_contents - - var/buffer_contents[0] - if(reagents.total_volume) - for(var/datum/reagent/N in reagents.reagent_list) - buffer_contents.Add(list(list("name" = N.name, "id" = ckey(N.name), "volume" = round(N.volume, 0.01)))) // ^ - data["bufferContents"] = buffer_contents - - //Calculated once since it'll never change - if(!pill_styles || !condi_styles || !patch_style || !patch_styles) - load_styles() - data["pillStyles"] = pill_styles - data["condiStyles"] = condi_styles - data["patch_style"] = patch_style - data["patch_styles"] = patch_styles + + data["reagentAnalysisMode"] = reagent_analysis_mode + if(reagent_analysis_mode && analyzed_reagent) + //Monkestation Addition: prude mode + var/chem_name = analyzed_reagent.name + if(istype(analyzed_reagent, /datum/reagent/ammonia/urine) && user.client?.prefs.read_preference(/datum/preference/toggle/prude_mode)) + chem_name = "Ammonia?" + //End Monkestation Addition + var/state + switch(analyzed_reagent.reagent_state) + if(SOLID) + state = "Solid" + if(LIQUID) + state = "Liquid" + if(GAS) + state = "Gas" + else + state = "Unknown" + data["analysisData"] = list( + "name" = chem_name, //Monkestation Edit: prude mode + "state" = state, + "pH" = analyzed_reagent.ph, + "color" = analyzed_reagent.color, + "description" = analyzed_reagent.description, + "purity" = analyzed_reagent.purity, + "metaRate" = analyzed_reagent.metabolization_rate, + "overdose" = analyzed_reagent.overdose_threshold, + "addictionTypes" = reagents.parse_addictions(analyzed_reagent), + ) + else + data["isPrinting"] = is_printing + data["printingProgress"] = printing_progress + data["printingTotal"] = printing_total + data["hasBeaker"] = beaker ? TRUE : FALSE + data["beakerCurrentVolume"] = beaker ? round(beaker.reagents.total_volume, 0.01) : null + data["beakerMaxVolume"] = beaker ? beaker.volume : null + var/list/beaker_contents = list() + if(beaker) + for(var/datum/reagent/reagent in beaker.reagents.reagent_list) + beaker_contents.Add(list(list("name" = reagent.name, "ref" = REF(reagent), "volume" = round(reagent.volume, 0.01)))) + data["beakerContents"] = beaker_contents + + var/list/buffer_contents = list() + if(reagents.total_volume) + for(var/datum/reagent/reagent in reagents.reagent_list) + buffer_contents.Add(list(list("name" = reagent.name, "ref" = REF(reagent), "volume" = round(reagent.volume, 0.01)))) + data["bufferContents"] = buffer_contents + data["bufferCurrentVolume"] = round(reagents.total_volume, 0.01) + data["bufferMaxVolume"] = reagents.maximum_volume + + data["transferMode"] = transfer_mode + + data["hasContainerSuggestion"] = !!has_container_suggestion + if(has_container_suggestion) + data["doSuggestContainer"] = !!do_suggest_container + if(do_suggest_container) + if(reagents.total_volume > 0) + var/master_reagent = reagents.get_master_reagent() + suggested_container = get_suggested_container(master_reagent) + else + suggested_container = default_container + data["suggestedContainer"] = suggested_container + selected_container = suggested_container + else if (isnull(selected_container)) + selected_container = default_container + + data["selectedContainerRef"] = selected_container + var/obj/item/reagent_containers/container = locate(selected_container) + data["selectedContainerVolume"] = initial(container.volume) + return data /obj/machinery/chem_master/ui_act(action, params) @@ -268,377 +327,171 @@ replace_beaker(usr) return TRUE - if(action == "ejectPillBottle") - if(!bottle) - return FALSE - bottle.forceMove(drop_location()) - adjust_item_drop_location(bottle) - bottle = null - return TRUE - if(action == "transfer") - var/reagent = GLOB.name2reagent[params["id"]] + var/reagent_ref = params["reagentRef"] var/amount = text2num(params["amount"]) - var/to_container = params["to"] - // Custom amount - if (amount == -1) - amount = text2num(input( - "Enter the amount you want to transfer:", - name, "")) - if (amount == null || amount <= 0) - return FALSE - use_power(active_power_usage) - if (to_container == "beaker" && !mode) - reagents.remove_reagent(reagent, amount) - return TRUE - if (!beaker) - return FALSE - if (to_container == "buffer") - var/datum/reagent/R = beaker.reagents.get_reagent(reagent) - if(!check_reactions(R, beaker.reagents)) - return FALSE - beaker.reagents.trans_id_to(src, reagent, amount) - return TRUE - if (to_container == "beaker" && mode) - var/datum/reagent/R = reagents.get_reagent(reagent) - if(!check_reactions(R, reagents)) - return FALSE - reagents.trans_id_to(beaker, reagent, amount) + var/target = params["target"] + return transfer_reagent(reagent_ref, amount, target) + + if(action == "toggleTransferMode") + transfer_mode = !transfer_mode + return TRUE + + if(action == "analyze") + analyzed_reagent = locate(params["reagentRef"]) + if(analyzed_reagent) + reagent_analysis_mode = TRUE + update_appearance(UPDATE_ICON) return TRUE - return FALSE - if(action == "toggleMode") - mode = !mode + if(action == "stopAnalysis") + reagent_analysis_mode = FALSE + analyzed_reagent = null + update_appearance(UPDATE_ICON) + return TRUE + + if(action == "stopPrinting") + is_printing = FALSE return TRUE - if(action == "pillStyle") - var/id = text2num(params["id"]) - chosen_pill_style = id + if(action == "toggleContainerSuggestion") + do_suggest_container = !do_suggest_container return TRUE - if(action == "condiStyle") - chosen_condi_style = params["id"] + if(action == "selectContainer") + selected_container = params["ref"] return TRUE if(action == "create") if(reagents.total_volume == 0) return FALSE - var/item_type = params["type"] - // Get amount of items - var/amount = text2num(params["amount"]) - if(amount == null) - amount = text2num(input(usr, - "Max 10. Buffer content will be split evenly.", - "How many to make?", 1)) - amount = clamp(round(amount), 0, 10) - if (amount <= 0) + var/item_count = text2num(params["itemCount"]) + if(item_count <= 0) return FALSE - // Get units per item - var/vol_each = text2num(params["volume"]) - var/vol_each_text = params["volume"] - var/vol_each_max = reagents.total_volume / amount - var/list/style + create_containers(item_count) + return TRUE + +/// Create N selected containers with reagents from buffer split between them +/obj/machinery/chem_master/proc/create_containers(item_count = 1) + var/obj/item/reagent_containers/container_style = locate(selected_container) + var/is_pill_subtype = ispath(container_style, /obj/item/reagent_containers/pill) + var/volume_in_each = reagents.total_volume / item_count + var/printing_amount_current = is_pill_subtype ? printing_amount * 2 : printing_amount + + // Generate item name + var/item_name_default = initial(container_style.name) + if(!(initial(container_style.reagent_flags) & OPENCONTAINER)) // Closed containers get reagent name and units in the name + item_name_default = "[reagents.get_master_reagent_name()] [item_name_default] ([volume_in_each]u)" + var/item_name = tgui_input_text(usr, + "Container name", + "Name", + item_name_default, + MAX_NAME_LEN) + + if(!item_name || !reagents.total_volume || QDELETED(src) || !usr.can_perform_action(src, ALLOW_SILICON_REACH)) + return FALSE + + // Print and fill containers + is_printing = TRUE + update_appearance(UPDATE_ICON) + printing_progress = 0 + printing_total = item_count + while(item_count > 0) + if(!is_printing) + break use_power(active_power_usage) - if (item_type == "pill") - vol_each_max = min(50, vol_each_max) - else if (item_type == "patch") - vol_each_max = min(40, vol_each_max) - else if (item_type == "bottle") - vol_each_max = min(30, vol_each_max) - else if (item_type == "condimentPack") - vol_each_max = min(10, vol_each_max) - else if (item_type == "condimentBottle") - var/list/styles = get_condi_styles() - if (chosen_condi_style == CONDIMASTER_STYLE_AUTO || !(chosen_condi_style in styles)) - style = guess_condi_style(reagents) - else - style = styles[chosen_condi_style] - vol_each_max = min(50, vol_each_max) - else - return FALSE - if(vol_each_text == "auto") - vol_each = vol_each_max - if(vol_each == null) - vol_each = text2num(input(usr, - "Maximum [vol_each_max] units per item.", - "How many units to fill?", - vol_each_max)) - vol_each = round(clamp(vol_each, 0, vol_each_max), 0.01) - if(vol_each <= 0) - return FALSE - // Get item name - var/name = strip_html(params["name"], limit = 100) - var/name_has_units = item_type == "pill" || item_type == "patch" - if(!name) - var/name_default - if (style && style["name"] && !style["generate_name"]) - name_default = style["name"] - else - name_default = reagents.get_master_reagent_name() - if (name_has_units) - name_default += " ([vol_each]u)" - name = tgui_input_text(usr, - "Give it a name!", - "Name", - name_default, - MAX_NAME_LEN) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.can_perform_action(src, ALLOW_SILICON_REACH)) - return FALSE - // Start filling - if(item_type == "pill") - var/obj/item/reagent_containers/pill/P - var/target_loc = drop_location() - var/drop_threshold = INFINITY - if(bottle) - if(bottle.atom_storage) - drop_threshold = bottle.atom_storage.max_slots - bottle.contents.len - target_loc = bottle - for(var/i in 1 to amount) - if(i-1 < drop_threshold) - P = new/obj/item/reagent_containers/pill(target_loc) - else - P = new/obj/item/reagent_containers/pill(drop_location()) - P.name = trim("[name] pill") - if(chosen_pill_style == RANDOM_PILL_STYLE) - P.icon_state ="pill[rand(1,21)]" - else - P.icon_state = "pill[chosen_pill_style]" - if(P.icon_state == "pill4") - P.desc = "A tablet or capsule, but not just any, a red one, one taken by the ones not scared of knowledge, freedom, uncertainty and the brutal truths of reality." - adjust_item_drop_location(P) - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "patch") - var/obj/item/reagent_containers/pill/patch/P - for(var/i in 1 to amount) - P = new/obj/item/reagent_containers/pill/patch(drop_location()) - P.name = trim("[name] patch") - P.icon_state = patch_style - adjust_item_drop_location(P) - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "bottle") - var/obj/item/reagent_containers/cup/bottle/P - for(var/i in 1 to amount) - P = new/obj/item/reagent_containers/cup/bottle(drop_location()) - P.name = trim("[name] bottle") - adjust_item_drop_location(P) - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "condimentPack") - var/obj/item/reagent_containers/condiment/pack/P - for(var/i in 1 to amount) - P = new/obj/item/reagent_containers/condiment/pack(drop_location()) - P.originalname = name - P.name = trim("[name] pack") - P.desc = "A small condiment pack. The label says it contains [name]." - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "condimentBottle") - var/obj/item/reagent_containers/condiment/P - for(var/i in 1 to amount) - P = new/obj/item/reagent_containers/condiment(drop_location()) - if (style) - apply_condi_style(P, style) - P.renamedByPlayer = TRUE - P.name = name - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE + stoplag(printing_speed) + for(var/i in 1 to printing_amount_current) + if(!item_count) + continue + var/obj/item/reagent_containers/item = new container_style(drop_location()) + adjust_item_drop_location(item) + item.name = item_name + item.reagents.clear_reagents() + reagents.trans_to(item, volume_in_each, transfered_by = src) + printing_progress++ + item_count-- + update_appearance(UPDATE_ICON) + is_printing = FALSE + update_appearance(UPDATE_ICON) + return TRUE + +/// Transfer reagents to specified target from the opposite source +/obj/machinery/chem_master/proc/transfer_reagent(reagent_ref, amount, target) + if (amount == -1) + amount = text2num(input("Enter the amount you want to transfer:", name, "")) + if (amount == null || amount <= 0) + return FALSE + if (!beaker && target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_MOVE) + return FALSE + var/datum/reagent/reagent = locate(reagent_ref) + if (!reagent) return FALSE - if(action == "analyze") - var/datum/reagent/analyzed_reagent = GLOB.name2reagent[params["id"]] - if(analyzed_reagent) - var/state = "Unknown" - if(initial(analyzed_reagent.reagent_state) == SOLID) - state = "Solid" - else if(initial(analyzed_reagent.reagent_state) == LIQUID) - state = "Liquid" - else if(initial(analyzed_reagent.reagent_state) == GAS) - state = "Gas" - var/metabolization_rate = initial(analyzed_reagent.metabolization_rate) * (60 / SSMOBS_DT) - analyze_vars = list("name" = initial(analyzed_reagent.name), "state" = state, "color" = initial(analyzed_reagent.color), "description" = initial(analyzed_reagent.description), "metaRate" = metabolization_rate, "overD" = initial(analyzed_reagent.overdose_threshold), "pH" = initial(analyzed_reagent.ph)) - screen = "analyze" - return TRUE + use_power(active_power_usage) - if(action == "goScreen") - screen = params["screen"] + if (target == TARGET_BUFFER) + if(!check_reactions(reagent, beaker.reagents)) + return FALSE + beaker.reagents.trans_id_to(src, reagent.type, amount) + update_appearance(UPDATE_ICON) return TRUE - if(action == "change_patch_style") - patch_style = params["patch_style"] + if (target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_DESTROY) + reagents.remove_reagent(reagent.type, amount) + update_appearance(UPDATE_ICON) + return TRUE + if (target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_MOVE) + if(!check_reactions(reagent, reagents)) + return FALSE + reagents.trans_id_to(beaker, reagent.type, amount) + update_appearance(UPDATE_ICON) return TRUE return FALSE -/obj/machinery/chem_master/adjust_item_drop_location(atom/movable/AM) // Special version for chemmasters and condimasters - if (AM == beaker) - AM.pixel_x = AM.base_pixel_x - 8 - AM.pixel_y = AM.base_pixel_y + 8 - return null - else if (AM == bottle) - if (length(bottle.contents)) - AM.pixel_x = AM.base_pixel_x - 13 - else - AM.pixel_x = AM.base_pixel_x - 7 - AM.pixel_y = AM.base_pixel_y - 8 - return null - else - var/md5 = md5(AM.name) - for (var/i in 1 to 32) - . += hex2num(md5[i]) - . = . % 9 - AM.pixel_x = AM.base_pixel_x + ((.%3)*6) - AM.pixel_y = AM.base_pixel_y - 8 + (round( . / 3)*8) - -/** - * Translates styles data into UI compatible format - * - * Expects to receive list of availables condiment styles in its complete format, and transforms them in simplified form with enough data to get UI going. - * Returns list(list("id" = , "className" = , "title" = ),..). - * - * Arguments: - * * styles - List of styles for condiment bottles in internal format: [/obj/machinery/chem_master/proc/get_condi_styles] - */ -/obj/machinery/chem_master/proc/strip_condi_styles_to_icons(list/styles) - var/list/icons = list() - for (var/s in styles) - if (styles[s] && styles[s]["class_name"]) - var/list/icon = list() - var/list/style = styles[s] - icon["id"] = s - icon["className"] = style["class_name"] - icon["title"] = "[style["name"]]\n[style["desc"]]" - icons += list(icon) - - return icons - -/** - * Defines and provides list of available condiment bottle styles - * - * Uses typelist() for styles storage after initialization. - * For fallback style must provide style with key (const) CONDIMASTER_STYLE_FALLBACK - * Returns list( - * = list( - * "icon_state" = , - * "name" = , - * "desc" = , - * ?"generate_name" = , - * ?"icon_empty" = , - * ?"fill_icon_thresholds" = , - * ?"inhand_icon_state" = , - * ?"lefthand_file" = , - * ?"righthand_file" = , - * ), - * .. - * ) - * - */ -/obj/machinery/chem_master/proc/get_condi_styles() - var/list/styles = typelist("condi_styles") - if (!styles.len) - //Possible_states has the reagent type as key and a list of, in order, the icon_state, the name and the desc as values. Was used in the condiment/on_reagent_change(changetype) to change names, descs and sprites. - styles += list( - CONDIMASTER_STYLE_FALLBACK = list("icon_state" = "emptycondiment", "icon_empty" = "", "name" = "condiment bottle", "desc" = "Just your average condiment bottle.", "fill_icon_thresholds" = list(0, 10, 25, 50, 75, 100), "generate_name" = TRUE), - "enzyme" = list("icon_state" = "enzyme", "icon_empty" = "", "name" = "universal enzyme bottle", "desc" = "Used in cooking various dishes."), - "flour" = list("icon_state" = "flour", "icon_empty" = "", "name" = "flour sack", "desc" = "A big bag of flour. Good for baking!"), - "mayonnaise" = list("icon_state" = "mayonnaise", "icon_empty" = "", "name" = "mayonnaise jar", "desc" = "An oily condiment made from egg yolks."), - "milk" = list("icon_state" = "milk", "icon_empty" = "", "name" = "space milk", "desc" = "It's milk. White and nutritious goodness!"), - "blackpepper" = list("icon_state" = "peppermillsmall", "inhand_icon_state" = "", "icon_empty" = "emptyshaker", "name" = "pepper mill", "desc" = "Often used to flavor food or make people sneeze."), - "rice" = list("icon_state" = "rice", "icon_empty" = "", "name" = "rice sack", "desc" = "A big bag of rice. Good for cooking!"), - "sodiumchloride" = list("icon_state" = "saltshakersmall", "inhand_icon_state" = "", "icon_empty" = "emptyshaker", "name" = "salt shaker", "desc" = "Salt. From dead crew, presumably."), - "soymilk" = list("icon_state" = "soymilk", "icon_empty" = "", "name" = "soy milk", "desc" = "It's soy milk. White and nutritious goodness!"), - "soysauce" = list("icon_state" = "soysauce", "inhand_icon_state" = "", "icon_empty" = "", "name" = "soy sauce bottle", "desc" = "A salty soy-based flavoring."), - "sugar" = list("icon_state" = "sugar", "icon_empty" = "", "name" = "sugar sack", "desc" = "Tasty spacey sugar!"), - "ketchup" = list("icon_state" = "ketchup", "icon_empty" = "", "name" = "ketchup bottle", "desc" = "A tomato slurry in a tall plastic bottle. Somehow still vaguely American."), - "capsaicin" = list("icon_state" = "hotsauce", "icon_empty" = "", "name" = "hotsauce bottle", "desc" = "You can almost TASTE the stomach ulcers!"), - "frostoil" = list("icon_state" = "coldsauce", "icon_empty" = "", "name" = "coldsauce bottle", "desc" = "Leaves the tongue numb from its passage."), - "cornoil" = list("icon_state" = "oliveoil", "icon_empty" = "", "name" = "corn oil bottle", "desc" = "A delicious oil used in cooking. Made from corn."), - "bbqsauce" = list("icon_state" = "bbqsauce", "icon_empty" = "", "name" = "bbq sauce bottle", "desc" = "Hand wipes not included."), - "peanut_butter" = list("icon_state" = "peanutbutter", "icon_empty" = "", "name" = "peanut butter jar", "desc" = "A creamy paste made from ground peanuts."), - "honey" = list("icon_state" = "honey", "icon_empty" = "", "name" = "honey bottle", "desc" = "A cheerful bear-shaped bottle of tasty honey."), - "cherryjelly" = list("icon_state" = "cherryjelly", "icon_empty" = "", "name" = "cherry jelly jar", "desc" = "A jar of super-sweet cherry jelly."), - ) - var/list/carton_in_hand = list( - "inhand_icon_state" = "carton", - "lefthand_file" = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi', - "righthand_file" = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - ) - for (var/style_reagent in list("flour", "milk", "rice", "soymilk", "sugar")) - if (style_reagent in styles) - styles[style_reagent] += carton_in_hand - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/condiments) - for (var/reagent in styles) - styles[reagent]["class_name"] = assets.icon_class_name(reagent) - return styles - -/** - * Provides condiment bottle style based on reagents. - * - * Gets style from available by key, using last part of main reagent type (eg. "rice" for /datum/reagent/consumable/rice) as key. - * If not available returns fallback style, or null if no such thing. - * Returns list that is one of condibottle styles from [/obj/machinery/chem_master/proc/get_condi_styles] - */ -/obj/machinery/chem_master/proc/guess_condi_style(datum/reagents/reagents) - var/list/styles = get_condi_styles() - if (reagents.reagent_list.len > 0) - var/main_reagent = reagents.get_master_reagent_id() - if (main_reagent) - var/list/path = splittext("[main_reagent]", "/") - main_reagent = path[path.len] - if(main_reagent in styles) - return styles[main_reagent] - return styles[CONDIMASTER_STYLE_FALLBACK] - -/** - * Applies style to condiment bottle. - * - * Applies props provided in "style" assuming that "container" is freshly created with no styles applied before. - * User specified name for bottle applied after this method during bottle creation, - * so container.name overwritten here for consistency rather than with some purpose in mind. - * - * Arguments: - * * container - condiment bottle that gets style applied to it - * * style - assoc list, must probably one from [/obj/machinery/chem_master/proc/get_condi_styles] - */ -/obj/machinery/chem_master/proc/apply_condi_style(obj/item/reagent_containers/condiment/container, list/style) - container.name = style["name"] - container.desc = style["desc"] - container.icon_state = style["icon_state"] - container.icon_empty = style["icon_empty"] - container.fill_icon_thresholds = style["fill_icon_thresholds"] - if ("inhand_icon_state" in style) - container.inhand_icon_state = style["inhand_icon_state"] - if (style["lefthand_file"] || style["righthand_file"]) - container.lefthand_file = style["lefthand_file"] - container.righthand_file = style["righthand_file"] - - -//Checks to see if the target reagent is being created (reacting) and if so prevents transfer -//Only prevents reactant from being moved so that people can still manlipulate input reagents +/// Checks to see if the target reagent is being created (reacting) and if so prevents transfer +/// Only prevents reactant from being moved so that people can still manlipulate input reagents /obj/machinery/chem_master/proc/check_reactions(datum/reagent/reagent, datum/reagents/holder) if(!reagent) return FALSE var/canMove = TRUE - for(var/e in holder.reaction_list) - var/datum/equilibrium/E = e - if(E.reaction.reaction_flags & REACTION_COMPETITIVE) + for(var/datum/equilibrium/equilibrium as anything in holder.reaction_list) + if(equilibrium.reaction.reaction_flags & REACTION_COMPETITIVE) continue - for(var/result in E.reaction.required_reagents) - var/datum/reagent/R = result - if(R == reagent.type) + for(var/datum/reagent/result as anything in equilibrium.reaction.required_reagents) + if(result == reagent.type) canMove = FALSE if(!canMove) - say("Cannot move arrested chemical reaction reagents!") + say("Cannot move reagent during reaction!") return canMove -/** - * Machine that allows to identify and separate reagents in fitting container - * as well as to create new containers with separated reagents in it. - * - * All logic related to this is in [/obj/machinery/chem_master] and condimaster specific UI enabled by "condi = TRUE" - */ +/// Retrieve REF to the best container for provided reagent +/obj/machinery/chem_master/proc/get_suggested_container(datum/reagent/reagent) + var/preferred_container = reagent.default_container + for(var/category in printable_containers) + for(var/container in printable_containers[category]) + if(container == preferred_container) + return REF(container) + return default_container + +/obj/machinery/chem_master/examine(mob/user) + . = ..() + if(in_range(user, src) || isobserver(user)) + . += span_notice("The status display reads:
Reagent buffer capacity: [reagents.maximum_volume] units.
Number of containers printed at once increased by [100 * (printing_amount / initial(printing_amount)) - 100]%.") + /obj/machinery/chem_master/condimaster name = "CondiMaster 3000" desc = "Used to create condiments and other cooking supplies." - condi = TRUE + icon_state = "condimaster" + has_container_suggestion = TRUE + +/obj/machinery/chem_master/condimaster/load_printable_containers() + printable_containers = list( + CAT_CONDIMENTS = GLOB.chem_master_containers[CAT_CONDIMENTS], + ) + +#undef TRANSFER_MODE_DESTROY +#undef TRANSFER_MODE_MOVE +#undef TARGET_BEAKER +#undef TARGET_BUFFER diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 2379ba3baefb3a..d67449a7fb918f 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -200,14 +200,14 @@ use_power(active_power_usage) adv_disease = adv_disease.Copy() var/list/data = list("viruses" = list(adv_disease)) - var/obj/item/reagent_containers/cup/bottle/bottle = new(drop_location()) - bottle.name = "[adv_disease.name] culture bottle" - bottle.desc = "A small bottle. Contains [adv_disease.agent] culture in synthblood medium." + var/obj/item/reagent_containers/cup/tube/bottle = new(drop_location()) + bottle.name = "[adv_disease.name] culture tube" + bottle.desc = "A small test tube containing [adv_disease.agent] culture in synthblood medium." bottle.reagents.add_reagent(/datum/reagent/blood, 20, data) wait = TRUE update_appearance() var/turf/source_turf = get_turf(src) - log_virus("A culture bottle was printed for the virus [adv_disease.admin_details()] at [loc_name(source_turf)] by [key_name(usr)]") + log_virus("A culture tube was printed for the virus [adv_disease.admin_details()] at [loc_name(source_turf)] by [key_name(usr)]") addtimer(CALLBACK(src, PROC_REF(reset_replicator_cooldown)), 5 SECONDS) return TRUE @@ -222,8 +222,8 @@ use_power(active_power_usage) var/id = index var/datum/disease/disease = SSdisease.archive_diseases[id] - var/obj/item/reagent_containers/cup/bottle/bottle = new(drop_location()) - bottle.name = "[disease.name] vaccine bottle" + var/obj/item/reagent_containers/cup/tube/bottle = new(drop_location()) + bottle.name = "[disease.name] vaccine tube" bottle.reagents.add_reagent(/datum/reagent/vaccine, 15, list(id)) wait = TRUE update_appearance() diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 6c0d47f2737516..4c000052b996dd 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -169,7 +169,7 @@ penetrates_skin = NONE var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - default_container = /obj/item/reagent_containers/condiment/quality_oil + default_container = /obj/item/reagent_containers/condiment/cooking_oil turf_exposure = TRUE /datum/reagent/consumable/cooking_oil/expose_obj(obj/exposed_obj, reac_volume) @@ -540,6 +540,7 @@ color = "#302000" // rgb: 48, 32, 0 taste_description = "slime" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + default_container = /obj/item/reagent_containers/condiment/cooking_oil turf_exposure = TRUE /datum/reagent/consumable/cornoil/expose_turf(turf/open/exposed_turf, reac_volume) diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index 28db9519a016a2..55b78626c23e8b 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -9,7 +9,7 @@ name = "condiment bottle" desc = "Just your average condiment bottle." icon = 'icons/obj/food/containers.dmi' - icon_state = "emptycondiment" + icon_state = "bottle" inhand_icon_state = "beer" //Generic held-item sprite until unique ones are made. lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/drinks_righthand.dmi' @@ -273,6 +273,13 @@ list_reagents = list(/datum/reagent/consumable/vinegar = 50) fill_icon_thresholds = null +/obj/item/reagent_containers/condiment/cooking_oil + name = "cooking oil" + desc = "For all your deep-frying needs." + icon_state = "cooking_oil" + list_reagents = list(/datum/reagent/consumable/cooking_oil = 50) + fill_icon_thresholds = null + /obj/item/reagent_containers/condiment/quality_oil name = "quality oil" desc = "For the fancy chef inside everyone." @@ -378,6 +385,19 @@ icon_state = "condi_chocolate" list_reagents = list(/datum/reagent/consumable/choccyshake = 10) + +/obj/item/reagent_containers/condiment/hotsauce + name = "hotsauce bottle" + desc= "You can almost TASTE the stomach ulcers!" + icon_state = "hotsauce" + list_reagents = list(/datum/reagent/consumable/capsaicin = 50) + +/obj/item/reagent_containers/condiment/coldsauce + name = "coldsauce bottle" + desc= "Leaves the tongue numb from its passage." + icon_state = "coldsauce" + list_reagents = list(/datum/reagent/consumable/frostoil = 50) + //Food packs. To easily apply deadly toxi... delicious sauces to your food! /obj/item/reagent_containers/condiment/pack diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 58327a74a307d7..c836ffa3682ce8 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -615,3 +615,15 @@ volume = 240 icon_state = "coffeepot_bluespace" fill_icon_thresholds = list(0) + +///Test tubes created by chem master and pandemic and placed in racks +/obj/item/reagent_containers/cup/tube + name = "tube" + desc = "A small test tube." + icon_state = "test_tube" + fill_icon_state = "tube" + inhand_icon_state = "atoxinbottle" + worn_icon_state = "test_tube" + possible_transfer_amounts = list(5, 10, 15, 30) + volume = 30 + fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100) diff --git a/code/modules/reagents/reagent_containers/cups/bottle.dm b/code/modules/reagents/reagent_containers/cups/bottle.dm index 8fb3012a703a7e..9394124c9d2a48 100644 --- a/code/modules/reagents/reagent_containers/cups/bottle.dm +++ b/code/modules/reagents/reagent_containers/cups/bottle.dm @@ -7,8 +7,8 @@ fill_icon_state = "bottle" inhand_icon_state = "atoxinbottle" worn_icon_state = "bottle" - possible_transfer_amounts = list(5, 10, 15, 25, 30) - volume = 30 + possible_transfer_amounts = list(5, 10, 15, 25, 50) + volume = 50 fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100) /obj/item/reagent_containers/cup/bottle/Initialize(mapload) @@ -62,7 +62,6 @@ /obj/item/reagent_containers/cup/bottle/phlogiston name = "Phlogiston bottle" desc = "A small bottle of Phlogiston, that will set you on fire if used." - volume = 50 list_reagents = list(/datum/reagent/phlogiston = 30) /obj/item/reagent_containers/cup/bottle/ammoniated_mercury @@ -442,7 +441,6 @@ fill_icon_state = "syrup" fill_icon_thresholds = list(0, 20, 40, 60, 80, 100) possible_transfer_amounts = list(5, 10) - volume = 50 amount_per_transfer_from_this = 5 spillable = FALSE ///variable to tell if the bottle can be refilled diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm index c6f9061316bdc2..62fcde5eff4ad2 100644 --- a/code/modules/reagents/reagent_containers/patch.dm +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -44,3 +44,46 @@ desc = "Helps with brute and burn injuries. Slightly toxic." list_reagents = list(/datum/reagent/medicine/c2/synthflesh = 20) icon_state = "bandaid_both" + +// Patch styles for chem master + +/obj/item/reagent_containers/pill/patch/style + icon_state = "bandaid_blank" +/obj/item/reagent_containers/pill/patch/style/brute + icon_state = "bandaid_brute_2" +/obj/item/reagent_containers/pill/patch/style/burn + icon_state = "bandaid_burn_2" +/obj/item/reagent_containers/pill/patch/style/bruteburn + icon_state = "bandaid_both" +/obj/item/reagent_containers/pill/patch/style/toxin + icon_state = "bandaid_toxin_2" +/obj/item/reagent_containers/pill/patch/style/oxygen + icon_state = "bandaid_suffocation_2" +/obj/item/reagent_containers/pill/patch/style/omni + icon_state = "bandaid_mix" +/obj/item/reagent_containers/pill/patch/style/bruteplus + icon_state = "bandaid_brute" +/obj/item/reagent_containers/pill/patch/style/burnplus + icon_state = "bandaid_burn" +/obj/item/reagent_containers/pill/patch/style/toxinplus + icon_state = "bandaid_toxin" +/obj/item/reagent_containers/pill/patch/style/oxygenplus + icon_state = "bandaid_suffocation" +/obj/item/reagent_containers/pill/patch/style/monkey + icon_state = "bandaid_monke" +/obj/item/reagent_containers/pill/patch/style/clown + icon_state = "bandaid_clown" +/obj/item/reagent_containers/pill/patch/style/one + icon_state = "bandaid_1" +/obj/item/reagent_containers/pill/patch/style/two + icon_state = "bandaid_2" +/obj/item/reagent_containers/pill/patch/style/three + icon_state = "bandaid_3" +/obj/item/reagent_containers/pill/patch/style/four + icon_state = "bandaid_4" +/obj/item/reagent_containers/pill/patch/style/exclamation + icon_state = "bandaid_exclaimationpoint" +/obj/item/reagent_containers/pill/patch/style/question + icon_state = "bandaid_questionmark" +/obj/item/reagent_containers/pill/patch/style/colonthree + icon_state = "bandaid_colonthree" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 74ee4a0d73fd4d..e65d5ac5c46e45 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -317,3 +317,54 @@ icon_state = "pill8" list_reagents = list(/datum/reagent/iron = 30) rename_with_volume = TRUE + +// Pill styles for chem master + +/obj/item/reagent_containers/pill/style + icon_state = "pill0" +/obj/item/reagent_containers/pill/style/purplered + icon_state = "pill1" +/obj/item/reagent_containers/pill/style/greenwhite + icon_state = "pill2" +/obj/item/reagent_containers/pill/style/teal + icon_state = "pill3" +/obj/item/reagent_containers/pill/style/red + icon_state = "pill4" +/obj/item/reagent_containers/pill/style/redwhite + icon_state = "pill5" +/obj/item/reagent_containers/pill/style/tealbrown + icon_state = "pill6" +/obj/item/reagent_containers/pill/style/yellowflat + icon_state = "pill7" +/obj/item/reagent_containers/pill/style/tealflat + icon_state = "pill8" +/obj/item/reagent_containers/pill/style/whiteflat + icon_state = "pill9" +/obj/item/reagent_containers/pill/style/purpleflat + icon_state = "pill10" +/obj/item/reagent_containers/pill/style/limelat + icon_state = "pill11" +/obj/item/reagent_containers/pill/style/redflat + icon_state = "pill12" +/obj/item/reagent_containers/pill/style/greenpurpleflat + icon_state = "pill13" +/obj/item/reagent_containers/pill/style/yellowpurpleflat + icon_state = "pill14" +/obj/item/reagent_containers/pill/style/redyellowflat + icon_state = "pill15" +/obj/item/reagent_containers/pill/style/bluetealflat + icon_state = "pill16" +/obj/item/reagent_containers/pill/style/greenlimeflat + icon_state = "pill17" +/obj/item/reagent_containers/pill/style/white + icon_state = "pill18" +/obj/item/reagent_containers/pill/style/whitered + icon_state = "pill19" +/obj/item/reagent_containers/pill/style/purpleyellow + icon_state = "pill20" +/obj/item/reagent_containers/pill/style/blackwhite + icon_state = "pill21" +/obj/item/reagent_containers/pill/style/limewhite + icon_state = "pill22" +/obj/item/reagent_containers/pill/style/happy + icon_state = "pill_happy" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index b4a3ddfe36db74..09e1a2f1ec9c8a 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -298,7 +298,7 @@ "swab", "syringe", "xlarge_beaker", - "vial", + "tube", "synth_eyes", "synth_tongue", "synth_liver", diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index 949c589225f0962000f091434168d033d93cf12d..aea93b956fc3b5768bfe283e2d3d86f9c99d8d32 100644 GIT binary patch literal 23459 zcmb5WcUTia`!>2X0qG*Wi-?N!-VqQ`kS-uC6b0$M6M{$)>7t@^1O%jnA{`QXk={F@ zw*aA+0Lh8(`+ev9bFSZa&UG!zW-~MU%ri6hQ|8`8>uRf0+-ANF006~v4OM*rzzfCw zS&`hr-KqRgCJzAk3xS3v-l}iCY&{*^y&c?K0l+^!BV|Z?RfxK4XwN{^y_7nC7p@}6 zH~fj9DQsP8ti!CEwk!GD!Aa1=aPR6K(3x)0*AUTaI8%Zmh+Yu|k(Z8Bo>TylyGh{o)roON#&&I4IB_?C~n>IrI;UVA= z&(>{8L5RXX|BOY#Y63p(G_0iva@O9eXGxq3o#$^*@O}?^y3f)BCa&k$QY+J={>uFF zd#4N*?YJ4L=0d?5Y7(I0QqayS0l%V6_t&WLBV4H-))md|bWLAf67vKLyGom<8& z2DOdeCD1^HC$IRo%cyV37dfFR^ZJgMCI;cUM3oXn<+Jp!y$Z`0^n%$!!^=$zwclRG z@~kaUg@2(_kbW!y@$Mw}(bYPl|Kc*8dyuU&;LoFaek^x~Nde}dS6ia**|S#4&YJ0x z$zq3lJ2IaqqY_P7fIXMt@o9O|E`zyk_uD;{rEF4aNZR2u3Ry}c(jRC8DF~nT_O*p< z{;}l6mqC{FM;Wy&1~P6ozr@^aUv4#J{TRKJRXFo``DxtazWx0HsITg=NbEaH1kC`0 ztLibE@Xt#lmXTm8)OWsjh8UK*8%62}3mh>kj-~U)8SH zdKHubr|E~6+E;vl6x$}=M+-SJVDKye5RzGBO^a*(*8Etg*uIrQU0GhNN8-N7^)Kq- zCa-%ksI&KsKF=yY+#A1T*FkYkIarHvL16@2g*kANMzSSa0Kbd4(rfpqctyEr4vB3jjEQ=c-Q){nK|d0)ofKXS*Q=5A)wT zXy&k3yf?aCH>^*jM^8g%=uTi*CM&=IT|!dM$MiIZHWor*Km8|=pTa&C)|oRTvYFC6 zjHnqN^xlGveN#?pf@tZa_TCrm)%xrpJ9K{hL+7)X_K~LDgCVa$FKulgjFaSlIDV4Z z=o|RAH^ilX_LLl~x18{Jju6KN1moMw>qUR(vUaa-x`}W}MY>IwzweXwC+XeHAT#b` zacj~`L1l50xNH~sMtwGb^XDOe=j z89>3po?c#hmX`5HN1p#FkwG<|uy#DSUdW?Fox$>oQt7wvRga(i#i@hf+RCE;jpLF& znlC|cZOZKm{lXk^Vytqyng!1UxixVU%@{*RwcOU@xa*H2qip+(W$94u=^X*>?G;B| zN$k~xM)J+EEMo7defJH^hSEE-pMLnyQ&?Y7a=u-2kD}IC_&YR=4HKI~zbDVrf-5yv z8DzU*^4Sj$!7j*+z&!H}In~^142nr9b?+!C2`^7BCj)b`{fJR6_`BH^CA$Lo7~Ye` z#Pu4?#iJCiN4?EPY;c5V-~1#mi84rz5^wL~!Y(%JiV0rkM{e0)6Xk2whFrb$$vqX6 zPme>W=N}+VcOd5$62AysrQav3A0I6EWk%%rUSE>|b?byUMP1&IhHa(48znXOv0{Sn z$7xR=)jn?ioz><;PC04{Vw{t-Q50^QhS6Nn5L&bTz5>jdq~s~ep*v1*`xiRj*($g# z$~|j$nJD+&GwlS^+Fu)?qjqP1o-wgtw3zXgit#avlDVbt*W1rNp z1-ZIp078rHhgPO$Y9{;BBoor4JbrF;6SX|5Cw-oE0)CF*Cl=a^FmL3_T5)Nv-$U{> zHjgme6FX`1QP}%=C#2ps;Y?fU-Bza>ygSHjx5f;Wx=}-Ub-cN@RtF}Ro^^X%Aj!3z z41;brF5p|KWyup*-RBs*Xhqs$<5bHg-R^o;W7ttHPtjXs*7CuGxg6hP%%)!1>=MKz zT}>l^;OFVKGxG)4+6I#E1n+O`b2nK(slmGM$y zg-o{W<(#V_&B{+#4s;UEYnE~k(x`ndf}9@)6Eg|IBe9Juw&{hLp$HC>-ZdnfJX)Ng`9ZP@$tbvaeIaT)9X zAu5gnXxXz)o+G|uunOlwn6ouUg@rMfYV>V^PJS^Y0X0iVF56RklB>LqTZetujyI=k z%8IgQ(~j8C0j8}HVnD<1!WC#lZlhr0F&FUIN-KTg6BJ=AthBib}0 z!3e#dnP7>2F{B=inbm=`_FrfGK*u7)5&brG--~`@=sL)`zIm$1l7MuHp{cZkZ2#){FDHob|3%(y-dPX&^ ztb|lJCDtwShZy%TL29noGHc%+Q#I$iN||YCk-IipvjTHjXSHA>trrQ)wThRHRIbhY z_h$Cu6j?h?jWg|Qv1JyGyYWyXP#q-LoV7npTjucWz-zE|#J2ll&ttVKphOTB;)aZY zLvSa^zY`YHcB6RhnPM`EME_=O>HVbKgxNqk`i|TMje)9ihrO{ECMg-pL-2d^GA^}n zUUb4&`_zL;Gge^nd+}=pqs$^x&~*4Gq1`gFU|h5w{;3grSmJpXq>;ZF8fern*<-zi&S{aK1xUavHd35zE_Ng{#`&J=af zc_=6JII)s9b7YnmCCIGGwDe|EI6att(8V?ECiPC#Q5!1e_#4H7kP7U9}yz`Q8QGoP+^kTZAQe7im%#RTG8H zm)3-k8q;LkD%*+0YoRP(2t(63KRubTp<#GWPmg{6(arUB=BJpLvAu@$ZQlF$w~p_5 zCSjV3JfilaQwBL2M?A}Bk;bRmR$-if>?v9nx}zU^c+orZw#4(u{p#)T5$Dx4G$aI; zr1qUWGJD^owjMR-fOK`sU%2tMoQM{)9qX&e9!)4whH}b~x}|B=$%wx+j&l4MX-d-6(3tKWCA)oF!0vK!yw>DNdL}>h@@c8eU`F301BE!-olU-Hqj)%o*Expt z%vL+mL4@;Ab7)wkd7-^~SIEnFh=@z{wz$o9c-zC=iML8g_LD*nRF+Yd) zrEIaOutH9j{-*jFzOrIt@`S$Ntp=j@RQ3bGJsH6^<~s8bzp3;4pxd&<)C>%pM-NWJ z>*}OZF7r^0=tW;8auC^5AG-h57FAfOMdRdMM#hhRAhYn67Nr5jGFNU&9C92t7g9c`AhtTx2DGAzUu7Phj7g$&Fg5kwVOzNk4zyAVmjKNnkFA zBIgzohssPl2bx2kz;6z_7On#|HOT_czHo@|JkC1&2e@iVFF^ajP5G$(^V}5JD60D* z*m$n&Wc?`i0xP`A@u(q5L{tF-x{bo_0RS>>YkT#qJxedC2p>yU!kz`&0x zYTQsaP>sA{Mou<=N^=V_IX3D|m-dnZOln;-90t>+)7`hXD`se+G&D4nY~>G<9n_vb z?=`UPj-M#apI|!4g4ylnjNJU2J@4xzeY1*<5c}~Ct5RQ5QjX^+;^GQRO4e%I+uG!2 zBjHSEPvHEW&d=aat7G3xV+)zQI5=H(L zC#|-m#Lv7!l5U;!mSHXx)|y;y?h4y0Uvf4P)g&Xor_L7<+op_=Z0=hiQ_}{6bOt7- z%Mv{>usBW}s<^|76KlZfzsU6B zx8Gv%RLId{C53k^OG?6x8_ zOJfy*j?T^>-;-zsPcv`*tlEMnJ4m1ZaP!ULvuqHhAmqG_S887Wxp6Pj@Gn^Nro;lbP~1%>bB%0E0UxZ-<{TYDT^g+*1%+0Os4ciT7M zS;W|l#qyq>t_53B9roYU;BQyz@9E_~{nfZVwg#_ z7>FPN|4@V|6l_ZTbCvuKX6%cl<5%m%0sEIPR~1dU}de2*>@=a72p ztv-DPEV^bDZ0?MU1*iSsk`@=!#7c;^3s?*&XcZSXQ-$Jycg`aN6lPZq&NtsoQQ`-} zEJ;+TGw_VAh(jH|-Avz+yfyY@wx9fOd^L~uFnlQ`ySE~`jH3B&=Kl})Zy=(NiSVkq z55^7HDDO>K4rPAA^s z>N>f&JX2NCc6W9zW3Ess{h-P>(ferb&#RO-d$+f*FR{qQ zn2L!l?B1zp6nmX(_8Uy$v_S(>F-UtQhX4gl;BdRVV}GM+bd0aUSHy`1p+}j^Mi0ubxAtCd-LXVw^>K=Td!hX@o)9 zDS!_VW#Z=Wv)p)7s{_zu@+rjz@njti1>p%HaMxt1+2twDzA%?TvO{H4NUPPatD};4|#}L`7MdRrx8*`{tiX8@fS) zlr+h%P0g04WfaLnWq!LRgFlr2P-FRTk?!R>{W{EqCNVpc~QY zknBY+H$!E&_A=~M6+dNw14bVA?Y%?JSrf(rgsH$`Inrv?acS`n1Q`_%6F&Vv9IE!}Sl(`&Q+T)h z))I%^ZH#lZO32;-m2C_N|5r7gRSYQ1f?YFh(ulKBa5aRfaWe+J29Sgu$T$J}IDi6L zmSS%z*R_Aec?7cZT!p0lShflWzXDCXamPJ6aHT)=QLkS$l=s#j*&PEi9CAUc0#6Oh z-@LgGADGm9@q$x}IFx{xQtAtB3JuCkU*9GLbI?9CJEMSeH-=3i8~s-m4r9zwKGkUU zYT&^@Qv^XMLIS))r!ImFi;)5@R$ADhTLq=Dt0MGfO&h9`C38IsQk#KUJ}XrPI%~kv zF{%c=>o=T{C=zHxF!*hyl81*Uc#(*~d`VZWPCzWO?42q zyHD#g^LITN7arQO}#?amV1V&0)P z-~`st>Jq{rO173o6=HLS$?vHTAZy=dV<9h-;W@Joe5-ZQ$v^dU-ESX~-T;D8VNI>$ z%bRlpikPtxMG83PrZMD0bs_oWPm$dGLk-1g3v6G($)1kwvQhrKg?n)KPRlZ}0z#VJ zB=_q1#x>>IYTU>seip$85;MT6BIC47Owl+Adj=KS3aUIOCSH+Hu(inI8$IB88@_g! zr)#@4!KzZE_iYSOvqz@&U5M=P@K8fj^8+>r#YNB(;I|MF8%zFuz|MK@EaLHvfb8w9 zwNmx>I*|mx?}9y|c;;e=c5pXGuetkQ-MxQ9v*N<-gfWQ98p`h`{-{5+8S9Pz&e8LQ`MN@jWh$U_*t2 z3&C3T^zodScxb(}WNa5Is?UA9&^@JZG#x5^Oe|`MjEtmQqA>RHp+k{$y!~BVd=YFn z9)1-)#@Ke`i4I)Zxo|uwHR5x11P#@iE=>B(;e9vLFF#K{#{=->1y#8#7v#UpxpPpc zEGJoPokvwP*m=o^OsDp-gjCHOvQ-3DSTCpv;1Y5Q*95>L?kJWG!n`;|D^1Z!(!2D* zF*e;(qR7G63gg_u%4x2>^(@$gq5WvTnUvjy;_SiK-{6@Ls(@)lzvWNOO^1SirK5eM zdGVBdFJ(iCbY8YMtTm_0^5YqOV2Bb9@6v1WA~JNnSEX z?##=D-=`pQCpOMFey`Kfnst$Pdnl$ROGraj7WvTiJ2+!O1gF8^%lZc9pSP-_ptZk0b&rTVC>_o_lgN`r4+9HZau9;FED1rjG+`zH>smMhP0 zEUIoT?VHuzj)-8A^0-H(5=mYqI?t=Uc8Kif`bg0zsv`JI1B4 zjl`3!F+zJ<3yY(FvxU~3x%nygqHFOxy0Wal(E7tT>SB233OXMELkyuo%J!?W4<6B7 z>I|y?m4r*Jtt(1%*nZZ3->)UF^S+>|hN=3L9|*0Clu!}FOFK;Xasg%8BUE_ut|NJG z^YFOH3aCzHH8#IG@3^Rv(=o++Ce6Fxhcu3c^fc}(r{}rD4srM z)egkr<`eVp8#S;yCzJL%7?JK8oFzyP+P@oe4QB?wGy}MvtLSCquG6eXvk6m1sQWT; zPd=Z{N{eQ)g?9N(O-I(P*A{FNd}ODNxT)`Aga8_iK}ic|_QjdPTC$JHEw``VrYBel zP(J-vXWl>$2xSa+HyVGp5&TC4vul#M6fbQ2!Ts#TqYnkX*Rb(v$RTZKYgXy4S^J({ zN3=dwAnDlnR^vJlX%43Q?X~NKjUI!lV*C{Ayrd?~MczK@?^K-0uYM4YH{sK;Q#lK9 z#@99B%z*mwWfxX5PFaev0lMa|+M+mO#V{%S7sUE%l-+()=8@ZbrAcWF@^Q79mcJTn z4EI3aQ|xy?>Mjiby$DiXz%wK1sk*T+2s&N z&a!`%Ks{FGP=|=iZAQ=2SBxSzkHa5OsNjU-JaPV}&Rgqy@#)8@3Kd_L4gsI)z0>pkQ{3*Em;BX~0-;_2^6i zn544$a;OskSELjq_+>XA(Z=04oSS_|e)jkpL5A;cB)QjyzqHYa7ZVPx_ZKNYHeSe+ zCHe>EJW(^SJycme`3S*J_tn#uNGAc66)(4Y(j~+~=2&|?5wDk&T%5VFie%XPr+i%& ze7}BX|GDc1eMme^@{aY^ot5ZAh7>PikEk+pV$}PT2koXN;eUiT2`-*j#)__yXH`wZ zM^h_5Ke{tM-Vl-d^~)}T>2$#pNKV;phw_c$dH3_Ou_%&8Y#`>P(;e0Loz(U=&m1IH zp^CC0L|rAez`aNh0dD{>a!l^gtl2&EAw0z$bb3BOzyCs@zM zhK=gq{qn6XF7nS~IdKfHre@-o^raDL5~piti!DL{nZx^&&hs&`H;{WS{g=KvJbcdv zPDtAhZ}hd528HWH5(iHrF7>H0dowicC;hIn(kigVT9%bmX%Zo^9-kEudQ`rwKRI%f032Kud1)Fk}86Nx;W?t=Lrq66iw zEZyXMjFV-fJkoaC)XYU5e8Pr5BV_qK^!+lV(%8GXQ%4;uHX$~X3Hf_*{`kJa`L7R$ zl8%o_;9`qfVXE*cF+jSAnpXlJg^3nC6vWNS>- zK*?P!H#o2?ccO`9WDNyD7NfsUzgr}&8^gEyXnWmOfz>~REZ0mwtQ4z8D|ZNcKLUGX z8v6ed-NCKx?}x;p1^bR|Rj5kF%OGES42ovJq^wp3SAC8vRIGrQyQ2vFd zW%STD0vr`wC*!0VOg2S6MJ_sK1Zvws1>f+ zKxkj>V%^|>rvHe$#Axmvcp{@^zK2PJMU;u@3esuIaw4c{G` z-}yqish`8d4zVlo_kuv_l33bT+X^LmOa5ju+TZ8K{#xwr%FOdPtFf+xy&5Ro^^f%| zYlsrcAk=hi*Sf)Y+6N*nabVK9_d#=%mfv&zWe~YTyWN;rP2( z-t|06%=7UUwi?+b3Eht_xm!=E5ZXhK8Ijwhqq|sCYgz~cT zzglS5os4k&-&_Dl^ITn`j=d7!heal911?~+T{dESkUTB*5T$P*{BXuN#-6MLT{f(e zwS4x*eKGS2u|e4MLDC7W?=^C~tq|%`GsM|DTb?xblyAR zn}4Pa`W?H7#zmbOVaV${Qn~emg71+}(8b1zZ|g8S6FMG1H7;=7B5ZQmc{l#DYPb7a zo$z@c_LiXO5~gz~#q zcM9T-&E775w)XV(?4KI^88FkiicI7l^54VN+E{*y1AacgUBU`lnT}p2BsqjN4<$_1GeCw`=*b);K#wORz)spL(rR%Er);PsxE?6|B1hCo4YE9d5rN z7t8j0jxDeBKNcG$yP(ib@ri|Efk-UNVBup zN}i7lD;MV_>zQivAGZo0hh`+(TX(J-e!tfkBb9 z79ai_*EKt0x@~Ri3d@zQ#5&wYX!%@445>eqG56jlqP#Uja?|j*Y8j1- z1CRS~afI)j>8jPZ`U5;5@C=oJQwnQB-11s1yga>;BzFc#WV;Wk`PD1(F)^o@|NdIgCnz%Jb<;aKqcYPs-!1LOvLGnsrpv+NNXOf8 z3PC)-*iotq>@4linS3f}6GbsAwnY;R-O0sHEPBSDhulP0?@1`Ec5Lo_@@(e zc_?L&`QXi<=iecNxA< ze!r}~HbaI2zT(O0m^eWCX1zh|TB$J?2vzn$+q8d%^pCVYpOEQXzc79GIzr{OIQq1- z2Kve*iwCR@_K-G4vUK0f^^c$o2mTAeu+z+&p*1p@H;es z?wagQlQH~yo*4^8@^#_{hQkH0Y2&u$=UX0&Z8JVq$&Cc2Nn3>HX_@}ek}&`L@ol&c zC!C8}YRt0ntJRT;FZUz_IM@v(!e0JP|B|C$%polldqT(gYVZe6RUsRik3R5*C>!lO z<+Wz!6BNsC6SFipc_9IsFxKp8(J=8m%PxC-N1U!p@zriIdZLq8C~#KpF6)Kly$_)~ z*BRF$_eE$fA=f3PRzY>$(7JiM>#KT>p{dWt8y4}CEhKVh=tV zkq0`keu1$u>zF5B?y+Jsarv4iJ6Tv6igL7t7NXFyS=I^ zekH3fh4D9JEUuQHwrg?9?ZW*BO@lbkW!**UCLZu?5~VlBj+&Uq8GfU(0a8^8&*BXz zoehD3#T?1FZ%2LSoGDAk;IAQ@U9bwVZva@a#bZCn7&Y_8(AfAu1?CiK^7%mZmz{ z(k{E>XFD4@=T?r|Y<-At&_=WzPN*F;)+?H!S~5<59(luN|5q) z{FwR$^2fy^`T&JJ+WsPYe_(I7sz0q8z7#w1w@Eo0C2=aVP z;=ym^Jl@guvW{OOvF+w7&VsyOkm-$?sqW`}4|T<|-*C_dQU z1Tjl6P>l`AG*C_BvRJ0@Uq8cbXVs7_ofH9=zXYRrJRLJahc6lpuIz(t6dW4FLxgz6 zls%V;tQ&?e>I|-Uz^f;33qH_K`F7sYV%?`^ma}FmIx0Kx0rU9JEnPOi^gd<)z-#rE zwr99q)W~TPyd|ex83-*H&K*u;%zjUv231z_dlMMHVNcGB425O7oFIaSpe+ zokN4aWc9HlGHOo+odH5@dk=f6>3-*x2($UHMf%SOlW!1)QmPEGzL%PW<{#P%aT9to zGTVLZsIcRY&_d_kONsk?Y|J1RY?u=JThcfh+f22r~!fhzT!+tWf zX)sCD2a5;1IP?Mk^l~2nvuGijC|pne1XNzCrAJNEY`I)?;>s^ZCY<25O1uD5Kf@P# z78ViHCYN%cNnRPneo~Em7O;RCONg)P_|6nk#E-rn4>j6-Q^N(kB!AkY4;Q4LuGAwMS`VswY*RB?w=kHEh?vu8_n~?5XrGDMM)q(=x;ff;B+yXCb#|lgKV)z@^7mY)7{UCCyl*5|9J=C zZKuA+_sjP7#4g;ME&fD`&|4u7(g|FTEM| zyJp2gQZ~T;O@RcCf02JWw(6zZ044u+py@r8rN{@ot8_tKJ>X#U%QrqoPnFzvXoEy){b!4ayC)@B15i*&@Rr@(@ONFk-H-)TgGq86Zd?DP z&7YBIXQbBs*@%I;9l0#0xMriq@ygRoV-Ggy7q30n=Ob{t-3SYjN^MS;HR^$QNq-Y= zcK^qbh(SRy&5*M6x!*s2nLt|da+FZQp(NMmtdgo2qMS}{@MehwzIrY5>PL< z09oJxTP!lvp*I8kO_!bP(-q@gAD-jbB%Mv?pW31?uXBnH8SZ)GJ6cr>>DaasJfI)~ z%mXHdwewLs!5Z-6ojw`BqqGb*Q3EYk;C+RpOb^97MWhos+Hi_kOP zhp)8%>ehwfx(d?pc7`axhA>;aDHuY4u_^fXLYAVbb;+WI`F2deRksbTt`<5E@#xe+ z=H1V}gVPQRKn8OSl)Lq^H_CB6BRc)JO@<S?j`)3#Atv#k}TM5k86qNoD}~xAQG z;nqzX+KgUpT5<9Ck9kN?E-v;O(E`oWY!|^U{PUo27^BmmL*rhd>|nAM@k#w9u8WPi zuo42P|Hr~`VyE>Q9f)}F2( z)WCSxEpkqS75??XO{IoviT3z;aw)x3n?Q3z4UG@aCFOel=<7Wc?)C(O5_%NvdFbng z)XWe1sY4x(soN!_XL)~ZtInn@qQ7k_cJmye2Zv2`M48AW!=xICaDfR5iWZYv3Lh@YK;Q!W^!K>|}+E|Ol z!|jFskAU@mW7({dj_Vy&hPA$N!$#r**Pi~opdY$%KP7Q7d*wV8rOudu%ZKME?;4o) zJ%~1oR$xKZsmpsj%1c`9EaB~p!O3Ru4dF7soG-v*R<@!`r8?|2YZW*=RIWJh$+Idk zt>}`8MR4EaVf~;NXX8Y-c-j4Iz8O2-MG|C&U?DtB5t6vwrzuTPO;|Y2@GV6o(s4Uq zA7oDWODN^F{hvi?VdD)MI^EGW_!%#6Afc-+JD|o&XHHH`xCsV>MMWL$UM@@m6};t zdm6Xo)zYD$6eSFSmpwg7*nMoVE2rQ$vJJm0R6#Xt-Jkho#N(@gM5d<27Ph*6=08Q@ z1(j-^ipJYEo2~JDQMFJI1?}A5MDyf`wbUnC&U|A#<)6Mcw)DSDn;f~FCc!^E$n~z5 zh+)2sg855{V^&LxF5#_6oAE+q^Wux0-G`2N2jVDSl}1!ra312zyIMBM@iTh_1w?k0 zMOvt1)wFH|?Y9_EAOJ}}M?esK;-9lIqd8o;BwK=P%)*~6Z?4{rGP^T0mqCuhiUD8> zcGkSn{mphCU(|2eq?bvn9AWn0=Y`8Ku=hxf=O*G5l9>HsaJ-+BD!q zty?0L4}0#}bpAJFKxb6rMi$kS91|a}=I$=!=;U;H^7H3ClCk_F1AToUREHs@`FK!P znm=7h$tu((zpT}DfvE(mM0QP-in)DCAU2L-n%4AOU}{F6<2`l~8#zBat-62@A7J^U ze_RD=$CuH?)|2&{YsIQ!HD!f`-#3JRNKJE*tcOF~8hySoP!A6YP?et&Y_&dP`1RL_ z@_cs!@~~_Y{TmJ3(!#xARd@6|$9H?hMcDKYe(a=<_WnEH{kdAI(1C1qRaMS=_u2;Q zaLoAZe+(XK8k$y=nVDJ4+S;4($;nx1GCy6Lt*Pu`vUX2M3UA z441r{FDwBGqGlrQmvT7m2bfC*#b#SuTZ2t;8iex;bpQQyP7BrKnwVjsW*oL2e|4`G zYF8kT)t}&8)1`HTOR-0bn2Kq_yNv;XizD`3 zrtdD+YknA5@dLt{lh^rMGsOjK4SFZk@6HY)VQ~0bgEiW+Da5{AF^+`bb*aQEdlCb}n%RFe^$01sM!|c8G$7)D2r)y;bL0`hQBYk9LNRpW1^n(7f^!&gS3Hz2aTvkMFqlET)hH4P ziac5NoMT;GE-`{}-}|CCdok*03GoZQpRzgCzU&|L*`{v(TRg4%I=QcExTm_AR1^kq z1HonIb&aA0+uJXEa;cfI0aJ6BRVPU`jxR()(-9 zOLwzfB$@G^)bBqd&+uSfUth;D!P+P!oySjt0o%CdMI6T)5H0_ZqSFcE2?Bs^K7qTeZ{yoJhWe&ZpNiTAmnY|qP{T4v2%Jw)Izf=HWW~?L5gFBajz22TPvsXWj9jf zz3F2thusJbm8|e*O+x^C83y@4RwXktuE5Kzh~76&Nf9M1d1*D&Sx$IQf@G(P6AW2O zIapbpCBGzdv0_N49j~3=J)EQ3VwAY;P0mY4N%!@GWdF~L1D1%lzld$y*>-ZEX_{J8 zo$8OvZoxrQRt;4Uj+rB!zgvP&o`^O-&cP*|eg{Hpcz8Ts0VQ!OlZyjF?oM9fWVYTO{dh!k^?^%$M`bhf^w`Q!fA(Sru=7 zD2i7S`(@ehj5YML1GDL1&C+@y-skFW<5lPCv2RuU@1$`#8nTWuH2eN%U^H zxlXys&xIKgp;s;sziN#Q&(6m#h*a;%KNn`@8=IZq{ZD!SD>Ug;`i+~2FAPp5tzM~n zIP`e&g5{-`SIlk!AC7XSgm3p}o&Df5AMZN3iNA(sxEgHTnaq^JcU75tDzJvg1qWxb z!A@SHQXh0$=B5x#J%a%KTShY$?aKQE^m7f8u@Jv-)==`5sAiLa5CjZ--K2=4jtfLZ zRJs^*aTXbcN_ppcF9sHYBV?j@M)Mt8SB5)1n7~Ee_2u0^8g8*BYos_5eN>U`e$yte zzwK$ARpmp`^I2L@Sj`e*-0Cc`Dmb=&1aP*tRC%nG{7tfU?Cq7^pTOvrp7!E>#L+~J z#L`7&Wm#rsX0-c0CeX66?VSZYie7bMLo)olA7AQI0{Zw_3N~30!nFv)47RBwco@rG z&lIA{wLy`rp&!5U8K=?I0Ef^Sb|XyM9VPDF7^$1!UVu$F^a z)Sra@U;L10W3Zy#*Q{1s#X^=$WK1GKV$0W@NtV*Mh*>{8F{cvfS)eJBS$x9yN&pAk ziq=E8YHxac!dR7fm9O^~yBcmyK*I@TGA~{^U37v;?RS{xQ=30egiJ6i95x0GO^O$W z@Z29h?0}lKqxO)zB)MF~!@bsO=0&2z=mAjw$4BCkrY!Py9XMB@6mh-2hqS-;_HK08 zIna~>5`)-V&Rng`UR!8~ZTSv!L~u4R_S1aiYXAShj{I+&us|N@naFAQ+5gltir3>9 zZn0xd5;rfT`2594V%E_oD<>bhj$>hi!8A&QY zH#zvf{3OQK=b~=QuIZk*JU5ONrMb~V>Mh@cM{V&*9sNE{_{?#;e*xjCCWY6scyV<{ zzYF`ufpm7Pp_I0#xJd6>JItDkD-}WB-w*5IrHFO(A*mQU!dd4mjiX(WbxN5)8_(!LTZjPd4^rTb+VV@i1 zyrH;r80s zHtqtz*&h}xoGPvBhR-cVVABexuX8B;WN9r&Sg5vuG$qgyKFeG;iB_bCXV>laY^Bkq z`1IkC-*)q|&`=K~KKZIq$_>u27OaDo_ytqBnIJ5KVV0^CA5}fR9w(}dhiVjD?%Nbk z@Ol-~6T}$dqu^snew)oLzdKu;vMN2%EiiF?P)W(N$ZbQbRz&FBZ;QJ%33-ENuFfXBBDxu z4vCQwxRlCw>>;Yz2eo`0-?57n%PN1q8bHz^uj;+@Ctg)ka&SAy7@!Wgz&FwH@ilYW zCKpv>!KIJN9(y=0<=#@g$9+y^F@#sn6x3pO5iu9Ix^p#gb!C68v+#OX+Ph`n>$wrd zt@HD#S5szFklA_Kf&ux%rG=r@mSt0uz9FlWd{S(>A7kT_m(y<@lwT7>Ro(Z@4O6juRMEF z#=;c4g~42KIB|b+OuKA4NotjPJr&y=fo>*#?GLVXMhbanX)|slLg_x#o9w!QHkni3 zzi-ynn+@mYFfDgD=ktGu{$O&_^%!<-P^)d^68?1y{s%+XpC&@7L^O$MBAc`PW7TF` zu|;<`6h&pX^7}ZnS`oF<2S`4Wftlgn!R~U)Gr*-!pl5ih>gvbB#`VF?8tJs}Z?FTZ zC!r4k33X~V`iP%@ZLZ$F5*8wDv2!`K$F0b!?wQHXijbP-cXmPw2)Yt8UUzSAv7LD7 zp{X=zrK4~iT+uF`Tul#a*Lad#9iQ`*pT-hVKpVOI%_X4ekYN+qsyU=M0Ck(axebTy zv_88IbUAf>V?@=?$nP@+?`H{g3ZM-nB3hc<{H&`NcxxoOMt6KR%kSvzhE_WCV%nmT zXvqZ(a(VyJ$)s%-ZU~z+zwCK0LUdg!q{ltrZLn0nRa0UR34*z}^VEb_J=#hI=drv0 zS10Eg)I`+o@eM_K?=>JQ7Mc`6sfr+o5W0wT6p)Tmlomj$bd}ygl%iB2v=ESv^e(+h zZxTodB)QAXeP`aU_wI+CGdpL_?mXw5J-^-a{Qs=q-}T*Qv8FVgktmaNU%#gXjZFPs!X3lQxXk7P%VSsJ z7{eITwDZVF+}MLp{C!K^yAzAF=p=$KKNjQZ2P%nFBQGzrIRAJ*=(8!yTvY8(jPZf{ zg;=8OM~)h{E4Nu90^3j3f5pI!jp*26@J=!57t%!Y?1<+%TKYBdjug7^$0!~Ck^NcR zFLp3xa`0cQO~1j3P(qpii_c}gIre{3<5JYzqwT!qh(+yjrf^M2g``RN&xB-FnaZ;hr08F?T3HZ<58sWg(*zRUbmi9PAOS zc-Ry1vd(`~A{3*C!5Apg{;aQ8JFzAEvag6A&?hxN8XJ5ojiQYI%dvD4Z)}58c57u2 zhfWy1@phENoPD*5$##bBS$D#5b1mzo?{CY?JVSib&k8{G+i%gH5fBSUawE3y6Y5{c z{F-DSvvQ^Zf}WZJeM9y}<5Pv(F6SAy!0jCHDLhu&Bm?j7wfSmkV#BiaoY$Y@HJN+H-ZpuI$CwhjwMh;b{L(Fy-?ZR-`L{!R z+#S`Nh%c|+Gs;LZHtJ+7Di4Kz7`gW3tw^$X_4ZFHkDGDj(~#9wKFn4D0SrvQolRps zJ*NDE0ztFvxVZ4dQ5C~g=rSE~iejN7j^kK1u&*25Oe5D^+(t!D$B?|sGsJAa05^c! zqKI1a0T8CUbc-CHgvO(P#k)emN^3{nO`Nf} zpj=^K8sKV5^72~$^x&o5uOS;I`vPsI)b$FA2c4L~ZnG-xLOkB1r?IyFRqElOS(Pbf z9pD7l(7;mMQj)0>Ma2Sl&|hkLwZ8^+FIyk`pX`lZm(2M^sD#v=X4_+5i{O*VZ?Qoe zpTlO=Je4hSI9li4of-mh1wr#?o5JQX%EPVZ@4vbO?$*xG#&s~&4PJh}?s|;huQI8J zNudmp3$dSsRio>J&=dQ{%Ir%#O-kYqs%kMqrg-&5#uJH0EgP=kmfd2}Mqb-CW@a&V z3lWH8aKq^TEim?Hh+C0c(l3jt_77n!z=lbHeDZ;4()Qqibj}C#dYx`r`$(kTB!ilo z`t8Reu|QCFoj^0KRz|c``nKO04*3K27HpyJ1E{1f?0F%nnPk1a?5}7-z#@48k$@$> zPwwV!=9Vvv8u>q@ix}?G<}Zs*Sa=tX^JFNhAdkYiW!#=|@e3oTx>33zidN z7FEcU=y6}J=}<0*pNpfNC&1&KXjTxSd|?LnU@x7w2Z?ct(sV73_=!Lp2GdHwznvt}lCB+J@F-i}9g-h65QG!pQK_{k626W-*l_n*u#hK=z2hotnaX_Nb zYKn{T;^z-5H|Zh8KY~l-DAbzLknN@Foii7L^_C0aVcO^;02qkku|hOCNqV}G@5~ce zWKTX8U#l<7o}T~Wvp)}HBFMP62D!I@P<6`<+L&C}f`voB92wxid8b>#{6;%luK5}c z`RexT(4#_AvwJ~cN7UgPCsqpgb7~vA$A%QZ_3qQGJ+bUKJxnmQIUO_UCW*=~Zk}Fw zLaQ|S<@gvB?%O+@;%V;s){(V6Qp?XTx9Hv~cwt~aKVt!$!h{(K% zg|~g`l3P&<{LmK+N9JFrSlQXW#iE6SVX0s9okLi z@MSg9r8t9>@gsM7geA<-YIm?v!mU?sR%w^cc^dygmFsTTqSzD6+55EXP8)TT#6|^% z6!G1mo7f*DsAj3BZvxy9N}&oTeUAebeYEbX&$17=F~m@|6v!&(XPg}9C3=G?`;?>J z_>vr!DI{K)9^ikwLq3(f>HT|emfE36nWl7nYj?Dw4NL$4BGm?sTj~v@Lz?_ocyk!7 zv0dh1+*-{Az2R@?{bcXN2f#oi=zb6{(P~?MyVgSu-g53y`od zB~tSvH{m~-I0U7!)`EBm!pA`RQ{R6pUk5$F@m*9>;@Qn3Awa9_iZkPwqhbl)er;BG zoom>(y$C9(W%;)2Cpye0bVj{*#tY|rH2KGf{!?}m|K0XVxR2h8KVb8c7dQh(vFN(u z`;B&B7H7r`vW)mM_0%%*ohecwIo7pF2w-{SQdVI!fTu`j%;EnY-Hdqm3jaG*cFjg) z;f(ZB+)hO5eaKsU4QnXIqiMaITb8~!?_EP?L`5wFa4|H_uWEXq`p(ln?aS;hXLz@5 zid8(Jowo4j7UrMoTX%XD$;_P3#I;MX3TaW2NzbCWA9*;2C8fTYh=OkDth_HV@|4H6 zmyTU6_u~(guJOv5MPt!cf#wWNw|mvUTY@A;{F4-17+vIp-u5M`U9c2UtVe&y*fhT06#h`7_U8wecWKT&+Yd2(? zPClt^qJe8WL2QiU9_0@v1n4~WgFNAB4z)r>nk+%YvRs!eB|yXDnZaWOG)cpg#Q24m zr?wc^rUls$ek+!YXkG@}$dlTZTFEdndY@){9EJ2@4=Cm)#O>DW9M!ZN(OH%&0WA~5 z-_WXzzEzi_+dhcUbA+d3ht()g7 z>h0RKgr?5dpjFV2As*wi@}eRYYimKGH4CIfO^;@=;~U4t3}oSt?f`)zuRcU|c;0}X zf$w&gz#ZM}%VQX*!?M@v1Tx9}=lTyrh|(DM^7bf(;t(Pxuf7Q(%4(WTfAWU+pfhgC%~n|z&S6|b zn^Vo#B0a$tR6~X)N zjg#NtT1JOW^>S^JHJ@G+BBncyFq4v!9`?&}opPA7+DE!7W0$G~x;&G;sa?V|BaE-V z2C7H!^-hBbHon9_o@EOE>y6G4qa##J=n*Ymsitz|33pDjRVxXvlE2BVG@a7Hf#6rT ze9|qE$$f2;RACIOuAxy({$o3I!OkyL-$W&AD$G{M=a^%zar$@VVj4YlK3&YN3$<+F zczQS?Ekp15c0@x%Iz;`I@29?;Utss(BChq-RUyo?B}Ba((?BHips{-U8G3H>cez_B zqcY`r?K9=hzsgDcMqInHvce|obic$==lMTOgvT&m6k}XvsA{V>BptI8A=iOgV-_-eYelems#A393`#A)V!kuhrI3JM?mCW1?4aF{< z+>O&_Og1(sC?n5rV6b|KbJ0ohUFvJ$)H^%++FUL#;ARQ8zbtw!r17nt#6b?P((dxi zr%Epa(G+XZalDdAj$Z6jjxPX>{>}(TbMg=j*mJ-;aq`pBD3*UNq@hhM^G>!ob^Q+rT4cS^l*jon|oqQ5!MPRwI z#EKTUDe~nj%qmFLH>U-77#23R@ngZ$Q-~OqJ{(fSC92`SY#L||b99{6wR*LrELFA> z%k}i6R?C2gM1Qr?9>m^w%W;~(+iy;#J$7=2?eLu9{&3@zM3tc3ztQpWT^$^jecyIx z>sjoo|5OZUfb#w7KYiaSU6AOGPAKrKTT<2$T%ml+@eyS_$0Fb+c=Gyo}Er-3&us1vNe8>-b>~OC^?{&S~pV*XMCUd1hlYUvSC%UJFD;#;yjptWjM#?fMJp+D||afk>I_+O|WHMC=Y0@ zNaqK0i|mJ#EsUeP$pmf=vu{D}#h`|$fR>G(ZaIr<&+boL%yMt2P(2dOI{%|jb?@Jw z)?b5-N$={A=+A=dEvAr|4Gx!1Wt^JoDr71%=wL<6H7qE#)zWUuVN-NP?nP4oYDPH! zb3MW$I9^S5$>@lmsN!P{cCYwW3hRMrkhHZ+PU{E}ThpfL`E*Y~FWBem$OqaH`@_K8 zwhf+F=a8<1_(mO-8d8l$H#*7r=7k|sR6=j=k#ee^)1&j_6Nq`lX`&3=%DI@hO-(&n!Z(|~iaJBS%()PUCK<#rj2x4^#bCPufU6G)2RpkB zSJxjG9<`T4r%*t}WF^OfiXuU2lc(5?2I3WpEMQI)q{UNawSqx0sVO!_7`NbJ9G8lq z@?w0@;*{@vn~l#a+?-(%KegAnFS|{WbYl_7R@oAkDf9Q@>RwQw6c3tXywKt^r;1U?KvEMq}f6 zo=h%9q5bpBz_DdxnxGEctr6(r==2G4Z6MF^=ulYs!4#P+HyG1`V|i7|B9E?kN^W@A zZyn1e-uumf6QrUrTNIF4IZMj#h5US`Ty1&9yFY6923|VD8YLK?i#s|@Jm;QGyB9cDT1vq&A_=4~}Xp621@GY{ZV)!${(@XKzz$>;R#H0?2GKyDu=4 z<%6d8dPe|$`%tU?+g8SvqwL)o9yojnuSHY(!;7Z-`;Q80)lzo#q78pt-kl|@Zgp$Y4&gZ#=uSK}%bjq6 zle8*2vc$aj4;4&isUzfqx82<+y1*&B&Id<%Wm!zaZ|-6~CE7X18LArBYa{) zEmU1BX|_CK8#QPG!|?;U+3RHPp58eF@iANH-9>Q&d!;Wkvb*U|e3C^+p@Zy*kDhBO zR38Dru+?C56$wLCNh1DYa8lakn_VkVoau)flcTcwnlA7FmNfyONM&3oh)6*^cIh8D z{OdRQ({}&%g71>|!QlE{@_BvY<6i0Nz$|`%r0WfpL%{RuK&_X(sEY6yL;Va{&jw$t z`psvP-hc|D!up!_*SqV~gs*pnWyZf~v-!|o5|n$SKoY4Yq{9rJYMc!;SuzmyadWkMS|25i z50%=(6Q!CFq(Dgi7TJM|zj{PNW2OZvi_&H|GR|N2+0mtGUuIdeu7-biHAgVz-X+RP zWq*o8-PS3Bat{qjrjhFvV9n8^cr_ug?5@poQWV@QIxs=__{9W#PKsR!RU+I8b16p6T?~e0?qSRFSD~@9@!b zN*4Z&a>o@-{GkU?hZcaWy}Mo4lOtYISy{(ye@Fh?`lR!r*X_D?m*2-&d%}`pQ1;O4 zur}*}e}7V@kJVE<7J*!n?DuPN$gb~0y=;#O=KjpmYJn$E+r2Ua2f11+?c`2YX_ literal 21997 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 VI4FGZ0A*YOYl|xvtITf2{1-ZSf)oG% diff --git a/icons/obj/medical/chemical.dmi b/icons/obj/medical/chemical.dmi index d8aed182b645aaedb4a2916dae696698a4b816dc..75625c206eb10df3fb343a5349880f4193264c90 100644 GIT binary patch literal 69629 zcmcG#WmH^E+cnroAP}73?vRAw5Zv7*!GgPo;Mx$}o!~AZSa6pF0>Og2CIk;O)<{El ze~0^ip7))#=EwY)nYB*Ws&h_tb;(ux+Sjh?7%dG&Tx?2g5D0{;tR$xc0-+WGpOD8G zz!TZz(F+jhQNF*Pfv22}ht+$Bcb*Pzt{{+aUQf2R+v+Qv;leac3+MWSsj>stfc-JA z0UIfweIai0?3hPmC9Gr09)$?nJbqWZkI27~vIIqsf~}cTOOy_SuJ#uDdg1v&w+NTc z?InY=Ws}zXcjEbfT~bE>zU(qoV`Eu$$?gQ_$i*~u{arWGd4KOJ!r|=P*ySvd@60&A z1`is_dX`AP%kHY3aW})7z8?Er%JbOB6*Zf1zHL_dYa-sVi6HWwXaH3F`I7}oZ-rZl%E06XKaQk}r zAQZT@ra7*O8X%MtN6kBDiiV-TI#48lV!vBSqCX_t8l;n+jck}z&6AIHw{Zf?&rCcwN)z1)p=iFQUQGgBa?=31$4&p$GJgF{3k-e!j9Z|LBwHiWtX7(W7 ziQeIEnzlBo|CnA#4V2y%8YoMjLsx#7mRH7WS8cb0rVC|ua}mQ-5ym&%ZDzco&I?Q4*}9J-4!iT+)u7 z9M8g3?wTd&_Ge+qMVd!xA0%p%p1_(V_<#pnTXKtU|0pF)?R|aH#f7>)JT$W5M!oRG z(}%a>2Houa>YhQ2R|z3ifx(w};a~42NQi4`a#Nk0e#~FRSiMB~OdKUA#Cfj4%RcI* z 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
" - for (var/i = 1 to vials.len) - if(vials[i]) - dat += add_vial_dat(vials[i],vial_task[i],i) + for (var/i = 1 to tubes.len) + if(tubes[i]) + dat += add_tube_dat(tubes[i],tube_task[i],i) else - dat += "Insert a vial" - if(i < vials.len) + dat += "Insert a tube" + if(i < tubes.len) dat += "
" dat += "
" @@ -239,43 +239,43 @@ if(on) use_power = 2 - //first of all, let's see how (un)balanced are those vials. + //first of all, let's see how (un)balanced are those tubes. //we're not taking reagent density into account because even my autism has its limits - var/obj/item/reagent_containers/cup/beaker/vial/vial1 = vials[1]//left - var/obj/item/reagent_containers/cup/beaker/vial/vial2 = vials[2]//up - var/obj/item/reagent_containers/cup/beaker/vial/vial3 = vials[3]//right - var/obj/item/reagent_containers/cup/beaker/vial/vial4 = vials[4]//down - var/vial_unbalance_X = 0 - if (vial1) - vial_unbalance_X += 5 + vial1.reagents.total_volume - if (vial3) - vial_unbalance_X -= 5 + vial3.reagents.total_volume - var/vial_unbalance_Y = 0 - if (vial2) - vial_unbalance_Y += 5 + vial2.reagents.total_volume - if (vial4) - vial_unbalance_Y -= 5 + vial4.reagents.total_volume - - var/vial_unbalance = abs(vial_unbalance_X) + abs(vial_unbalance_Y) // vials can contain up to 25 units, so maximal unbalance is 60. - - efficiency = base_efficiency / (1 + vial_unbalance / 60) // which will at most double the time taken. - - for (var/i = 1 to vials.len) - if(vials[i]) - var/list/v_task = vial_task[i] + var/obj/item/reagent_containers/cup/tube/tube1 = tubes[1]//left + var/obj/item/reagent_containers/cup/tube/tube2 = tubes[2]//up + var/obj/item/reagent_containers/cup/tube/tube3 = tubes[3]//right + var/obj/item/reagent_containers/cup/tube/tube4 = tubes[4]//down + var/tube_unbalance_X = 0 + if (tube1) + tube_unbalance_X += 5 + tube1.reagents.total_volume + if (tube3) + tube_unbalance_X -= 5 + tube3.reagents.total_volume + var/tube_unbalance_Y = 0 + if (tube2) + tube_unbalance_Y += 5 + tube2.reagents.total_volume + if (tube4) + tube_unbalance_Y -= 5 + tube4.reagents.total_volume + + var/tube_unbalance = abs(tube_unbalance_X) + abs(tube_unbalance_Y) // tubes can contain up to 30 units, so maximal unbalance is 70. + + efficiency = base_efficiency / (1 + tube_unbalance / 70) // which will at most double the time taken. + + for (var/i = 1 to tubes.len) + if(tubes[i]) + var/list/v_task = tube_task[i] if(v_task[1]) - vial_task[i] = centrifuge_act(vials[i],vial_task[i]) + tube_task[i] = centrifuge_act(tubes[i],tube_task[i]) else use_power = 1 update_appearance() updateUsrDialog() -/obj/machinery/disease2/centrifuge/proc/centrifuge_act(obj/item/reagent_containers/cup/beaker/vial/vial, list/vial_task = list(0,0,0,0,0)) +/obj/machinery/disease2/centrifuge/proc/centrifuge_act(obj/item/reagent_containers/cup/tube/tube, list/tube_task = list(0,0,0,0,0)) var/list/result = list(0,0,0,0,0) - if (!vial) + if (!tube) return result - result = vial_task + result = tube_task switch (result[1]) if ("dish") result[3] += (efficiency * 2) / (1 + 0.3 * result[5])//additional pathogen in the sample will lengthen the process @@ -291,10 +291,10 @@ result[3] += (efficiency * 2) if (result[3] >= 100) special = CENTRIFUGE_LIGHTSPECIAL_BLINKING - var/amt= vial.reagents.get_reagent_amount(/datum/reagent/blood) - vial.reagents.remove_reagent(/datum/reagent/blood, amt) + var/amt= tube.reagents.get_reagent_amount(/datum/reagent/blood) + tube.reagents.remove_reagent(/datum/reagent/blood, amt) var/data = list("antigen" = list(result[2])) - vial.reagents.add_reagent(/datum/reagent/vaccine, amt,data) + tube.reagents.add_reagent(/datum/reagent/vaccine, amt,data) result = list(0,0,0,0,0) return result @@ -315,63 +315,63 @@ user = usr if (!user) return - var/obj/item/reagent_containers/cup/beaker/vial/vial = user.get_active_hand() - if (istype(vial)) + var/obj/item/reagent_containers/cup/tube/tube = user.get_active_hand() + if (istype(tube)) if (on) - to_chat(user,span_warning("You cannot add or remove vials while the centrifuge is active. Turn it Off first.")) + to_chat(user,span_warning("You cannot add or remove tubes while the centrifuge is active. Turn it Off first.")) return else var/i = text2num(href_list["insertvial"]) - if (!vials[i]) - vials[i] = vial - vial_valid[i] = vial_has_antibodies(vial) - visible_message(span_notice("\The [user] adds \the [vial] to \the [src]."),span_notice("You add \the [vial] to \the [src].")) + if (!tubes[i]) + tubes[i] = tube + tube_valid[i] = tube_has_antibodies(tube) + visible_message(span_notice("\The [user] adds \the [tube] to \the [src]."),span_notice("You add \the [tube] to \the [src].")) playsound(loc, 'sound/machines/click.ogg', 50, 1) - user.transferItemToLoc(vial, loc) - vial.forceMove(src) + user.transferItemToLoc(tube, loc) + tube.forceMove(src) else - to_chat(user,span_warning("There is already a vial in that slot.")) + to_chat(user,span_warning("There is already a tube in that slot.")) return else if (href_list["ejectvial"]) if (on) - to_chat(usr,span_warning("You cannot add or remove vials while the centrifuge is active. Turn it Off first.")) + to_chat(usr,span_warning("You cannot add or remove tubes while the centrifuge is active. Turn it Off first.")) return else var/i = text2num(href_list["ejectvial"]) - if (vials[i]) - var/obj/item/reagent_containers/cup/beaker/vial/vial = vials[i] - vial.forceMove(src.loc) + if (tubes[i]) + var/obj/item/reagent_containers/cup/tube/tube = tubes[i] + tube.forceMove(src.loc) if (Adjacent(usr)) - vial.forceMove(usr.loc) - usr.put_in_hands(vial) - vials[i] = null - vial_valid[i] = 0 - vial_task[i] = list(0,0,0,0,0) + tube.forceMove(usr.loc) + usr.put_in_hands(tube) + tubes[i] = null + tube_valid[i] = 0 + tube_task[i] = list(0,0,0,0,0) else if (href_list["interrupt"]) var/i = text2num(href_list["interrupt"]) - vial_task[i] = list(0,0,0,0,0) + tube_task[i] = list(0,0,0,0,0) else if (href_list["isolate"]) var/i = text2num(href_list["isolate"]) - vial_task[i] = isolate(vials[i],usr) + tube_task[i] = isolate(tubes[i],usr) else if (href_list["synthvaccine"]) var/i = text2num(href_list["synthvaccine"]) - vial_task[i] = cure(vials[i],usr) + tube_task[i] = cure(tubes[i],usr) update_appearance() add_fingerprint(usr) updateUsrDialog() attack_hand(usr) -/obj/machinery/disease2/centrifuge/proc/isolate(obj/item/reagent_containers/cup/beaker/vial/vial, mob/user) +/obj/machinery/disease2/centrifuge/proc/isolate(obj/item/reagent_containers/cup/tube/tube, mob/user) var/list/result = list(0,0,0,0,0) - if (!vial) + if (!tube) return result - var/datum/reagent/blood/blood = locate() in vial.reagents.reagent_list + var/datum/reagent/blood/blood = locate() in tube.reagents.reagent_list if (blood && blood.data && blood.data["viruses"]) var/list/blood_viruses = blood.data["viruses"] if (istype(blood_viruses) && blood_viruses.len > 0) @@ -398,12 +398,12 @@ return result -/obj/machinery/disease2/centrifuge/proc/cure(obj/item/reagent_containers/cup/beaker/vial/vial, mob/user) +/obj/machinery/disease2/centrifuge/proc/cure(obj/item/reagent_containers/cup/tube/tube, mob/user) var/list/result = list(0,0,0,0,0) - if (!vial) + if (!tube) return result - var/datum/reagent/blood/blood = locate() in vial.reagents.reagent_list + var/datum/reagent/blood/blood = locate() in tube.reagents.reagent_list if (blood && blood.data && blood.data["immunity"]) var/list/immune_system = blood.data["immunity"] if (istype(immune_system) && immune_system.len > 0) @@ -460,13 +460,13 @@ /obj/machinery/disease2/centrifuge/Destroy() - for (var/i = 1 to vials.len) - if(vials[i]) - var/obj/item/reagent_containers/cup/beaker/vial/vial = vials[i] - vial.forceMove(loc) - vials = list(null,null,null,null) - vial_valid = list(0,0,0,0) - vial_task = list( + for (var/i = 1 to tubes.len) + if(tubes[i]) + var/obj/item/reagent_containers/cup/tube/tube = tubes[i] + tube.forceMove(loc) + tubes = list(null,null,null,null) + tube_valid = list(0,0,0,0) + tube_task = list( list(0,0,0,0,0,), list(0,0,0,0,0,), list(0,0,0,0,0,), diff --git a/monkestation/code/modules/virology/machines/curer.dm b/monkestation/code/modules/virology/machines/curer.dm index 7bed0efdb892e7..5baa803c820759 100644 --- a/monkestation/code/modules/virology/machines/curer.dm +++ b/monkestation/code/modules/virology/machines/curer.dm @@ -4,10 +4,10 @@ var/curing var/virusing - var/obj/item/reagent_containers/cup/beaker/vial/container = null + var/obj/item/reagent_containers/cup/tube/container = null /obj/machinery/computer/curer/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/cup/beaker/vial)) + if(istype(I, /obj/item/reagent_containers/cup/tube)) var/mob/living/carbon/C = user if(!container) if(C.forceMove(I, src)) @@ -16,7 +16,7 @@ if(virusing) to_chat(user, "The pathogen materializer is still recharging..") return - var/obj/item/reagent_containers/cup/beaker/vial/product = new(src.loc) + var/obj/item/reagent_containers/cup/tube/product = new(src.loc) var/list/data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"viruses"=list(),"immunity"=0) data["viruses"] |= I:viruses @@ -88,12 +88,12 @@ /obj/machinery/computer/curer/proc/createcure(obj/item/reagent_containers/cup/beaker/container) - var/obj/item/reagent_containers/cup/beaker/vial/product = new(src.loc) + var/obj/item/reagent_containers/cup/tube/product = new(src.loc) var/datum/reagent/blood/B = locate() in container.reagents.reagent_list var/list/data = list() data["antigen"] = B.data["immunity"] - + product.reagents.add_reagent(/datum/reagent/vaccine , 30, data) diff --git a/monkestation/code/modules/virology/research/research.dm b/monkestation/code/modules/virology/research/research.dm index 78a13c0fc6d9c1..2e511a1de917ad 100644 --- a/monkestation/code/modules/virology/research/research.dm +++ b/monkestation/code/modules/virology/research/research.dm @@ -49,12 +49,12 @@ ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE -/datum/design/vial - name = "Vial" - id = "vial" +/datum/design/tube + name = "Tube" + id = "tube" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = 200) - build_path = /obj/item/reagent_containers/cup/beaker/vial + build_path = /obj/item/reagent_containers/cup/tube category = list( RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL ) diff --git a/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm b/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm index c67263b7f62849..ca97695b56aa98 100644 --- a/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm +++ b/monkestation/code/modules/wiremod_chem/components/ouputs/factory_output.dm @@ -18,7 +18,7 @@ ///prefix for the product name var/product_name = "factory" ///the icon_state number for the pill. - var/pill_number = RANDOM_PILL_STYLE + var/pill_style = -1 ///list of id's and icons for the pill selection of the ui var/list/pill_styles /// Currently selected patch style @@ -26,15 +26,20 @@ /// List of available patch styles for UI var/list/patch_styles +/obj/structure/chemical_tank/factory/Initialize(mapload) + . = ..() + load_styles() + /obj/structure/chemical_tank/factory/proc/load_styles() //expertly copypasted from chemmasters pill_styles = list() - for (var/x in 1 to PILL_STYLE_COUNT) - pill_styles += list("[x]" = image(icon = 'icons/obj/medical/chemical.dmi', icon_state = "pill[x]")) - patch_styles = list() - for (var/raw_patch_style in PATCH_STYLE_LIST) - patch_styles += list("[raw_patch_style]" = image(icon = 'icons/obj/medical/chemical.dmi', icon_state = raw_patch_style)) + for(var/category in GLOB.chem_master_containers) + for(var/obj/item/reagent_containers/style as anything in GLOB.chem_master_containers[category]) + if(category == CAT_PILLS) + pill_styles += list("[style.icon_state]" = image(icon = style.icon, icon_state = style.icon_state)) + if(category == CAT_PATCHES) + patch_styles += list("[style.icon_state]" = image(icon = style.icon, icon_state = style.icon_state)) /obj/structure/chemical_tank/factory/proc/generate_product(mob/user) if(reagents.total_volume < current_volume) @@ -44,10 +49,10 @@ reagents.trans_to(P, current_volume) P.name = trim("[product_name] pill") user.put_in_hands(P) - if(pill_number == RANDOM_PILL_STYLE) - P.icon_state = "pill[rand(1,21)]" + if(pill_style == -1) + P.icon_state = pick(pill_styles) else - P.icon_state = "pill[pill_number]" + P.icon_state = "[pill_style]" if(P.icon_state == "pill4") //mirrored from chem masters P.desc = "A tablet or capsule, but not just any, a red one, one taken by the ones not scared of knowledge, freedom, uncertainty and the brutal truths of reality." else if (product == "patch") @@ -56,17 +61,15 @@ P.name = trim("[product_name] patch") P.icon_state = patch_style user.put_in_hands(P) - else if (product == "bottle") - var/obj/item/reagent_containers/cup/bottle/P = new(get_turf(src)) + else if (product == "tube") + var/obj/item/reagent_containers/cup/tube/P = new(get_turf(src)) reagents.trans_to(P, current_volume) P.name = trim("[product_name] bottle") user.put_in_hands(P) /obj/structure/chemical_tank/factory/AltClick(mob/user) . = ..() - if(!length(pill_styles) || !length(patch_styles)) - load_styles() - var/choice_product = tgui_input_list(user, "Pick Product", "[name]", list("pill", "patch", "bottle")) + var/choice_product = tgui_input_list(user, "Pick Product", "[name]", list("pill", "patch", "tube")) if(choice_product) product = choice_product @@ -86,8 +89,7 @@ if(choice_product == "pill") var/pill_choice = show_radial_menu(user, src, pill_styles) if(pill_choice) - pill_number = text2num(pill_choice) - + pill_style = pill_choice /obj/structure/chemical_tank/factory/attack_hand(mob/living/user, list/modifiers) . = ..() diff --git a/tgstation.dme b/tgstation.dme index 86d1803b041b2c..e7120e853863d9 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3013,6 +3013,7 @@ #include "code\modules\asset_cache\assets\bibles.dm" #include "code\modules\asset_cache\assets\body_zones.dm" #include "code\modules\asset_cache\assets\chat.dm" +#include "code\modules\asset_cache\assets\chemmaster.dm" #include "code\modules\asset_cache\assets\circuits.dm" #include "code\modules\asset_cache\assets\common.dm" #include "code\modules\asset_cache\assets\condiments.dm" @@ -3034,10 +3035,8 @@ #include "code\modules\asset_cache\assets\orbit.dm" #include "code\modules\asset_cache\assets\paper.dm" #include "code\modules\asset_cache\assets\particle_editor.dm" -#include "code\modules\asset_cache\assets\patches.dm" #include "code\modules\asset_cache\assets\pda.dm" #include "code\modules\asset_cache\assets\permissions.dm" -#include "code\modules\asset_cache\assets\pills.dm" #include "code\modules\asset_cache\assets\pipes.dm" #include "code\modules\asset_cache\assets\plane_debug.dm" #include "code\modules\asset_cache\assets\plumbing.dm" diff --git a/tgui/packages/tgui/interfaces/ChemMaster.tsx b/tgui/packages/tgui/interfaces/ChemMaster.tsx new file mode 100644 index 00000000000000..6b911c77ee7a50 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster.tsx @@ -0,0 +1,453 @@ +import { BooleanLike, classes } from 'common/react'; +import { capitalize } from 'common/string'; +import { useBackend, useLocalState } from '../backend'; +import { AnimatedNumber, Box, Button, Section, Table, NumberInput, Tooltip, LabeledList, ColorBox, ProgressBar, Stack, Divider } from '../components'; +import { Window } from '../layouts'; + +type Data = { + reagentAnalysisMode: BooleanLike; + analysisData: Analysis; + isPrinting: BooleanLike; + printingProgress: number; + printingTotal: number; + transferMode: BooleanLike; + hasBeaker: BooleanLike; + beakerCurrentVolume: number; + beakerMaxVolume: number; + beakerContents: Reagent[]; + bufferContents: Reagent[]; + bufferCurrentVolume: number; + bufferMaxVolume: number; + categories: Category[]; + selectedContainerRef: string; + selectedContainerVolume: number; + hasContainerSuggestion: BooleanLike; + doSuggestContainer: BooleanLike; + suggestedContainer: string; +}; + +type Analysis = { + name: string; + state: string; + pH: number; + color: string; + description: string; + purity: number; + metaRate: number; + overdose: number; + addictionTypes: string[]; +}; + +type Category = { + name: string; + containers: Container[]; +}; + +type Reagent = { + ref: string; + name: string; + volume: number; +}; + +type Container = { + icon: string; + ref: string; + name: string; + volume: number; +}; + +export const ChemMaster = (props) => { + const { data } = useBackend(); + const { reagentAnalysisMode } = data; + return ( + + + {reagentAnalysisMode ? : } + + + ); +}; + +const ChemMasterContent = (props) => { + const { act, data } = useBackend(); + const { + isPrinting, + printingProgress, + printingTotal, + transferMode, + hasBeaker, + beakerCurrentVolume, + beakerMaxVolume, + beakerContents, + bufferContents, + bufferCurrentVolume, + bufferMaxVolume, + categories, + selectedContainerVolume, + hasContainerSuggestion, + doSuggestContainer, + suggestedContainer, + } = data; + + const [itemCount, setItemCount] = useLocalState('itemCount', 1); + + return ( + +
+ + + {` / ${beakerMaxVolume} units`} + +
+
+ + + {` / ${bufferMaxVolume} units`} + +
+ {!isPrinting && ( +
+ { + setItemCount(value); + }} + /> + + {`${ + Math.round( + Math.min( + selectedContainerVolume, + bufferCurrentVolume / itemCount + ) * 100 + ) / 100 + } u. each`} + +
+ )} + {!!isPrinting && ( +
act('stopPrinting')} + /> + }> + + + {`Printing ${printingProgress} out of ${printingTotal}`} + + +
+ )} +
+ ); +}; + +const ReagentEntry = (props) => { + const { data, act } = useBackend(); + const { chemical, transferTo } = props; + const { isPrinting } = data; + return ( + + + {`${chemical.name} `} + + {`u`} + + + + + ) as any; +}; + +const AnalysisResults = (props) => { + const { act, data } = useBackend(); + const { + name, + state, + pH, + color, + description, + purity, + metaRate, + overdose, + addictionTypes, + } = data.analysisData; + const purityLevel = + purity <= 0.5 ? 'bad' : purity <= 0.75 ? 'average' : 'good'; // Color names + return ( +
act('stopAnalysis')} + /> + }> + + {name} + + + {purityLevel} + + + {pH} + {state} + + + {color} + + {description} + + {metaRate} units/second + + + {overdose > 0 ? `${overdose} units` : 'N/A'} + + + {addictionTypes.length ? addictionTypes.toString() : 'N/A'} + + +
+ ); +}; + +const GroupTitle = ({ title }) => { + return ( + + + + + + {title} + + + + + + ) as any; +}; diff --git a/tgui/packages/tgui/interfaces/ChemPress.tsx b/tgui/packages/tgui/interfaces/ChemPress.tsx new file mode 100644 index 00000000000000..4ca021bfa8b816 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemPress.tsx @@ -0,0 +1,111 @@ +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Input, LabeledList, NumberInput, Section } from '../components'; +import { capitalizeAll } from 'common/string'; +import { Window } from '../layouts'; + +type Product = { + ref: string; + class_name: string; +}; + +type Category = { + cat_name: string; + products: Product[]; +}; + +type Data = { + current_volume: Number; + product_name: string; + min_volume: Number; + max_volume: Number; + packaging_category: string; + packaging_types: Category[]; + packaging_type: string; +}; + +export const ChemPress = (props) => { + const { act, data } = useBackend(); + const { + current_volume, + product_name, + min_volume, + max_volume, + packaging_category, + packaging_types, + packaging_type, + } = data; + const [categoryName, setCategoryName] = useLocalState( + 'categoryName', + packaging_category + ); + const shownCategory = + packaging_types.find((category) => category.cat_name === categoryName) || + packaging_types[0]; + return ( + + +
+ + + {packaging_types.map((category, i) => ( + setCategoryName(category.cat_name)} + /> + ))} + + + + act('change_current_volume', { + volume: value, + }) + } + /> + + + + act('change_product_name', { + name: value, + }) + } + /> + + + {shownCategory.products.map((design, j) => ( + + ))} + + +
+
+
+ ); +};

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 K&@9xj3HdKL$5e9w literal 7739 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 U^Hj(LcN+l9lU65+P26t%7gDh=jsO4v diff --git a/icons/ui_icons/condiments/bbqsauce.png b/icons/ui_icons/condiments/bbqsauce.png index 3ec5868b4cfd478fd1fc86f87e74885c09ee8719..c934c2d60ed051acf48d1a31871c3935a2bbdb92 100644 GIT binary patch delta 415 zcmX@bxR!Z>L_G%^0|P^GRn-?D#aJBV?!>U}oXkrgJKfX8F(jfjIYEMTae@esL4r#7 z;?-^c>Qnx`lNLW|)ZH3$+V|!B@$AY87k^ZXXXCTn+uEr22WQ%mvv4F FO#tx;vF!i= delta 186 zcmZ3>e2Q^`L_G^L0|P^2NcwRgr5NB7;tHf^81s~|v!8I{|No!i{{8!#1vnm0W81T5 zkBW-QT2%(i8KED6iWp0R{DK)Ap4~_Ta>6}b978nDCofQ)VJYmpz;wz42libJn*_Ax zp9~0K^j#p}dqBpwb&_|dP#4qW6#?$7B8?wHLKr7LF*Y(0jm*qoO3aAjiH%_iWMyG} lsi4rKc3=Su%av{?hE2^vnyPx$JxN4CR9J=WmN8DlFcgOWBBnBB%N0CFS+J69xj+VPz-YQwnGtJX&w~E~pdcGDoF^*(YMx#zajnAY0Zpkzwb6 zM21LY=(=Xio|6f1_H)VBcY+g9DM1!NI)VPCMHF<+i5RozF<3U_Z1fZ4B%GSF3t$zZ zMz^D5JxBbFfJV2wD)`Gdm6NYvt9P~kSOU85PKEp$?kk?@KSlsBvxoqY%Q5RGB2LRe hvEjS}9*^f=@CCNHZ?S-u_vrut002ovPDHLkV1oT9r@R0F literal 0 HcmV?d00001 diff --git a/icons/ui_icons/condiments/cherryjelly.png b/icons/ui_icons/condiments/cherryjelly.png index 3940c4e1cab0ce8e3f296064edae0e3d8a9ad347..96ea15cb3030db18c7edfe84796af69aba5da85e 100644 GIT binary patch delta 473 zcmV;~0Ve*31o8urBYyw^b5ch_0Itp)=>Px$tVu*cR9J=Wma$6$Q5?s=N!L(tI%Icr z2oC9DlVCU~9JthE(9|gR4`^V^wS|ik`431CK?DW5wFnL_Du^I1wg`5jw4{)O4%bk3 zb?V@IaxL9wx_jLFeLwejzjp^%Sp0X^XeWx%Q}y?Ksc=tKYk!?K{3LP+01!A{8&+u~ zh$k!xR|b6mz*F&=cqMG40vfa7v=9qan+=HJ;9R)C@u)T%<_cWw9jO3t_mqdn>xLK( zLg07^9FNL(xc1Dl5O2aOhX)S}-n7ze;LPSGEl1Y{iO~etGZLZJI|P=2GMbtvpbRHC z_Svz^GDy6R(SIBMgav$dD5EK=-4F8w03hEQLSPw0eRlNNsbO3hPDsm<3;0uUc)V^D zq@-cF{i!&(K_B(YTXO|8Lb(iH+8x^Is|x@?u5_+nOJbU;2K7l;mXdm?B&H2ArVEs% zBm%BY)a5L89=COgKNAS$GN^UOUv0VXKwZvKg##;YLQ<~XK~2uWpNdlp5Pdph&WI}5 zHz2UgTo=^ktbPvMycL(OOZ-0&b4FAEIB;zl&H3k!`;zV(_|?*a-o P00000NkvXXu0mjfBvj5e delta 494 zcmVcQu5G4THw!NS* zz^Us3G=Qi=JW~kEg&am!lS=fS>*a~KYjp!d@4bk znZ{XLMRfO2tsL>jOmlIPz`6VrKR}>DZ#Rb7Nx|@`A3M5fFdiFd6|-JGm3S~FpGsgA zv)+S2x&U!Wsec7Qk6UZ!yzTn8{=0V0wMPGy0fH8^nQ8V9D~Ngv)k-BC!YE`c0DV99 zLT`MV4~H-}JsYk&?{Z22+B1-wp5@i(6mx$!k{=d_lDc^wEvuOIeBW<)Ccl>a+g|l6 z&;|$!Mj>UkMWzhP$wIQXkcEz`%l$Kiww+?W9cgtS`r#EZL6Tj;Q-)ra|`X|1U-E-ZN^VD2htn!bbj=J z(FfYgiNs0<;G5VdI@1b(aRXIWdAUmMnD!Dk;o(6P-^4zV@CqHh>rxvTz+C?$W8q@v z`X8BHEM$Br^Sb~>a)9xn46}=czYAbg0I*yE({lPl%3M|LQTqLZ8eUK;esrb=MpDXE z?NO3RC^`l9zEN5{J^-R0dwPDO#0t?n≷+S5NnsIgm~y(a)Dn`-uSH`^6(ko>f-= ZLhtbIi3Zb^$sPaz002ovPDHLkV1g<;-iQDI delta 177 zcmey!e2{U1L_G^L0|P^2NcwRgr4`^4;tHf0cxo9um-+_#G0gnWz+im!>eY&h3I>Lm z48}n2e}<&3Dk>@rY5#ZlyuSui%vciS7tG-B>_!@pxHdaOBQ7&nwT9cV7F!2V!p6-;Q|HG b#R3dd%y<{fYH>~gn#kbk>gTe~DWM4fQ*}L* diff --git a/icons/ui_icons/condiments/cookingoil.png b/icons/ui_icons/condiments/cookingoil.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8a192e4017eaaf797b5b78b70f419fede83001 GIT binary patch literal 473 zcmV;~0Ve*5P)Px$lSxEDR9J=WmoZMmFcgOWBGxDaQWK*Lv8r}&&C~^z3$QWv5Z&4Xkd1?|^#ULc z;IdOy=}=)>i6P1X%#bEABvi4RvXCcvu%GS!%X=@e12p#Et!1)kVnO~Kdx*{UszvoX{eK zI=?o6)h>eT1B51_R>f5a0O*gvSG%ZQ03gZlJ_4-FFG4Uv!C#-t{l8hIPjMR3eFV4& z!9@6d4xu?*r)`68w)FudDai9mD7YGW6{bG|59U$jC^RW(QlNDqshWb?0r+Oy3g(cm zZ-daoDLBbtlp6CK*=gGdW<`MMJ=kh@!sA%AyFssT`FLEs{mp+tV|CjXWS-N?n*V>5 P00000NkvXXu0mjf=|<0p literal 0 HcmV?d00001 diff --git a/icons/ui_icons/condiments/emptycondiment.png b/icons/ui_icons/condiments/emptycondiment.png deleted file mode 100644 index c34f290873641fae52fc83ef730eb1f7e03d2304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$DvS0LTd(Xn{(;sXZ`Y~Q~9 z|NsBK!G0<#Dv4=xb^_&COM?7@8SVl>{D&)RfdUquE{-7@=aUzxCg?i|Cx|GhD6H{t zXt?O%*$~pW#UzAr+l31(tGE?%9CtL!F=_c_Bx-1Q9Mxc9P`bopwEa-Q37{Dap00i_ I>zopr0B5*1F8}}l diff --git a/icons/ui_icons/condiments/enzyme.png b/icons/ui_icons/condiments/enzyme.png index 2d20c564eeb06dad21bf13d8b9e275acafb87070..a72a83a5c6cc73755ec5b35ff07bc5d1ffbde29a 100644 GIT binary patch delta 444 zcmV;t0Ym<=0m=iA7=H)`0001UdV2H#0004VQb$4nuFf3k0004mNklxX0O56rhP#e1M2`RV_+~K^3^E^M^_nrf`Y$+%fikPub#D7%rm{AG$%yn5?Hc^2P z0|0p48kJU0#e!Ms!A3{pq1*#pG&-6XK-_`Xy&{c{Mx&!q-?^PW0DyVE%FFS)iiH}$ zZ|Hvl1XEt~V`XW$ZhPE>k6fawXc=HUTopn*0)KD=BcG8TR|AM{B_?X$b>$}#Jw)m2 z6vh1_hrSD*OMh1wWSGByoDM+X%uOx{+jnt{d>F8E%T0-u3?SgwDHv^0;J7UR1BHVY>1>IB zUmt$ZZ+|at9ZJ-JTvCH%X{06z7Xtt^FE@wR5J0cXd^IeOAfKo>2BG81o^%~n{VX3C mD46n^0D8S84!33NPv{fTl6vkQ!rVgu0000nx%w`G~ewy<@f)B*+7LN*4M2Rs=zt}`4#mV3JT KxvXO^zLYI7(cM0#u=e@gd0SXl=v}YYq9f$pPynpalsMJaj+1vXUa^53~ zli6v+msd?Jy*Xr65n9t<#l~btf)F|l`|Wk{H}6xJ@LWBCtSWeVbV!rnI+&eCtZ8*p z;Vcl#av_=ocMCMF4p~)l7Y6`YRiFVdCNr)d7r?SyXg|sFYU#~kS+3AecnG%{f1Wtf zSFkMvMTZn8+kauO9rkOTKBwyT!mR*E6KFN7nd|kti*Rl2X?gbmo84vs{70lM;1%xn zlCA>=*wb?EtsnuknpM~i%Y+D60cq9Q>k>iEe<1Lpyd7=Hu<0001iRA_PK2qg3fB(w+;K%fG{WGu#zH*r4uY!Bvt9jrPf R7>NJ?002ovPDHLkV1nX|QtAKz diff --git a/icons/ui_icons/condiments/honey.png b/icons/ui_icons/condiments/honey.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf510d6f5b08eec9e26aebef6e4b9a7a79be8c7 GIT binary patch literal 461 zcmV;;0W$uHP)Px$heb_lR1hl zaC_LAXVSaxlCq#JKyW4xcLAV*y%vC$YQNZMe2i!!$alc9for>wY8(1gZ$t!VvVX~> z;7q=C;wSl?>NC?NtR98${R4HL1(JaN%UDTsy%vv$erTtneOUx&Qmg|@E8*O-)!+ay z8US7!pj<+&g@Q9#uZ4jgZekHhMgyQ&4%bvp^+jk`!O)NY)Uv;3U^GzI=#uFO(gZ{z z{^STE)|MA#WyerNB!gF*V|1RLNj|l!KyW5+n+8@l)pSR}i)Fw&GeGSHq%xd5-{d@N z7bLafD2Uev`pvlJ3kybSW&ApVf8TDW*>ZAna;EVP#4)G4_p%9f00000NkvXXu0mjf DUI@rPcgp@Qauv3Yl43H;)H-M+eTCsHK8?eE`&e*By00R;{KsqF@#e~$Q-NO(F z4Fn|L(Uu|q6yMqRf3barTD6pFb^UCm=2tIgnFeBA3(+5rRDbKm0IjZ{9iQv~&s2RVel z3*+Q7{xEQ_C1P&FaYE688mYVB^m=b~00*7i{IDa35Cd$TmrbP*Vu071xHNvejDMK9 zAOL{pcT=gk2q2oWHs5Y{7xA~eOFgH_^QwAsUCnFN`WJcw7#&yEE#F-V00000NkvXX Hu0mjfnIWH& delta 161 zcmeytw2^UwL_G^L0|P^2NcwRgr5NB7;tHgTco}BPG57}i{daTQufy>8#{Lsqn=2|R zR8&;fsxnN~I&l%Gh_NKdFPOpM*^M+H$IjEmF+}5h@&e@ta~jkRXgGK{giLH;NS-i> zVI`BS>eoGa&+{1#KUmii0Ag2kRzf%qZmA0 L{an^LB{Ts5O9wP? diff --git a/icons/ui_icons/condiments/ketchup.png b/icons/ui_icons/condiments/ketchup.png index c9b8516ff8f770a28715eb8abcd74c74f1694910..4896289ec23c89b5c96576838777d6efd3ac77eb 100644 GIT binary patch delta 335 zcmV-V0kHnC0p0?T7=H)`0001UdV2H#0004VQb$4nuFf3k0003PNklB7YdYp z<*q#M+o$pDf|HYl;wVwJHC}AYhvPmmSBTMM;7RM0OaTDW^?&AKJemwVlSHfl?ja+9 zpC`5H1u;MzB`RptzO4m~8gY~;lO7O%@VQDar%l%ziZJzN@c1SynhwW(;41;$kWz_$ z!_Y@*2yIw24t>=8BuiD4K)c#vH=Ewv+s&r5t1U@6K-dGJkLq>aS!|cT_A0Ms7TYD# z1jLgtJLG)4bw~lok9)F14sa9dApqJ~!(_+Y$XM$+C!qsy01n{)0?bc%e~nz}Jpcv| h61ZN=w&qSw0B88bW5!PuhoJxf002ovPDHLkV1mIOkthHF delta 160 zcmcb|w1IJgL_G^L0|P^2NcwRgB@y5g;tHf^3ozUhW$+F5`_Eup#LKXB=~5LHl}{@i zl7VuJB|(0{3=Yq3qyaf@o-U3d8t0Q2s3zz;2q%ars3&b>Dds%n4BEK_{<=j zIizudfk|V4xk=*&fs)1$=8|ZGJC6K}qUu`=L_{Q)B#AIF?BL{j;}h;-4m6U%)78&q Iol`;+0AyD#WdHyG diff --git a/icons/ui_icons/condiments/mayonnaise.png b/icons/ui_icons/condiments/mayonnaise.png index d9b44ee2c30db070c86999ace2584ddcdf59c7b0..0d6301b8935a100c12f5dea39d73d1cd51c13b88 100644 GIT binary patch delta 331 zcmV-R0krkHFB~gXM*Rg*7W3+NKj>K+vsygJVF6LP3?z zr65%Ql4Z$f-~aiBvmq#G4O!#lPt8R{CZj^Eaq{ah*0|cdxqqh3v-7i9dU*jX-*lbw zs{yQWl6I0$YiTFJ8YjK0^OiQB`oLsV)VD3hQ<^YG$EiA>x&lqpi_0$XQGsGS)uz$| z+}-x1f><8SxJJ90&HD#!AP15!u{g>hYHR&<0Q0vePR_1*9u9~jn3s7y@5P6dj}My# z09edQPO}>TUPNE+S`+tS+_1c@txZ%xTT|a# z-`()Ahi3rC%=2rOXlSfxP)S&$qS3MFh=<_p28Bt2)&h*ID#nH^ERGHg^Ba_AH3+sf t2+e9RjOb^Ybh%d~QO~u5;U_Z(!_7MWb$9IId4QHOc)I$ztaD0e0st-!Luvp3 diff --git a/icons/ui_icons/condiments/milk.png b/icons/ui_icons/condiments/milk.png index b2d0bf97db8924c534aab99149377ded6268ebf0..e0c4cf03cc8d0c2b9a08213953c1e07255f688e6 100644 GIT binary patch delta 308 zcmV-40n7gA0mA~27=H)`0001UdV2H#0004VQb$4nuFf3k0002}NklsN1(WF8Z#4!{OHyKggicHbsT zFG(SQ&38rHm{A;(Dol<|2(8@bt}NhRM?=lcHr5jDk@x_yGVmq)j_%xEqWB0000n delta 216 zcmX@i^n!7ML_G^L0|P^2NcwRgr4ry1;tHg%T)DDv;ljs{A2X!=KYaKwgYp0E+qb8s zrM-Urnt|az1H;T8zF9|s>KIFc{DK)Ap4~_Ta*8}%978nDCrboOnAV`Sp_*B1{@y)% z_Ao>`1O@~I$haOjbK^_^V`M^9(JZA^4KpJZyBcOLkO*9L;K~Jukj9h8+Ey^NH8p84 zaW_VZh%0dF6f!cUFp5rK=#m7wrBQ?F*s)_8e)%FSO>8QReS8WD5*`c;y$hwj8#i;Z Q1FdK9boFyt=akR{0AjOI8vpt`1PVxhLzDKw(g)-&md20&SlVeC#g3y_XzEX8MgGmV1KM-1TA zw%IwUvoaUv;<{9 delta 196 zcmdnNe1&m>L_G^L0|P^2NcwRgB^Tfm;tHhCoH1UzcJ0lZ8E1@*|1%gbj*l^BFy6db zx1pgS>iq94pbEy4AirP+hi5m^fSeRh7sn8d^T`r#8j6`_F-&Hf)i6nD784s=h$@$Y zVakGw7caIfau(nanZVk@+Ix|uhxa0D3vVC`59>lETMp;ez%3hgGB`4Aa>&T6)aY`k v$jr=SveWfxI`%@()TLCjSx6v2{|Dn*FMgrPvX|I^7BYCc`njxgN@xNA$_hd0 diff --git a/icons/ui_icons/condiments/peanutbutter.png b/icons/ui_icons/condiments/peanutbutter.png index dd751efaa3e973017ebfd1d5c30f282bce2e8b3f..a9d048d5e9acba74f97d06814d2b327e9f83c8b7 100644 GIT binary patch delta 400 zcmV;B0dM}o0-pnr8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00CJ^L_t(oh3%C+NW(xF zh95<6aw(Lyql0wmA}$>TD;)$^hb|6+gSf;ci@Q@7r-GuJyV5SDI0+s41MQe0nVLpR zXmB?US}_t!zQgEX-sQNv@80*}E|-Hui4y&>7E~5#EBImK)qiKX-;zrBZgD4kvR(J3 z5TfF_;qSU_*F`%KxiCt&3dCYmfVd}(H8-TZ$a1Sv$3`w zI%m6Msa^CPSl!FeF?sF9ibt2q0HW9M{2=4+m$rfMZ@_XK?gs;^cQL$%VGv($ u!Bw*<3ReP{L4=JTUpPvBi4y&9y#l7ThF&Lbqi+BJ00{s|MNUMnLSTX}p0v3D delta 306 zcmV-20nPrO1HuB38Gi!+002a!ipBr{07y_wR7C&)0OT?=;apwpW@qktd(&H7y)7=V zg<83pdB3QVu5&rwnN;GbZ`_D9;JJ|c^x*2mpXRcD$CP5$qjJNMV4!e7-jqwfem#L> zbA|u_00DGTPE!Ct=GbNc005{-L_t(Ijopz;4#OY}1#Kw#kbe*Y)b0ImTAQScsD?$Q zZu-2jG-D73;17eGE;O8$WSQM+MA8Jb^#Eg}Qv^4-L6Al1v^&OW7UTx+y~h2r&eP~6 zA!r5*+q#4!ir|9?^2CNA0%GJ;MHMRE_Y_eV4xUoVY;=Uu6@-_LAQ#+oYzpUmTga)% zd`sYG=6v!m7c13Y_4TvplLHWK^q^2n;{Z>3m(G8c7si$ih1p+X&Hw-a07*qoM6N<$ Ef+Mz#xBvhE diff --git a/icons/ui_icons/condiments/peppermillsmall.png b/icons/ui_icons/condiments/peppermillsmall.png index 2473641a05c083da827eff39ef49b9a31bd1bf08..8cd77e2ceeb8da49ee464a1e01bc0ecce8655e93 100644 GIT binary patch delta 316 zcmV-C0mJ^H0m}lA7=H)`0001UdV2H#0004VQb$4nuFf3k00036NklF^@1!1u#lta(SNOz3`^EBFvy5Wz%71s z>m>agARr>a@aWb_hEMM#7(Toq&*v~eb{gkD2}sICJ~}gNdaB z!_!@pW9sSR7@~1LS%OvJ!K0>A>At?A4x)l0E|--Kbf_t;>o}Dz tA|&J>8ldAOoFU@2`RI)qi3N-d;@!;K(`T;x%D@dY!qe5yWt~$(695MqDv1C9 diff --git a/icons/ui_icons/condiments/rice.png b/icons/ui_icons/condiments/rice.png index 62ea6b7f3a781a86afbec15b75f32ab01b34c0a5..b49fb8429793f851771762484f5b49d16084f810 100644 GIT binary patch delta 484 zcmV0p{*a}}q?5I56k;$n1RF#ZMx2W4R72RJyeNL*|}ScwCPLqk(a zSY$9EK%*=~!=g(aphOhf%SUACvz#V9=RNN|_arS~V`DRAW`AfCLvcxeE5E|UxM3Bg z%Mi8h98FRnlGe{Jczms{;9zgVGCsF{PUMDe5AduL06`^bo@Z)6$;bdm zM{GE9rADWI41WUvpq1+*O@Q{=EDa1JHVUQ&J__wC7?pOtIkU84oIv`#_N&5VCQ&2pecVBgFSNz z+b+jY-M+$w>Oc6pA3vG={mlI^k9px4r}l(3Gy5g{Wlr}xY015RIMC3*$jHpZ#vazwV>Tc)X}<@4=yKEDFGfWgz% K&t;ucLK6TT?@;al diff --git a/icons/ui_icons/condiments/saltshakersmall.png b/icons/ui_icons/condiments/saltshakersmall.png index d21e322239c98217198155b08d33334e87237f3c..70b17e2cb5565e6ca197d3a26ae19160309c270d 100644 GIT binary patch delta 273 zcmV+s0q*{w0iXhq7=H)`0001UdV2H#0004VQb$4nuFf3k0002mNklh(#+uPgUym?bwTU$!` zk|9uzu_VYZn8D%MjWi&~%+tj&MB{w21gnC8RM)9=b8~SAQ9%)x%Zm=Qs4aNZaw@$@ tFwjA?z(qL0&&Sx|YI4pQgB=VE30^GP9AYhZfhKS=c)I$ztaD0e0sz%KEu#Pc diff --git a/icons/ui_icons/condiments/soymilk.png b/icons/ui_icons/condiments/soymilk.png index ecca184908d490423bb1339215d66b41aca8b8b9..1117e532fce80f7ee438e36f82cf3bcd7ce5530e 100644 GIT binary patch delta 319 zcmV-F0l@y~0nP%D7=H)`0001UdV2H#0004VQb$4nuFf3k00039NklsN1(WF8Z#4!{OtH@P#!ZgM9} zFG(SQ&3A2g^HCfU_#=~c4$#!rz=(o}`@S&9%kx0k55F*II)CAhB6L7;6dcMu%JA^v z7lwxqzc3uiJxa2EswBeKGv314q$Wa=(*Pk0XzBoDfSl?V`|Tvx81fttyUCp*OOXLt ziEy#sPKxqA#SVZu0_G4(0NGK1>=3#;fLig-z(8VcD3UJpA6Dw&0uLX4VR$q19nt1e zr81%fkQ4<4;y9%YL4E;v)vQ~!fuV+>k~R)_`sOjiKIFc{DK)Ap4~_Ta*8}%978nDCrbou$YPvz;2rOZnrjy> zTwq9Hba!-g3>0BZR!wzgPia(3PIeb*OjCXAAj0VE80Z?(sJ7H4q%keoxkR@~gGu=I zB_UaL1x}wJCZ-fd^$84Jl9`#Aof=HXjvdqR(-&cBVp3uJR-}+1;Q@5WHmRe#mla(B PTF>C=>gTe~DWM4fW8O^m diff --git a/icons/ui_icons/condiments/soysauce.png b/icons/ui_icons/condiments/soysauce.png index 92b129447a2ffee2c066c6cf5fbd7c517b4de661..aafb139f3231d9aa82960d9ee757d17116b8e8c8 100644 GIT binary patch delta 327 zcmV-N0l5Cj0oDSL7=H)`0001UdV2H#0004VQb$4nuFf3k0003HNklBBz{F-1z~HUt>- zJ}7#NvVi7&06-?883eo;L;S2+@nGAmW?&Q5iU;@am2WR5+ls62fczJ1PP}rs!{KlM Z`~c6=O9Mx)$tVB-002ovPDHLkV1iw^jrafn delta 185 zcmcb{bdqs`L_G^L0|P^2NcwRgB@y5g;tHhGfS7^dKZ9|aF@rIXk!Jkg*!baO|Cc~f z#*!evUsc`egjT8$+&U{utsn@brxE# zTAB6Ibp?|ak7EW?6AQ}>8CF+O58(ho5fL6EC7p(>7KIA}HB5RAjR7gyQ(|JArv}Vf ewWQ@iFdxHqc|qZa8ymKP+~eu$=d#Wzp$Pz~OgTpY diff --git a/icons/ui_icons/condiments/sugar.png b/icons/ui_icons/condiments/sugar.png index d21788dc342c469c0758c01c96d899ca57b4a32a..3cb1264ed35f57e023fb8289f1b20947f968767e 100644 GIT binary patch delta 552 zcmV+@0@wZL0ks5>7=H)`0001UdV2H#0004VQb$4nuFf3k0005+NklDskx|65sEG2Fg=o8k5A*8~j|6%}PrRaIp;c7N;`Q6Yg>L3@3}e`{wa zqAbSdkfVF|F;q4-;I)GVpQN?36N9R%D#?~JFfbtWH8$W?ht~l|_wGYAj0AA|_HDR+ zvK_#{z(7{;lcJBH11NC>)f}*O)oKO?1_lQ2uuwP~#;1z|kS#*DlzIMk6#m~tPm&zK zM2w=Xt5(A?x_{-ShGqp1m^*e7=Hu<0001iRA_PK2qg3fB(w+;K%fG{WGu#zH*r4uY!Bvt9jrPf R7>NJ?002ovPDHLkV1k!UR@DFi diff --git a/monkestation/code/modules/virology/items/vials.dm b/monkestation/code/modules/virology/items/vials.dm index e76b11b6ad944d..fa90227f4cddf9 100644 --- a/monkestation/code/modules/virology/items/vials.dm +++ b/monkestation/code/modules/virology/items/vials.dm @@ -1,18 +1,6 @@ -/obj/item/reagent_containers/cup/beaker/vial - name = "vial" - icon = 'monkestation/code/modules/virology/icons/items.dmi' - desc = "A small glass vial. Can hold up to 25 units." - icon_state = "vial" - inhand_icon_state = "beaker" - custom_materials = list(/datum/material/glass = 250) - volume = 25 - possible_transfer_amounts = list(5,10,15,25) - fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100) - fill_icon = 'monkestation/code/modules/virology/icons/items.dmi' +/obj/item/storage/box/tube + name = "box of test tubes" -/obj/item/storage/box/vials - name = "box of vials" - -/obj/item/storage/box/vials/PopulateContents() +/obj/item/storage/box/tube/PopulateContents() for(var/i in 1 to 7) - new /obj/item/reagent_containers/cup/beaker/vial( src ) + new /obj/item/reagent_containers/cup/tube( src ) diff --git a/monkestation/code/modules/virology/machines/centrifuge.dm b/monkestation/code/modules/virology/machines/centrifuge.dm index 693da987df3ae7..215474f833693b 100644 --- a/monkestation/code/modules/virology/machines/centrifuge.dm +++ b/monkestation/code/modules/virology/machines/centrifuge.dm @@ -5,7 +5,7 @@ /obj/machinery/disease2/centrifuge name = "isolation centrifuge" - desc = "Used to isolate pathogen and antibodies in blood. Make sure to keep the vials balanced when spinning for optimal efficiency." + desc = "Used to isolate pathogen and antibodies in blood. Make sure to keep the tubes balanced when spinning for optimal efficiency." icon = 'monkestation/code/modules/virology/icons/virology.dmi' icon_state = "centrifuge" density = TRUE @@ -15,9 +15,9 @@ var/on = 0 - var/list/vials = list(null,null,null,null) - var/list/vial_valid = list(0,0,0,0) - var/list/vial_task = list( + var/list/tubes = list(null,null,null,null) + var/list/tube_valid = list(0,0,0,0) + var/list/tube_task = list( list(0,0,0,0,0,), list(0,0,0,0,0,), list(0,0,0,0,0,), @@ -63,33 +63,33 @@ if(.) return - if (istype(I, /obj/item/reagent_containers/cup/beaker/vial)) + if (istype(I, /obj/item/reagent_containers/cup/tube)) special = CENTRIFUGE_LIGHTSPECIAL_OFF if (on) - to_chat(user,span_warning("You cannot add or remove vials while the centrifuge is active. Turn it Off first.") ) + to_chat(user,span_warning("You cannot add or remove tubes while the centrifuge is active. Turn it Off first.") ) return - var/obj/item/reagent_containers/cup/beaker/vial/vial = I - for (var/i = 1 to vials.len) - if(!vials[i]) - vials[i] = vial - vial_valid[i] = vial_has_antibodies(vial) - visible_message(span_notice("\The [user] adds \the [vial] to \the [src]."),span_notice("You add \the [vial] to \the [src].")) + var/obj/item/reagent_containers/cup/tube/tube = I + for (var/i = 1 to tubes.len) + if(!tubes[i]) + tubes[i] = tube + tube_valid[i] = tube_has_antibodies(tube) + visible_message(span_notice("\The [user] adds \the [tube] to \the [src]."),span_notice("You add \the [tube] to \the [src].")) playsound(loc, 'sound/machines/click.ogg', 50, 1) - user.transferItemToLoc(vial, loc) - vial.forceMove(src) + user.transferItemToLoc(tube, loc) + tube.forceMove(src) update_appearance() updateUsrDialog() return TRUE - to_chat(user,span_warning("There is no room for more vials.") ) + to_chat(user,span_warning("There is no room for more tubes.") ) return FALSE -/obj/machinery/disease2/centrifuge/proc/vial_has_antibodies(obj/item/reagent_containers/cup/beaker/vial/vial) - if (!vial) +/obj/machinery/disease2/centrifuge/proc/tube_has_antibodies(obj/item/reagent_containers/cup/tube/tube) + if (!tube) return FALSE - var/datum/reagent/blood/blood = locate() in vial.reagents.reagent_list + var/datum/reagent/blood/blood = locate() in tube.reagents.reagent_list if (blood && blood.data && blood.data["immunity"]) var/list/immune_system = blood.data["immunity"] if (istype(immune_system) && immune_system.len > 0) @@ -142,50 +142,50 @@ .+= emissive_appearance(icon,"centrifuge_special",src) .+= mutable_appearance(icon,"centrifuge_special_update",src) - for (var/i = 1 to vials.len) - if(vials[i]) - var/obj/item/reagent_containers/cup/beaker/vial/vial = vials[i] + for (var/i = 1 to tubes.len) + if(tubes[i]) + var/obj/item/reagent_containers/cup/tube/tube = tubes[i] .+= mutable_appearance(icon, "centrifuge_vial[i][on ? "_moving" : ""]",src) - if(vial.reagents.total_volume) + if(tube.reagents.total_volume) var/mutable_appearance/filling = mutable_appearance(icon, "centrifuge_vial[i]_filling[on ? "_moving" : ""]",src) - filling.icon += mix_color_from_reagents(vial.reagents.reagent_list) + filling.icon += mix_color_from_reagents(tube.reagents.reagent_list) .+= filling -/obj/machinery/disease2/centrifuge/proc/add_vial_dat(obj/item/reagent_containers/cup/beaker/vial/vial, list/vial_task = list(0,0,0,0,0), slot = 1) +/obj/machinery/disease2/centrifuge/proc/add_tube_dat(obj/item/reagent_containers/cup/tube/tube, list/tube_task = list(0,0,0,0,0), slot = 1) var/dat = "" - var/valid = vial_valid[slot] + var/valid = tube_valid[slot] - var/datum/reagent/blood/blood = locate() in vial.reagents.reagent_list + var/datum/reagent/blood/blood = locate() in tube.reagents.reagent_list if (!blood) - var/datum/reagent/vaccine/vaccine = locate() in vial.reagents.reagent_list + var/datum/reagent/vaccine/vaccine = locate() in tube.reagents.reagent_list if (!vaccine) - dat += "[vial.name] (no blood detected)" + dat += "[tube.name] (no blood detected)" else var/vaccines = "" for (var/A in vaccine.data["antigen"]) vaccines += "[A]" if (vaccines == "") vaccines = "blank" - dat += "[vial.name] (Vaccine ([vaccines]))" + dat += "[tube.name] (Vaccine ([vaccines]))" else - if (vial_task[1]) - switch (vial_task[1]) + if (tube_task[1]) + switch (tube_task[1]) if ("dish") - var/target = vial_task[2] - var/progress = vial_task[3] - dat += "[vial.name] (isolating [target]: [round(progress)]%) X" + var/target = tube_task[2] + var/progress = tube_task[3] + dat += "[tube.name] (isolating [target]: [round(progress)]%) X" if ("vaccine") - var/target = vial_task[2] - var/progress = vial_task[3] - dat += "[vial.name] (synthesizing vaccine ([target]): [round(progress)]%) X" + var/target = tube_task[2] + var/progress = tube_task[3] + dat += "[tube.name] (synthesizing vaccine ([target]): [round(progress)]%) X" else if(blood.data && blood.data["viruses"]) var/list/blood_diseases = blood.data["viruses"] if (blood_diseases && blood_diseases.len > 0) - dat += "[vial.name] (pathogen detected) ISOLATE TO DISH [valid ? "SYNTHESIZE VACCINE" : "(not enough antibodies for a vaccine)"]" + dat += "[tube.name] (pathogen detected) ISOLATE TO DISH [valid ? "SYNTHESIZE VACCINE" : "(not enough antibodies for a vaccine)"]" else - dat += "[vial.name] (no pathogen detected) [valid ? "SYNTHESIZE VACCINE" : "(not enough antibodies for a vaccine)"]" + dat += "[tube.name] (no pathogen detected) [valid ? "SYNTHESIZE VACCINE" : "(not enough antibodies for a vaccine)"]" return dat /obj/machinery/disease2/centrifuge/attack_hand(mob/user, list/modifiers) @@ -196,14 +196,14 @@ if(machine_stat & (NOPOWER)) to_chat(user, span_notice("Deprived of power, \the [src] is unresponsive.") ) - for (var/i = 1 to vials.len) - if(vials[i]) - var/obj/item/reagent_containers/cup/beaker/vial/vial = vials[i] + for (var/i = 1 to tubes.len) + if(tubes[i]) + var/obj/item/reagent_containers/cup/tube/tube = tubes[i] playsound(loc, 'sound/machines/click.ogg', 50, 1) - vial.forceMove(loc) - vials[i] = null - vial_valid[i] = 0 - vial_task[i] = list(0,0,0,0,0) + tube.forceMove(loc) + tubes[i] = null + tube_valid[i] = 0 + tube_task[i] = list(0,0,0,0,0) update_appearance() sleep(1) return @@ -218,12 +218,12 @@ var/dat = "" dat += "Power status: [on?"On":"Off"]" dat += "