diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 7e3ad7c01bbb..91d76688d508 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -33,6 +33,10 @@
var/has_panel_overlay = TRUE
var/macroresolution = 1
var/obj/item/reagent_containers/beaker = null
+ //This will display every reagent that it could POSSIBLY dispense if it was fully upgraded (barring emagged chemicals). Ones you can't use will show what tier you need.
+ //If you want to add more to the tiers, it has to be in dispensable_reagents AND the list of what you tier you want it in below.
+ var/list/display_reagents = list()
+
var/list/dispensable_reagents = list(
/datum/reagent/aluminium,
/datum/reagent/bromine,
@@ -86,14 +90,20 @@
/obj/machinery/chem_dispenser/Initialize()
. = ..()
dispensable_reagents = sortList(dispensable_reagents, /proc/cmp_reagents_asc)
+ display_reagents = dispensable_reagents.Copy()
if(emagged_reagents)
emagged_reagents = sortList(emagged_reagents, /proc/cmp_reagents_asc)
if(t2_upgrade_reagents)
t2_upgrade_reagents = sortList(t2_upgrade_reagents, /proc/cmp_reagents_asc)
+ display_reagents |= t2_upgrade_reagents
+ display_reagents = sortList(display_reagents,/proc/cmp_reagents_asc) //Why is this here you ask? because yogs moved things from t1 to t2 so now it fucks up the ordering. This restores it.
if(t3_upgrade_reagents)
t3_upgrade_reagents = sortList(t3_upgrade_reagents, /proc/cmp_reagents_asc)
+ display_reagents |= t3_upgrade_reagents
if(t4_upgrade_reagents)
t4_upgrade_reagents = sortList(t4_upgrade_reagents, /proc/cmp_reagents_asc)
+ display_reagents |= t4_upgrade_reagents
+ //we don't sort display_reagents again after adding these because they will fuck up the order
update_icon()
/obj/machinery/chem_dispenser/Destroy()
@@ -150,6 +160,7 @@
return
to_chat(user, span_notice("You short out [src]'s safeties."))
dispensable_reagents |= emagged_reagents//add the emagged reagents to the dispensable ones
+ display_reagents |= emagged_reagents
obj_flags |= EMAGGED
/obj/machinery/chem_dispenser/ex_act(severity, target)
@@ -173,6 +184,16 @@
beaker = null
cut_overlays()
+/obj/machinery/chem_dispenser/proc/get_tier_for_chemical(datum/reagent/chem)
+ var/tier = 1
+ if(t4_upgrade_reagents?.Find(chem.type))
+ tier = 4
+ if(t3_upgrade_reagents?.Find(chem.type))
+ tier = 3
+ if(t2_upgrade_reagents?.Find(chem.type))
+ tier = 2
+ return tier
+
/obj/machinery/chem_dispenser/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
@@ -210,13 +231,13 @@
var/is_hallucinating = FALSE
if(user.hallucinating())
is_hallucinating = TRUE
- for(var/re in dispensable_reagents)
+ for(var/re in display_reagents)
var/datum/reagent/temp = GLOB.chemical_reagents_list[re]
if(temp)
var/chemname = temp.name
if(is_hallucinating && prob(5))
chemname = "[pick_list_replacements("hallucination.json", "chemicals")]"
- chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name))))
+ chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name), "locked" = (dispensable_reagents.Find(temp.type) ? FALSE : TRUE), "tier" = get_tier_for_chemical(temp))))
for(var/recipe in saved_recipes)
recipes.Add(list(recipe))
data["chemicals"] = chemicals
diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.js b/tgui/packages/tgui/interfaces/ChemDispenser.js
index f266691fc192..faac2ed337d8 100644
--- a/tgui/packages/tgui/interfaces/ChemDispenser.js
+++ b/tgui/packages/tgui/interfaces/ChemDispenser.js
@@ -70,6 +70,8 @@ export const ChemDispenser = (props, context) => {
width="129.5px"
lineHeight={1.75}
content={chemical.title}
+ disabled={chemical.locked}
+ tooltip={chemical.locked ? "Requires T" + chemical.tier + " manipulator!" : ""}
onClick={() => act('dispense', {
reagent: chemical.id,
})} />
@@ -101,14 +103,14 @@ export const ChemDispenser = (props, context) => {
{recording
&& 'Virtual beaker'
|| data.isBeakerLoaded
- && (
-
-
- /{data.beakerMaxVolume} units
-
- )
+ && (
+
+
+ /{data.beakerMaxVolume} units
+
+ )
|| 'No beaker'}