diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 348446c466b..3bf4f86405a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -202,7 +202,7 @@ . = TRUE switch(actions) if("amount") - amount = clamp(round(text2num(params["amount"]), 1), 0, 50) // round to nearest 1 and clamp to 0 - 50 + amount = clamp(round(text2num(params["amount"]), 1), 0, 75) // round to nearest 1 and clamp to 0 - 75 if("dispense") if(!is_operational() || QDELETED(cell)) return @@ -520,7 +520,7 @@ . = TRUE switch(action) if("amount") - amount = clamp(round(text2num(params["amount"])), 1, 50) // round to nearest 1 and clamp to 1 - 50 + amount = clamp(round(text2num(params["amount"])), 1, 75) // round to nearest 1 and clamp to 1 - 75 if("dispense") if(params["reagent"] in dispensable_reagents) current_reagent = params["reagent"] diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index f55c1a02247..8275c872c66 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -29,6 +29,13 @@ for(var/obj/item/stock_parts/micro_laser/M in component_parts) speed_increase += 20 * (M.rating - 1) +/obj/machinery/chem_heater/AltClick(mob/user, modifiers) + if(!Adjacent(user)) + return + if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + return + eject_beaker(user) + /obj/machinery/chem_heater/process() ..() if(stat & (NOPOWER|BROKEN)) @@ -49,7 +56,7 @@ /obj/machinery/chem_heater/proc/eject_beaker(mob/user) if(beaker) beaker.forceMove(get_turf(src)) - if(user && Adjacent(user) && !issilicon(user)) + if(user && Adjacent(user) && !issilicon(user) && (!user.get_active_hand() || !user.get_inactive_hand())) user.put_in_hands(beaker) beaker = null icon_state = "mixer0b" diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index e142cd82dcd..178b2830602 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -30,6 +30,7 @@ var/condi = FALSE var/production_mode = null var/printing = FALSE + var/production_amount_limit = null var/static/list/pill_bottle_wrappers = list( COLOR_RED_LIGHT = "Red", COLOR_GREEN = "Green", @@ -55,7 +56,6 @@ component_parts += new /obj/item/stack/sheet/glass(null) component_parts += new /obj/item/reagent_containers/glass/beaker(null) component_parts += new /obj/item/reagent_containers/glass/beaker(null) - RefreshParts() update_icon() if(condi) var/datum/chemical_production_mode/new_mode = new /datum/chemical_production_mode/condiment_packs() @@ -73,6 +73,7 @@ for(var/key in production_modes) production_mode = key break + RefreshParts() /obj/machinery/chem_master/Destroy() QDEL_NULL(beaker) @@ -81,8 +82,30 @@ /obj/machinery/chem_master/RefreshParts() reagents.maximum_volume = 0 + reagents.set_reacting(TRUE) for(var/obj/item/reagent_containers/glass/beaker/B in component_parts) - reagents.maximum_volume += B.reagents.maximum_volume + reagents.maximum_volume += 2 * B.reagents.maximum_volume + if(istype(B, /obj/item/reagent_containers/glass/beaker/noreact)) + reagents.set_reacting(FALSE) + else + reagents.handle_reactions() // If cryostasis beaker is removed via upgrading, force a reaction + for(var/obj/item/stock_parts/manipulator/M in component_parts) + production_amount_limit = 20 * RaiseToPower(2, M.rating - 1) + for(var/key in production_modes) + production_modes[key].max_items_amount = clamp(production_amount_limit, 20, 120) + +/obj/machinery/chem_master/AltClick(mob/user, modifiers) + if(!beaker) + return + if(!Adjacent(user)) + return + if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + return + beaker.forceMove(get_turf(src)) + if(!issilicon(user) && (!user.get_active_hand() || !user.get_inactive_hand())) + user.put_in_hands(beaker) + beaker = null + update_icon() /obj/machinery/chem_master/ex_act(severity) if(severity < EXPLODE_LIGHT) @@ -96,13 +119,13 @@ ..() if(A == beaker) beaker = null - reagents.clear_reagents() update_icon() else if(A == loaded_pill_bottle) loaded_pill_bottle = null /obj/machinery/chem_master/update_icon_state() - icon_state = "mixer[beaker ? "1" : "0"][has_power() ? "" : "_nopower"]" + if(reagents) + icon_state = "mixer[beaker || reagents.total_volume ? "1" : "0"][has_power() ? "" : "_nopower"]" /obj/machinery/chem_master/update_overlays() . = ..() @@ -176,7 +199,6 @@ if(beaker) beaker.forceMove(get_turf(src)) beaker = null - reagents.clear_reagents() if(loaded_pill_bottle) loaded_pill_bottle.forceMove(get_turf(src)) loaded_pill_bottle = null @@ -291,11 +313,14 @@ else . = FALSE - if(. || !beaker) + if(.) return . = TRUE - var/datum/reagents/R = beaker.reagents + var/datum/reagents/R + if(beaker) + R = beaker.reagents + switch(action) if("add") var/id = params["id"] @@ -312,6 +337,7 @@ reagents.trans_id_to(beaker, id, amount) else reagents.remove_reagent(id, amount) + update_icon() if("addcustom") if(!beaker || !beaker.reagents.total_volume) return @@ -331,23 +357,22 @@ reagents.trans_id_to(beaker, id, amount) else reagents.remove_reagent(id, amount) + update_icon() if("eject") if(!beaker) return beaker.forceMove(get_turf(src)) - if(Adjacent(usr) && !issilicon(usr)) + if(Adjacent(usr) && !issilicon(usr) && (!usr.get_active_hand() || !usr.get_inactive_hand())) usr.put_in_hands(beaker) beaker = null - reagents.clear_reagents() update_icon() if("create_items") - if(!reagents.total_volume) - return var/production_mode_key = params["production_mode"] var/datum/chemical_production_mode/M = production_modes[production_mode_key] if(isnull(M)) return M.synthesize(ui.user, loc, reagents, loaded_pill_bottle) + update_icon() else return FALSE @@ -390,14 +415,12 @@ data["beaker_reagents"] = beaker_reagents_list for(var/datum/reagent/R in beaker.reagents.reagent_list) beaker_reagents_list[++beaker_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) - var/list/buffer_reagents_list = list() - data["buffer_reagents"] = buffer_reagents_list - for(var/datum/reagent/R in reagents.reagent_list) - buffer_reagents_list[++buffer_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) else data["beaker_reagents"] = list() - data["buffer_reagents"] = list() - + var/list/buffer_reagents_list = list() + data["buffer_reagents"] = buffer_reagents_list + for(var/datum/reagent/R in reagents.reagent_list) + buffer_reagents_list[++buffer_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) var/production_data = list() for(var/key in production_modes) var/datum/chemical_production_mode/M = production_modes[key] @@ -554,6 +577,10 @@ if(!isnull(medicine_name) && length(medicine_name) <= 0) medicine_name = get_base_placeholder_name(reagents, amount_per_item) + if(amount_per_item < 0.1) + to_chat(user, "Cannot create pills smaller than 0.1u!") + return + var/data = list() for(var/i in 1 to count) if(reagents.total_volume <= 0) @@ -576,7 +603,6 @@ production_name = "Pills" production_icon = "pills" item_type = /obj/item/reagent_containers/pill - max_items_amount = 20 max_units_per_item = 100 name_suffix = " pill" @@ -591,7 +617,6 @@ production_name = "Patches" production_icon = "plus-square" item_type = /obj/item/reagent_containers/patch - max_items_amount = 20 max_units_per_item = 30 name_suffix = " patch" @@ -631,7 +656,6 @@ production_icon = "wine-bottle" item_type = /obj/item/reagent_containers/glass/bottle/reagent sprites = list("bottle", "reagent_bottle") - max_items_amount = 5 max_units_per_item = 50 name_suffix = " bottle" diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 7be6e9db19f..665b872bd70 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -120,6 +120,9 @@ QDEL_NULL(beaker) return ..() +/obj/machinery/reagentgrinder/AltClick(mob/user, modifiers) + detach(user) + /obj/machinery/reagentgrinder/ex_act(severity) if(beaker) beaker.ex_act(severity) @@ -334,9 +337,14 @@ /obj/machinery/reagentgrinder/proc/detach(mob/user) if(!beaker) return + if(!Adjacent(user)) + return if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) return - beaker.forceMove(loc) + beaker.forceMove(get_turf(src)) + SStgui.update_uis(src) + if(!issilicon(user) && (!user.get_active_hand() || !user.get_inactive_hand())) + user.put_in_hands(beaker) beaker = null update_icon(UPDATE_ICON_STATE) SStgui.update_uis(src) diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.jsx b/tgui/packages/tgui/interfaces/ChemDispenser.jsx index d54907d2fb3..754b280f98a 100644 --- a/tgui/packages/tgui/interfaces/ChemDispenser.jsx +++ b/tgui/packages/tgui/interfaces/ChemDispenser.jsx @@ -4,14 +4,14 @@ import { useBackend } from '../backend'; import { Window } from '../layouts'; import { BeakerContents } from './common/BeakerContents'; -const dispenseAmounts = [1, 5, 10, 20, 30, 50]; +const dispenseAmounts = [1, 5, 10, 20, 30, 50, 75]; const removeAmounts = [1, 5, 10]; export const ChemDispenser = (props) => { const { act, data } = useBackend(); const { chemicals } = data; return ( - + diff --git a/tgui/packages/tgui/interfaces/ChemMaster.tsx b/tgui/packages/tgui/interfaces/ChemMaster.tsx index 44060095f5a..5ba8c699042 100644 --- a/tgui/packages/tgui/interfaces/ChemMaster.tsx +++ b/tgui/packages/tgui/interfaces/ChemMaster.tsx @@ -8,7 +8,7 @@ import { Window } from '../layouts'; import { BeakerContents } from './common/BeakerContents'; import { ComplexModal, modalOpen, modalRegisterBodyOverride } from './common/ComplexModal'; -const transferAmounts = [1, 5, 10]; +const transferAmounts = [1, 5, 10, 25, 75]; const analyzeModalBodyOverride = (modal) => { const { act, data } = useBackend(); @@ -136,18 +136,7 @@ const ChemMasterBeaker = (props: {}) => { title="Beaker" fill scrollable - buttons={ - bufferNonEmpty ? ( - act('eject')} - /> - ) : ( -