diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm index ebd2ee31641..e4631936693 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 c8c7e9148f0..747fc2dfbbc 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -340,6 +340,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 444c060c0dc..a41ec8b038a 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -442,6 +442,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, @@ -472,6 +473,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, )) @@ -501,6 +503,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 bc8d7a4f862..8ad398b67fe 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/cup/beaker, /obj/item/reagent_containers/cup/bottle, /obj/item/reagent_containers/cup/vial, //SKYRAT EDIT HYPOSPRAYS + /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/medigel, /obj/item/reagent_containers/pill, @@ -871,6 +872,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 c3de50ffe7e..c0e393a9d2d 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -81,6 +81,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, @@ -734,3 +735,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/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 26a96193364..fb05df7e26d 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 cfe0c7c998d..3a4fcfb0361 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -17,6 +17,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 a34759789b8..9c206695fe4 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -256,6 +256,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 @@ -311,6 +312,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, @@ -434,6 +436,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/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index fea90607104..9e36190b09f 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/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 39ac439858f..8f896345718 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -422,10 +422,10 @@ reagents.trans_to(P, vol_each, transfered_by = usr) return TRUE if(item_type == "bottle") - var/obj/item/reagent_containers/cup/bottle/P + var/obj/item/reagent_containers/cup/tube/P for(var/i in 1 to amount) - P = new/obj/item/reagent_containers/cup/bottle(drop_location()) - P.name = trim("[name] bottle") + P = new/obj/item/reagent_containers/cup/tube(drop_location()) + P.name = trim("[name] test tube") adjust_item_drop_location(P) reagents.trans_to(P, vol_each, transfered_by = usr) return TRUE diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 88c3ee4ada7..273b2309c05 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -201,14 +201,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 @@ -223,8 +223,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/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 879d2d93546..b1e38748d36 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -559,3 +559,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 50907cc8b8f..a2dae93c22e 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 @@ -473,7 +472,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/icons/obj/medical/chemical.dmi b/icons/obj/medical/chemical.dmi index 9c97904b7c9..63a748eede5 100644 Binary files a/icons/obj/medical/chemical.dmi and b/icons/obj/medical/chemical.dmi differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi index 288c12548b9..6f2564021d9 100644 Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ diff --git a/tgui/packages/tgui/interfaces/ChemMaster.js b/tgui/packages/tgui/interfaces/ChemMaster.js index cfc9a4803c6..9477ade25ba 100644 --- a/tgui/packages/tgui/interfaces/ChemMaster.js +++ b/tgui/packages/tgui/interfaces/ChemMaster.js @@ -319,9 +319,9 @@ const PackagingControls = (props, context) => { )} {!condi && ( setBottleAmount(value)} onCreate={() =>