diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 97c81cf7cb..6e4c2e4dd2 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -7,6 +7,7 @@
#define MAX_MULTI_AMOUNT 20 // Max number of pills/patches that can be made at once
#define MAX_UNITS_PER_PILL 60 // Max amount of units in a pill
#define MAX_UNITS_PER_PATCH 60 // Max amount of units in a patch
+#define MAX_UNITS_PER_BOTTLE 60 // Max amount of units in a bottle (it's volume)
#define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever
@@ -245,7 +246,18 @@
if("create_bottle")
if(condi || !reagents.total_volume)
return
- tgui_modal_input(src, id, "Please name your bottle:", null, arguments, reagents.get_master_reagent_name(), MAX_CUSTOM_NAME_LEN)
+ var/num = round(text2num(arguments["num"] || 1))
+ if(!num)
+ return
+ arguments["num"] = num
+ var/amount_per_bottle = CLAMP(reagents.total_volume / num, 0, MAX_UNITS_PER_BOTTLE)
+ var/default_name = "[reagents.get_master_reagent_name()] ([amount_per_bottle]u)"
+ var/bottles_text = num == 1 ? "new bottle" : "[num] new bottles"
+ tgui_modal_input(src, id, "Please name your [bottles_text]:", null, arguments, default_name, MAX_CUSTOM_NAME_LEN)
+ if("create_bottle_multiple")
+ if(condi || !reagents.total_volume)
+ return
+ tgui_modal_input(src, id, "Please enter the amount of bottles to make (max [MAX_MULTI_AMOUNT] at a time):", null, arguments, pillamount, 5)
if("change_bottle_style")
var/list/choices = list()
for(var/i = 1 to MAX_BOTTLE_SPRITE)
@@ -357,16 +369,28 @@
if("create_bottle")
if(condi || !reagents.total_volume)
return
+ var/count = CLAMP(round(text2num(arguments["num"]) || 0), 0, MAX_MULTI_AMOUNT)
+ if(!count)
+ return
if(!length(answer))
answer = reagents.get_master_reagent_name()
- var/obj/item/weapon/reagent_containers/glass/bottle/P = new(loc)
- P.name = "[answer] bottle"
- P.pixel_x = rand(-7, 7) // random position
- P.pixel_y = rand(-7, 7)
- P.icon_state = "bottle-[bottlesprite]" || "bottle-1"
- reagents.trans_to_obj(P, 60)
- P.update_icon()
+ var/amount_per_bottle = CLAMP(reagents.total_volume / count, 0, MAX_UNITS_PER_BOTTLE)
+ while(count--)
+ if(reagents.total_volume <= 0)
+ to_chat(usr, "Not enough reagents to create these bottles!")
+ return
+ var/obj/item/weapon/reagent_containers/glass/bottle/P = new(loc)
+ P.name = "[answer] bottle"
+ P.pixel_x = rand(-7, 7) // random position
+ P.pixel_y = rand(-7, 7)
+ P.icon_state = "bottle-[bottlesprite]" || "bottle-1"
+ reagents.trans_to_obj(P, amount_per_bottle)
+ P.update_icon()
+ if("create_bottle_multiple")
+ if(condi || !reagents.total_volume)
+ return
+ tgui_act("modal_open", list("id" = "create_bottle", "arguments" = list("num" = answer)), ui, state)
if("change_bottle_style")
var/new_style = CLAMP(text2num(answer) || 0, 0, MAX_BOTTLE_SPRITE)
if(!new_style)
@@ -393,7 +417,9 @@
mode = !mode
if("ejectp")
if(loaded_pill_bottle)
- loaded_pill_bottle.forceMove(loc)
+ loaded_pill_bottle.forceMove(get_turf(src))
+ if(Adjacent(usr) && !issilicon(usr))
+ usr.put_in_hands(loaded_pill_bottle)
loaded_pill_bottle = null
if("print")
if(printing || condi)
@@ -842,4 +868,5 @@
#undef MAX_MULTI_AMOUNT
#undef MAX_UNITS_PER_PILL
#undef MAX_UNITS_PER_PATCH
+#undef MAX_UNITS_PER_BOTTLE
#undef MAX_CUSTOM_NAME_LEN
diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.js b/tgui/packages/tgui/interfaces/ChemDispenser.js
index 9de924b1a0..2a6bef7356 100644
--- a/tgui/packages/tgui/interfaces/ChemDispenser.js
+++ b/tgui/packages/tgui/interfaces/ChemDispenser.js
@@ -4,7 +4,7 @@ import { Box, Button, Flex, LabeledList, ProgressBar, Slider, Section } from "..
import { BeakerContents } from "../interfaces/common/BeakerContents";
import { Window } from "../layouts";
-const dispenseAmounts = [5, 10, 20, 30, 40];
+const dispenseAmounts = [5, 10, 20, 30, 40, 60];
const removeAmounts = [1, 5, 10];
export const ChemDispenser = (props, context) => {
@@ -35,11 +35,11 @@ const ChemDispenserSettings = (properties, context) => {
{dispenseAmounts.map((a, i) => (