diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index ad9aef5a8b..60148e0388 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -56,9 +56,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define FLYING (1<<1)
#define VENTCRAWLING (1<<2)
-// Flags for reagents
-#define REAGENT_NOREACT (1<<0)
-
//Fire and Acid stuff, for resistance_flags
#define LAVA_PROOF (1<<0)
#define FIRE_PROOF (1<<1) //100% immune to fire damage (but not necessarily to lava or heat)
diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm
index f8f59a367f..c3682d905d 100644
--- a/code/__DEFINES/reagents.dm
+++ b/code/__DEFINES/reagents.dm
@@ -2,7 +2,7 @@
#define LIQUID 2
#define GAS 3
-// container_type defines
+// reagents_flags defines
#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes.
#define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes.
@@ -11,6 +11,7 @@
#define TRANSPARENT (1<<4) // Used on containers which you want to be able to see the reagents off.
#define AMOUNT_VISIBLE (1<<5) // For non-transparent containers that still have the general amount of reagents in them visible.
+#define NO_REACT (1<<6) // Applied to a reagent holder, the contents will not react with each other.
// Is an open container for all intents and purposes.
#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 835a733752..c37e6fa531 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -115,9 +115,6 @@ GLOBAL_LIST_INIT(bitfields, list(
"GOLIATH_RESISTANCE" = GOLIATH_RESISTANCE,
"GOLIATH_WEAKNESS" = GOLIATH_WEAKNESS
),
- "reagents_holder_flags" = list(
- "REAGENT_NOREACT" = REAGENT_NOREACT
- ),
"flags_1" = list(
"NOJAUNT_1" = NOJAUNT_1,
"UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1,
@@ -158,13 +155,14 @@ GLOBAL_LIST_INIT(bitfields, list(
"SMOOTH_BORDER" = SMOOTH_BORDER,
"SMOOTH_QUEUED" = SMOOTH_QUEUED,
),
- "container_type" = list(
+ "reagents_holder_flags" = list(
"INJECTABLE" = INJECTABLE,
"DRAWABLE" = DRAWABLE,
"REFILLABLE" = REFILLABLE,
"DRAINABLE" = DRAINABLE,
"TRANSPARENT" = TRANSPARENT,
"AMOUNT_VISIBLE" = AMOUNT_VISIBLE,
+ "NO_REACT" = NO_REACT,
),
"car_traits" = list(
"CAN_KIDNAP" = CAN_KIDNAP,
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 48596a0b6d..81e2371f9a 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -6,7 +6,6 @@
var/flags_1 = NONE
var/interaction_flags_atom = NONE
- var/container_type = NONE
var/datum/reagents/reagents = null
//This atom's HUD (med/sec, etc) images. Associative list.
@@ -203,16 +202,16 @@
return is_refillable() && is_drainable()
/atom/proc/is_injectable(allowmobs = TRUE)
- return reagents && (container_type & (INJECTABLE | REFILLABLE))
+ return reagents && (reagents.reagents_holder_flags & (INJECTABLE | REFILLABLE))
/atom/proc/is_drawable(allowmobs = TRUE)
- return reagents && (container_type & (DRAWABLE | DRAINABLE))
+ return reagents && (reagents.reagents_holder_flags & (DRAWABLE | DRAINABLE))
/atom/proc/is_refillable()
- return reagents && (container_type & REFILLABLE)
+ return reagents && (reagents.reagents_holder_flags & REFILLABLE)
/atom/proc/is_drainable()
- return reagents && (container_type & DRAINABLE)
+ return reagents && (reagents.reagents_holder_flags & DRAINABLE)
/atom/proc/AllowDrop()
@@ -261,7 +260,7 @@
to_chat(user, desc)
if(reagents)
- if(container_type & TRANSPARENT)
+ if(reagents.reagents_holder_flags & TRANSPARENT)
to_chat(user, "It contains:")
if(reagents.reagent_list.len)
if(user.can_see_reagents()) //Show each individual reagent
@@ -274,7 +273,7 @@
to_chat(user, "[total_volume] units of various reagents")
else
to_chat(user, "Nothing.")
- else if(container_type & AMOUNT_VISIBLE)
+ else if(reagents.reagents_holder_flags & AMOUNT_VISIBLE)
if(reagents.total_volume)
to_chat(user, "It has [reagents.total_volume] unit\s left.")
else
diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm
index 8a0658fd0f..a3250fe1b0 100644
--- a/code/game/machinery/limbgrower.dm
+++ b/code/game/machinery/limbgrower.dm
@@ -10,7 +10,6 @@
icon = 'icons/obj/machines/limbgrower.dmi'
icon_state = "limbgrower_idleoff"
density = TRUE
- container_type = OPENCONTAINER
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 100
@@ -34,7 +33,7 @@
)
/obj/machinery/limbgrower/Initialize()
- create_reagents(100)
+ create_reagents(100, OPENCONTAINER)
stored_research = new /datum/techweb/specialized/autounlocking/limbgrower
. = ..()
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 99baad11ae..ba08109427 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -257,8 +257,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Initialize()
. = ..()
- create_reagents(max_volume)
- reagents.set_reacting(FALSE)
+ create_reagents(max_volume, NO_REACT)
syringes = new
known_reagents = list("epinephrine"="Epinephrine","charcoal"="Charcoal")
processed_reagents = new
@@ -274,7 +273,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/critfail()
..()
if(reagents)
- reagents.set_reacting(TRUE)
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/mecha/medical/M)
if(..())
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 1ad7974fc1..d64f5b57b8 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -102,7 +102,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigoff"
throw_speed = 0.5
item_state = "cigoff"
- container_type = INJECTABLE
w_class = WEIGHT_CLASS_TINY
body_parts_covered = null
grind_results = list()
@@ -123,8 +122,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/Initialize()
. = ..()
- create_reagents(chem_volume)
- reagents.set_reacting(FALSE) // so it doesn't react until you light it
+ create_reagents(chem_volume, INJECTABLE | NO_REACT) // so it doesn't react until you light it
if(list_reagents)
reagents.add_reagent_list(list_reagents)
if(starts_lit)
@@ -184,7 +182,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
qdel(src)
return
// allowing reagents to react after being lit
- reagents.set_reacting(TRUE)
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.handle_reactions()
icon_state = icon_on
item_state = icon_on
@@ -325,7 +323,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
list_reagents = list("space_drugs" = 15, "lipolicide" = 35)
/obj/item/clothing/mask/cigarette/rollie/mindbreaker
- list_reagents = list("mindbreaker" = 35, "lipolicide" = 15)
+ list_reagents = list("mindbreaker" = 35, "lipolicide" = 15)
/obj/item/cigbutt/roach
name = "roach"
@@ -720,8 +718,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/vape/Initialize(mapload, param_color)
. = ..()
- create_reagents(chem_volume)
- reagents.set_reacting(FALSE) // so it doesn't react until you light it
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.add_reagent("nicotine", 50)
if(!icon_state)
if(!param_color)
@@ -790,13 +787,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(reagents.total_volume > 0)
to_chat(user, "You empty [src] of all reagents.")
reagents.clear_reagents()
- return
/obj/item/clothing/mask/vape/equipped(mob/user, slot)
if(slot == SLOT_WEAR_MASK)
if(!screw)
to_chat(user, "You start puffing on the vape.")
- reagents.set_reacting(TRUE)
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
START_PROCESSING(SSobj, src)
else //it will not start if the vape is opened.
to_chat(user, "You need to close the cap first!")
@@ -804,7 +800,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/vape/dropped(mob/user)
var/mob/living/carbon/C = user
if(C.get_item_by_slot(SLOT_WEAR_MASK) == src)
- reagents.set_reacting(FALSE)
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
STOP_PROCESSING(SSobj, src)
/obj/item/clothing/mask/vape/proc/hand_reagents()//had to rename to avoid duplicate error
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index ddbc668c05..882a50b3ba 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -15,7 +15,6 @@
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
dog_fashion = /datum/dog_fashion/back
resistance_flags = FIRE_PROOF
- container_type = AMOUNT_VISIBLE
var/max_water = 50
var/last_use = 1
var/chem = "water"
@@ -56,7 +55,7 @@
/obj/item/extinguisher/Initialize()
. = ..()
- create_reagents(max_water)
+ create_reagents(max_water, AMOUNT_VISIBLE)
reagents.add_reagent(chem, max_water)
diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm
index b9c85c0728..c6c8be1a83 100644
--- a/code/game/objects/items/implants/implant_chem.dm
+++ b/code/game/objects/items/implants/implant_chem.dm
@@ -2,7 +2,6 @@
name = "chem implant"
desc = "Injects things."
icon_state = "reagents"
- container_type = OPENCONTAINER
activated = FALSE
/obj/item/implant/chem/get_data()
@@ -23,7 +22,7 @@
/obj/item/implant/chem/Initialize()
. = ..()
- create_reagents(50)
+ create_reagents(50, OPENCONTAINER)
GLOB.tracked_chem_implants += src
/obj/item/implant/chem/Destroy()
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 6d1ffe9eae..8f2b85098d 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -18,7 +18,7 @@
/obj/item/watertank/Initialize()
. = ..()
- create_reagents(volume)
+ create_reagents(volume, OPENCONTAINER)
noz = make_noz()
/obj/item/watertank/ui_action_click(mob/user)
@@ -113,7 +113,6 @@
possible_transfer_amounts = list(25,50,100)
volume = 500
item_flags = NOBLUDGEON | ABSTRACT // don't put in storage
- container_type = OPENCONTAINER
slot_flags = 0
var/obj/item/watertank/tank
@@ -335,7 +334,7 @@
var/usage_ratio = 5 //5 unit added per 1 removed
var/injection_amount = 1
amount_per_transfer_from_this = 5
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
spillable = FALSE
possible_transfer_amounts = list(5,10,15)
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 7b976a6289..54f199969f 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -266,10 +266,10 @@
status = !status
if(status)
to_chat(user, "You resecure [src] and close the fuel tank.")
- container_type = NONE
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
else
to_chat(user, "[src] can now be attached, modified, and refuelled.")
- container_type = OPENCONTAINER
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
add_fingerprint(user)
/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index cc9b002fa8..54b9d650d5 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -5,7 +5,6 @@
icon_state = "cart"
anchored = FALSE
density = TRUE
- container_type = OPENCONTAINER
//copypaste sorry
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
var/obj/item/storage/bag/trash/mybag = null
@@ -18,7 +17,7 @@
/obj/structure/janitorialcart/Initialize()
. = ..()
- create_reagents(100)
+ create_reagents(100, OPENCONTAINER)
/obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user)
if(reagents.total_volume < 1)
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index 7fe9700470..e56cf3b09d 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -4,13 +4,12 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "mopbucket"
density = TRUE
- container_type = OPENCONTAINER
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
/obj/structure/mopbucket/Initialize()
. = ..()
- create_reagents(100)
+ create_reagents(100, OPENCONTAINER)
/obj/structure/mopbucket/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/mop))
diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm
index 9f1f2bf380..a25bc01b13 100644
--- a/code/modules/detectivework/footprints_and_rag.dm
+++ b/code/modules/detectivework/footprints_and_rag.dm
@@ -13,7 +13,7 @@
icon = 'icons/obj/toy.dmi'
icon_state = "rag"
item_flags = NOBLUDGEON
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
amount_per_transfer_from_this = 5
possible_transfer_amounts = list()
volume = 5
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 6594146e81..aa0674eecf 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -8,7 +8,7 @@
icon_state = null
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
possible_transfer_amounts = list(5,10,15,20,25,30,50)
volume = 50
@@ -152,7 +152,6 @@
possible_transfer_amounts = list()
volume = 5
flags_1 = CONDUCT_1
- container_type = OPENCONTAINER
spillable = TRUE
resistance_flags = FIRE_PROOF
isGlass = FALSE
@@ -399,7 +398,7 @@
name = "soda can"
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- container_type = NONE
+ reagent_flags = NONE
spillable = FALSE
isGlass = FALSE
@@ -423,7 +422,7 @@
/obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user)
if(!is_drainable())
to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh
- container_type = OPENCONTAINER
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
playsound(src, "can_open", 50, 1)
spillable = TRUE
return
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index f9d9a3d85a..93b8aa9717 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -4,7 +4,7 @@
/obj/item/reagent_containers/food
possible_transfer_amounts = list()
volume = 50 //Sets the default container amount for all food items.
- container_type = INJECTABLE
+ reagent_flags = INJECTABLE
resistance_flags = FLAMMABLE
var/foodtype = NONE
var/last_check_time
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index d6d744f4db..0aef697883 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -10,7 +10,7 @@
desc = "Just your average condiment container."
icon = 'icons/obj/food/containers.dmi'
icon_state = "emptycondiment"
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
possible_transfer_amounts = list(1, 5, 10, 15, 20, 25, 30, 50)
volume = 50
//Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change(changetype) to change names, descs and sprites.
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index 7c7545869b..3eeb5b9417 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -290,7 +290,7 @@
desc = "A simple bowl, used for soups and salads."
icon = 'icons/obj/food/soupsalad.dmi'
icon_state = "bowl"
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
materials = list(MAT_GLASS = 500)
w_class = WEIGHT_CLASS_NORMAL
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 5e7a3db504..23172841e4 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -28,7 +28,6 @@ God bless America.
density = TRUE
use_power = IDLE_POWER_USE
idle_power_usage = 5
- container_type = OPENCONTAINER
layer = BELOW_OBJ_LAYER
var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW?
var/cook_time = 0
@@ -52,7 +51,7 @@ God bless America.
/obj/machinery/deepfryer/Initialize()
. = ..()
- create_reagents(50)
+ create_reagents(50, OPENCONTAINER)
reagents.add_reagent("cooking_oil", 25)
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/deep_fryer(null)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
index b1da39daf3..4dda9dd773 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
@@ -15,13 +15,11 @@
var/portion = 10
var/selected_drink
var/list/stored_food = list()
- container_type = OPENCONTAINER
var/obj/item/reagent_containers/mixer
/obj/machinery/food_cart/Initialize()
. = ..()
- create_reagents(LIQUID_CAPACIY)
- reagents.set_reacting(FALSE)
+ create_reagents(LIQUID_CAPACIY, OPENCONTAINER | NO_REACT)
mixer = new /obj/item/reagent_containers(src, MIXER_CAPACITY)
mixer.name = "Mixer"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index 46c9907cef..58d3ef69bb 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -14,7 +14,6 @@
anchored = FALSE
use_power = NO_POWER_USE
layer = BELOW_OBJ_LAYER
- container_type = OPENCONTAINER
max_integrity = 300
var/list/product_types = list()
var/dispense_flavour = ICECREAM_VANILLA
@@ -65,8 +64,7 @@
. = ..()
while(product_types.len < 6)
product_types.Add(5)
- create_reagents()
- reagents.set_reacting(FALSE)
+ create_reagents(100, OPENCONTAINER | NO_REACT)
for(var/reagent in icecream_vat_reagents)
reagents.add_reagent(reagent, icecream_vat_reagents[reagent])
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 913fb44dae..10ecfd6e20 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -86,7 +86,6 @@
src.icon_state = "mw"
src.broken = 0 // Fix it!
src.dirty = 0 // just to be sure
- src.container_type = OPENCONTAINER
return 0 //to use some fuel
else
to_chat(user, "It's broken!")
@@ -103,7 +102,6 @@
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
src.icon_state = "mw"
- src.container_type = OPENCONTAINER
src.updateUsrDialog()
return 1 // Disables the after-attack so we don't spray the floor/user.
else
@@ -124,7 +122,6 @@
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
src.icon_state = "mw"
- src.container_type = OPENCONTAINER
else if(src.dirty==100) // The microwave is all dirty so can't be used!
to_chat(user, "It's dirty!")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index b6e3b19640..deba080ca2 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -18,8 +18,7 @@
/obj/machinery/smartfridge/Initialize()
. = ..()
- create_reagents()
- reagents.set_reacting(FALSE)
+ create_reagents(100, NO_REACT)
if(islist(initial_contents))
for(var/typekey in initial_contents)
diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm
index b88e6e1ebb..83fc18dcb9 100644
--- a/code/modules/hydroponics/fermenting_barrel.dm
+++ b/code/modules/hydroponics/fermenting_barrel.dm
@@ -5,14 +5,13 @@
icon_state = "barrel"
density = TRUE
anchored = FALSE
- container_type = DRAINABLE | AMOUNT_VISIBLE
pressure_resistance = 2 * ONE_ATMOSPHERE
max_integrity = 300
var/open = FALSE
var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better.
/obj/structure/fermenting_barrel/Initialize()
- create_reagents(300) //Bluespace beakers, but without the portability or efficiency in circuits.
+ create_reagents(300, DRAINABLE | AMOUNT_VISIBLE) //Bluespace beakers, but without the portability or efficiency in circuits.
. = ..()
/obj/structure/fermenting_barrel/examine(mob/user)
@@ -56,10 +55,12 @@
/obj/structure/fermenting_barrel/attack_hand(mob/user)
open = !open
if(open)
- container_type = REFILLABLE | AMOUNT_VISIBLE
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, DRAINABLE)
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, REFILLABLE)
to_chat(user, "You open [src], letting you fill it.")
else
- container_type = DRAINABLE | AMOUNT_VISIBLE
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, REFILLABLE)
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, DRAINABLE)
to_chat(user, "You close [src], letting you draw from its tap.")
update_icon()
diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm
index 55c0da91f2..ce0ca0220b 100644
--- a/code/modules/hydroponics/grown/replicapod.dm
+++ b/code/modules/hydroponics/grown/replicapod.dm
@@ -7,7 +7,6 @@
species = "replicapod"
plantname = "Replica Pod"
product = /mob/living/carbon/human //verrry special -- Urist
- container_type = INJECTABLE|DRAWABLE
lifespan = 50
endurance = 8
maturation = 10
@@ -28,7 +27,7 @@
/obj/item/seeds/replicapod/Initialize()
. = ..()
- create_reagents(volume)
+ create_reagents(volume, INJECTABLE | DRAWABLE)
/obj/item/seeds/replicapod/on_reagent_change(changetype)
if(changetype == ADD_REAGENT)
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index 97bf2a31b9..17462c0626 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -310,10 +310,10 @@
/datum/plant_gene/trait/noreact/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc)
..()
- G.reagents.set_reacting(FALSE)
+ ENABLE_BITFIELD(G.reagents.reagents_holder_flags, NO_REACT)
/datum/plant_gene/trait/noreact/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
- G.reagents.set_reacting(TRUE)
+ DISABLE_BITFIELD(G.reagents.reagents_holder_flags, NO_REACT)
G.reagents.handle_reactions()
diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm
index c849dc0e27..d4899a4621 100644
--- a/code/modules/integrated_electronics/passive/power.dm
+++ b/code/modules/integrated_electronics/passive/power.dm
@@ -90,7 +90,6 @@
icon_state = "chemical_cell"
extended_desc = "This is effectively an internal beaker. It will consume and produce power from plasma, slime jelly, welding fuel, carbon,\
ethanol, nutriment, and blood in order of decreasing efficiency. It will consume fuel only if the battery can take more energy."
- container_type = OPENCONTAINER
complexity = 4
inputs = list()
outputs = list("volume used" = IC_PINTYPE_NUMBER, "self reference" = IC_PINTYPE_SELFREF)
@@ -101,9 +100,9 @@
var/multi = 1
var/lfwb =TRUE
-/obj/item/integrated_circuit/passive/power/chemical_cell/New()
+/obj/item/integrated_circuit/passive/power/chemical_cell/Initialize()
..()
- create_reagents(volume)
+ create_reagents(volume, OPENCONTAINER)
extended_desc +="But no fuel can be compared with blood of living human."
diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm
index fb8fce10b2..980b614991 100644
--- a/code/modules/integrated_electronics/subtypes/reagents.dm
+++ b/code/modules/integrated_electronics/subtypes/reagents.dm
@@ -51,7 +51,6 @@
extended_desc = "This autoinjector can push up to 30 units of reagents into another container or someone else outside of the machine. The target \
must be adjacent to the machine, and if it is a person, they cannot be wearing thick clothing. Negative given amounts makes the injector suck out reagents instead."
- container_type = OPENCONTAINER
volume = 30
complexity = 20
@@ -80,6 +79,10 @@
var/transfer_amount = 10
var/busy = FALSE
+/obj/item/integrated_circuit/reagent/injector/Initialize()
+ . = ..()
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
+
/obj/item/integrated_circuit/reagent/injector/on_reagent_change(changetype)
push_vol()
@@ -260,7 +263,6 @@
icon_state = "reagent_storage"
extended_desc = "This is effectively an internal beaker."
- container_type = OPENCONTAINER
volume = 60
complexity = 4
@@ -272,7 +274,9 @@
activators = list("push ref" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
-
+/obj/item/integrated_circuit/reagent/storage/Initialize()
+ . = ..()
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
/obj/item/integrated_circuit/reagent/storage/do_work()
set_pin_data(IC_OUTPUT, 2, WEAKREF(src))
@@ -302,7 +306,7 @@
/obj/item/integrated_circuit/reagent/storage/cryo/Initialize()
. = ..()
- reagents.set_reacting(FALSE)
+ ENABLE_BITFIELD(reagents.flags, NO_REACT)
/obj/item/integrated_circuit/reagent/storage/grinder
name = "reagent grinder"
@@ -501,7 +505,6 @@
desc = "Stores liquid inside the device away from electrical components. It can store up to 60u. It will heat or cool the reagents \
to the target temperature when turned on."
icon_state = "heater"
- container_type = OPENCONTAINER
complexity = 8
inputs = list(
"target temperature" = IC_PINTYPE_NUMBER,
@@ -552,7 +555,6 @@
ext_cooldown = 1
volume = 100
- container_type = OPENCONTAINER
complexity = 20
cooldown_per_use = 1 SECONDS
@@ -571,6 +573,10 @@
var/smoke_radius = 5
var/notified = FALSE
+/obj/item/integrated_circuit/reagent/smoke/Initialize()
+ . = ..()
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
+
/obj/item/integrated_circuit/reagent/smoke/on_reagent_change(changetype)
//reset warning only if we have reagents now
if(changetype == ADD_REAGENT)
@@ -605,7 +611,6 @@
extended_desc = "This circuit can hold up to 30 units of any given chemicals. On each use, it sprays these reagents like a fire extinguisher. Requires at least 10 units of reagents to work."
volume = 30
- container_type = OPENCONTAINER
complexity = 20
cooldown_per_use = 6 SECONDS
@@ -628,6 +633,7 @@
/obj/item/integrated_circuit/reagent/extinguisher/Initialize()
.=..()
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
set_pin_data(IC_OUTPUT,2, src)
/obj/item/integrated_circuit/reagent/extinguisher/on_reagent_change(changetype)
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index c99b094ab0..6125ac9b82 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -151,9 +151,6 @@
/*
* Sleepypens
*/
-/obj/item/pen/sleepy
- container_type = OPENCONTAINER
-
/obj/item/pen/sleepy/attack(mob/living/M, mob/user)
if(!istype(M))
@@ -167,7 +164,7 @@
/obj/item/pen/sleepy/Initialize()
. = ..()
- create_reagents(45)
+ create_reagents(45, OPENCONTAINER)
reagents.add_reagent("chloralhydratedelayed", 20)
reagents.add_reagent("mutetoxin", 15)
reagents.add_reagent("tirizene", 10)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 9fcdf091a1..b6473b8913 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -20,7 +20,6 @@
var/self_recharge = 0 //does it self recharge, over time, or not?
var/ratingdesc = TRUE
var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it.
- container_type = INJECTABLE|DRAINABLE
/obj/item/stock_parts/cell/get_cell()
return src
@@ -28,7 +27,7 @@
/obj/item/stock_parts/cell/Initialize(mapload, override_maxcharge)
. = ..()
START_PROCESSING(SSobj, src)
- create_reagents(5)
+ create_reagents(5, INJECTABLE | DRAINABLE)
if (override_maxcharge)
maxcharge = override_maxcharge
charge = maxcharge
diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
index d57edf154d..ab463163f0 100644
--- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm
+++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
@@ -111,23 +111,23 @@
icon_state = "cshell"
projectile_type = /obj/item/projectile/bullet/dart
var/reagent_amount = 30
- var/reagent_react = TRUE
+
+/obj/item/ammo_casing/shotgun/dart/Initialize()
+ . = ..()
+ create_reagents(reagent_amount, OPENCONTAINER)
+
+/obj/item/ammo_casing/shotgun/dart/attackby()
+ return
/obj/item/ammo_casing/shotgun/dart/noreact
name = "cryostasis shotgun dart"
desc = "A dart for use in shotguns. Uses technology similar to cryostasis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical."
icon_state = "cnrshell"
reagent_amount = 10
- reagent_react = FALSE
-/obj/item/ammo_casing/shotgun/dart/Initialize()
+/obj/item/ammo_casing/shotgun/dart/noreact/Initialize()
. = ..()
- container_type |= OPENCONTAINER
- create_reagents(reagent_amount)
- reagents.set_reacting(reagent_react)
-
-/obj/item/ammo_casing/shotgun/dart/attackby()
- return
+ ENABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
/obj/item/ammo_casing/shotgun/dart/bioterror
desc = "A shotgun dart filled with deadly toxins."
diff --git a/code/modules/projectiles/guns/misc/chem_gun.dm b/code/modules/projectiles/guns/misc/chem_gun.dm
index 17e3bd1876..9f65c5ec24 100644
--- a/code/modules/projectiles/guns/misc/chem_gun.dm
+++ b/code/modules/projectiles/guns/misc/chem_gun.dm
@@ -12,7 +12,6 @@
materials = list(MAT_METAL=2000)
clumsy_check = FALSE
fire_sound = 'sound/items/syringeproj.ogg'
- container_type = OPENCONTAINER
var/time_per_syringe = 250
var/syringes_left = 4
var/max_syringes = 4
@@ -22,7 +21,7 @@
. = ..()
chambered = new /obj/item/ammo_casing/chemgun(src)
START_PROCESSING(SSobj, src)
- create_reagents(100)
+ create_reagents(100, OPENCONTAINER)
/obj/item/gun/chem/Destroy()
. = ..()
diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
index 023c3b9090..94d075c789 100644
--- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm
+++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
@@ -6,8 +6,7 @@
/obj/item/projectile/bullet/dart/Initialize()
. = ..()
- create_reagents(50)
- reagents.set_reacting(FALSE)
+ create_reagents(50, NO_REACT)
/obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE)
if(iscarbon(target))
@@ -24,7 +23,7 @@
"You were protected against \the [src]!")
..(target, blocked)
- reagents.set_reacting(TRUE)
+ DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
reagents.handle_reactions()
return TRUE
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index 442ef191a9..58c29f351b 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -53,7 +53,7 @@
var/list/datum/reagent/addiction_list = new/list()
var/reagents_holder_flags
-/datum/reagents/New(maximum=100)
+/datum/reagents/New(maximum=100, new_flags)
maximum_volume = maximum
//I dislike having these here but map-objects are initialised before world/New() is called. >_>
@@ -62,6 +62,8 @@
if(!GLOB.chemical_reactions_list)
build_chemical_reactions_list()
+ reagents_holder_flags = new_flags
+
/datum/reagents/Destroy()
. = ..()
var/list/cached_reagents = reagent_list
@@ -311,13 +313,6 @@
C.update_stamina()
update_total()
-
-/datum/reagents/proc/set_reacting(react = TRUE)
- if(react)
- reagents_holder_flags &= ~(REAGENT_NOREACT)
- else
- reagents_holder_flags |= REAGENT_NOREACT
-
/datum/reagents/proc/conditional_update_move(atom/A, Running = 0)
var/list/cached_reagents = reagent_list
for(var/reagent in cached_reagents)
@@ -333,11 +328,11 @@
update_total()
/datum/reagents/proc/handle_reactions()
+ if(reagents_holder_flags & NO_REACT)
+ return //Yup, no reactions here. No siree.
var/list/cached_reagents = reagent_list
var/list/cached_reactions = GLOB.chemical_reactions_list
var/datum/cached_my_atom = my_atom
- if(reagents_holder_flags & REAGENT_NOREACT)
- return //Yup, no reactions here. No siree.
var/reaction_occurred = 0
do
@@ -555,7 +550,7 @@
if(!D)
WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
return FALSE
-
+
update_total()
var/cached_total = total_volume
if(cached_total + amount > maximum_volume)
@@ -599,9 +594,9 @@
if(data)
R.data = data
R.on_new(data)
-
+
if(isliving(my_atom))
- R.on_mob_add(my_atom) //Must occur befor it could posibly run on_mob_delete
+ R.on_mob_add(my_atom) //Must occur befor it could posibly run on_mob_delete
update_total()
if(my_atom)
my_atom.on_reagent_change(ADD_REAGENT)
@@ -800,10 +795,10 @@
// Convenience proc to create a reagents holder for an atom
// Max vol is maximum volume of holder
-/atom/proc/create_reagents(max_vol)
+/atom/proc/create_reagents(max_vol, flags)
if(reagents)
qdel(reagents)
- reagents = new/datum/reagents(max_vol)
+ reagents = new/datum/reagents(max_vol, flags)
reagents.my_atom = src
/proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents
diff --git a/code/modules/reagents/chemistry/readme.md b/code/modules/reagents/chemistry/readme.md
index 9a9be7c5a6..20dce0e72e 100644
--- a/code/modules/reagents/chemistry/readme.md
+++ b/code/modules/reagents/chemistry/readme.md
@@ -230,7 +230,7 @@ By default, all atom have a reagents var - but its empty. if you want to use an
'pouring' our reagents into something else.
atom/proc/is_open_container()
- Checks obj/var/container_type & OPENCONTAINER.
+ Checks atom/var/reagents.reagents_holder_flags & OPENCONTAINER.
If this returns 1 , you can use syringes, beakers etc
to manipulate the contents of this object.
If it's 0, you'll need to write your own custom reagent
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 98c85b875f..13e809f7cb 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -7,6 +7,7 @@
var/amount_per_transfer_from_this = 5
var/list/possible_transfer_amounts = list(5,10,15,20,25,30)
var/volume = 30
+ var/reagent_flags
var/list/list_reagents = null
var/spawned_disease = null
var/disease_amount = 20
@@ -16,7 +17,7 @@
. = ..()
if(isnum(vol) && vol > 0)
volume = vol
- create_reagents(volume)
+ create_reagents(volume, reagent_flags)
if(spawned_disease)
var/datum/disease/F = new spawned_disease()
var/list/data = list("viruses"= list(F))
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 1c75c76458..efe9c378d9 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -6,7 +6,7 @@
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1, 2, 3, 4, 5)
volume = 5
- container_type = TRANSPARENT
+ reagent_flags = TRANSPARENT
/obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 05f30a7092..9bc6bef8a5 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -3,7 +3,7 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
volume = 50
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
spillable = TRUE
resistance_flags = ACID_PROOF
@@ -194,13 +194,10 @@
reactions. Can hold up to 50 units."
icon_state = "beakernoreact"
materials = list(MAT_METAL=3000)
+ reagent_flags = OPENCONTAINER | NO_REACT
volume = 50
amount_per_transfer_from_this = 10
-/obj/item/reagent_containers/glass/beaker/noreact/Initialize()
- . = ..()
- reagents.set_reacting(FALSE)
-
/obj/item/reagent_containers/glass/beaker/bluespace
name = "bluespace beaker"
desc = "A bluespace beaker, powered by experimental bluespace technology \
@@ -291,11 +288,11 @@
to_chat(user, "[src]'s contents spill all over you!")
reagents.reaction(user, TOUCH)
reagents.clear_reagents()
- container_type = NONE
+ reagent_flags = NONE
/obj/item/reagent_containers/glass/bucket/dropped(mob/user)
. = ..()
- container_type = initial(container_type)
+ reagent_flags = initial(reagent_flags)
/obj/item/reagent_containers/glass/bucket/equip_to_best_slot(var/mob/M)
if(reagents.total_volume) //If there is water in a bucket, don't quick equip it to the head
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index f59f00a4b8..82d95cea40 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -10,7 +10,7 @@
volume = 30
possible_transfer_amounts = list()
resistance_flags = ACID_PROOF
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT
var/ignore_flags = 0
var/infinite = FALSE
@@ -73,7 +73,7 @@
desc = "A modified air-needle autoinjector with a small single-use reservoir. It contains an experimental serum."
icon_state = "combat_hypo"
volume = 5
- container_type = NONE
+ reagent_flags = NONE
list_reagents = list("magillitis" = 5)
//MediPens
@@ -88,7 +88,7 @@
amount_per_transfer_from_this = 10
volume = 10
ignore_flags = 1 //so you can medipen through hardsuits
- container_type = DRAWABLE
+ reagent_flags = DRAWABLE
flags_1 = null
list_reagents = list("epinephrine" = 10)
@@ -103,7 +103,7 @@
..()
if(!iscyborg(user))
reagents.maximum_volume = 0 //Makes them useless afterwards
- container_type = NONE
+ reagent_flags = NONE
update_icon()
addtimer(CALLBACK(src, .proc/cyborg_recharge, user), 80)
diff --git a/code/modules/reagents/reagent_containers/medspray.dm b/code/modules/reagents/reagent_containers/medspray.dm
index 8631c14ac0..54a38eef86 100644
--- a/code/modules/reagents/reagent_containers/medspray.dm
+++ b/code/modules/reagents/reagent_containers/medspray.dm
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
item_flags = NOBLUDGEON
obj_flags = UNIQUE_RENAME
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index afb985120e..d2e3f95bdc 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -7,7 +7,7 @@
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
item_flags = NOBLUDGEON
- container_type = OPENCONTAINER
+ reagent_flags = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
@@ -224,7 +224,7 @@
return
/obj/item/reagent_containers/spray/waterflower/cyborg
- container_type = NONE
+ reagent_flags = NONE
volume = 100
list_reagents = list("water" = 100)
var/generate_amount = 5
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index b2b7ab88a7..4947ddde6f 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -13,7 +13,7 @@
var/busy = FALSE // needed for delayed drawing of blood
var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun
materials = list(MAT_METAL=10, MAT_GLASS=20)
- container_type = TRANSPARENT
+ reagent_flags = TRANSPARENT
/obj/item/reagent_containers/syringe/Initialize()
. = ..()
@@ -249,10 +249,7 @@
name = "cryo syringe"
desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units."
volume = 20
-
-/obj/item/reagent_containers/syringe/noreact/Initialize()
- . = ..()
- reagents.set_reacting(FALSE)
+ reagent_flags = TRANSPARENT | NO_REACT
/obj/item/reagent_containers/syringe/piercing
name = "piercing syringe"
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 45154a70f4..19afab2e6e 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -5,7 +5,6 @@
icon_state = "water"
density = TRUE
anchored = FALSE
- container_type = DRAINABLE | AMOUNT_VISIBLE
pressure_resistance = 2*ONE_ATMOSPHERE
max_integrity = 300
var/tank_volume = 1000 //In units, how much the dispenser can hold
@@ -24,7 +23,7 @@
return ..()
/obj/structure/reagent_dispensers/Initialize()
- create_reagents(tank_volume)
+ create_reagents(tank_volume, DRAINABLE | AMOUNT_VISIBLE)
reagents.add_reagent(reagent_id, tank_volume)
. = ..()
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 6670a01284..c7d02486dd 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -1,7 +1,6 @@
/obj/machinery/rnd/production
name = "technology fabricator"
desc = "Makes researched and prototype items with materials and energy."
- container_type = OPENCONTAINER
layer = BELOW_OBJ_LAYER
var/consoleless_interface = FALSE //Whether it can be used without a console.
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
@@ -21,7 +20,7 @@
/obj/machinery/rnd/production/Initialize(mapload)
. = ..()
- create_reagents(0)
+ create_reagents(0, OPENCONTAINER)
matching_designs = list()
cached_designs = list()
stored_research = new
diff --git a/code/modules/research/machinery/circuit_imprinter.dm b/code/modules/research/machinery/circuit_imprinter.dm
index 5a84f2f663..09cf9cda87 100644
--- a/code/modules/research/machinery/circuit_imprinter.dm
+++ b/code/modules/research/machinery/circuit_imprinter.dm
@@ -2,7 +2,6 @@
name = "circuit imprinter"
desc = "Manufactures circuit boards for the construction of machines."
icon_state = "circuit_imprinter"
- container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/circuit_imprinter
categories = list(
"AI Modules",
diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm
index e47bd97494..53d4a21a9d 100644
--- a/code/modules/research/machinery/departmental_circuit_imprinter.dm
+++ b/code/modules/research/machinery/departmental_circuit_imprinter.dm
@@ -2,7 +2,6 @@
name = "department circuit imprinter"
desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type."
icon_state = "circuit_imprinter"
- container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department
requires_console = FALSE
consoleless_interface = TRUE
diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm
index f91f3282d5..7fad6825fe 100644
--- a/code/modules/research/machinery/departmental_protolathe.dm
+++ b/code/modules/research/machinery/departmental_protolathe.dm
@@ -2,7 +2,6 @@
name = "department protolathe"
desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type."
icon_state = "protolathe"
- container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/protolathe/department
requires_console = FALSE
consoleless_interface = TRUE
diff --git a/code/modules/research/machinery/departmental_techfab.dm b/code/modules/research/machinery/departmental_techfab.dm
index cf0e30596f..8b82fd2b37 100644
--- a/code/modules/research/machinery/departmental_techfab.dm
+++ b/code/modules/research/machinery/departmental_techfab.dm
@@ -2,7 +2,6 @@
name = "department techfab"
desc = "An advanced fabricator designed to print out the latest prototypes and circuits researched from Science. Contains hardware to sync to research networks. This one is department-locked and only possesses a limited set of decryption keys."
icon_state = "protolathe"
- container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/techfab/department
/obj/machinery/rnd/production/techfab/department/engineering
diff --git a/code/modules/research/machinery/protolathe.dm b/code/modules/research/machinery/protolathe.dm
index ef74fec666..6acfc9ec42 100644
--- a/code/modules/research/machinery/protolathe.dm
+++ b/code/modules/research/machinery/protolathe.dm
@@ -2,7 +2,6 @@
name = "protolathe"
desc = "Converts raw materials into useful objects."
icon_state = "protolathe"
- container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/protolathe
categories = list(
"Power Designs",
diff --git a/code/modules/research/machinery/techfab.dm b/code/modules/research/machinery/techfab.dm
index 40b407ac61..332a1ccf88 100644
--- a/code/modules/research/machinery/techfab.dm
+++ b/code/modules/research/machinery/techfab.dm
@@ -2,7 +2,6 @@
name = "technology fabricator"
desc = "Produces researched prototypes with raw materials and energy."
icon_state = "protolathe"
- container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/techfab
categories = list(
"Power Designs",
diff --git a/code/modules/research/xenobiology/crossbreeding/__corecross.dm b/code/modules/research/xenobiology/crossbreeding/__corecross.dm
index d9d58083cb..1146f01f0b 100644
--- a/code/modules/research/xenobiology/crossbreeding/__corecross.dm
+++ b/code/modules/research/xenobiology/crossbreeding/__corecross.dm
@@ -90,12 +90,11 @@ To add a crossbreed:
icon = 'icons/obj/slimecrossing.dmi'
icon_state = "base"
var/del_on_empty = TRUE
- container_type = INJECTABLE | DRAWABLE
var/list/list_reagents
/obj/item/slimecrossbeaker/Initialize()
. = ..()
- create_reagents(50)
+ create_reagents(50, INJECTABLE | DRAWABLE)
if(list_reagents)
for(var/reagent in list_reagents)
reagents.add_reagent(reagent, list_reagents[reagent])
@@ -130,10 +129,13 @@ To add a crossbreed:
list_reagents = list("omnizine" = 15)
/obj/item/slimecrossbeaker/autoinjector //As with the above, but automatically injects whomever it is used on with contents.
- container_type = DRAWABLE //Cannot be refilled, since it's basically an autoinjector!
var/ignore_flags = FALSE
var/self_use_only = FALSE
+/obj/item/slimecrossbeaker/autoinjector/Initialize()
+ . = ..()
+ reagents.reagents_holder_flags = DRAWABLE // Cannot be refilled, since it's basically an autoinjector!
+
/obj/item/slimecrossbeaker/autoinjector/attack(mob/living/M, mob/user)
if(!reagents.total_volume)
to_chat(user, "[src] is empty!")
@@ -169,12 +171,15 @@ To add a crossbreed:
list_reagents = list("slimejelly" = 50)
/obj/item/slimecrossbeaker/autoinjector/peaceandlove
- container_type = null //It won't be *that* easy to get your hands on pax.
name = "peaceful distillation"
desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy."
color = "#DDAAAA"
list_reagents = list("synthpax" = 10, "space_drugs" = 15) //Peace, dudes
+/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize()
+ . = ..()
+ reagents.reagents_holder_flags = NONE // It won't be *that* easy to get your hands on pax.
+
/obj/item/slimecrossbeaker/autoinjector/slimestimulant
name = "invigorating gel"
desc = "A bubbling purple mixture, designed to heal and boost movement."
diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm
index 3b2131dd81..38362e6d64 100644
--- a/code/modules/research/xenobiology/crossbreeding/burning.dm
+++ b/code/modules/research/xenobiology/crossbreeding/burning.dm
@@ -7,12 +7,11 @@ Burning extracts:
name = "burning extract"
desc = "It's boiling over with barely-contained energy."
effect = "burning"
- container_type = INJECTABLE | DRAWABLE
icon_state = "burning"
/obj/item/slimecross/burning/Initialize()
. = ..()
- create_reagents(10)
+ create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/burning/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10))
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index b664380d9e..b0cececaf4 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -8,12 +8,11 @@ Charged extracts:
name = "charged extract"
desc = "It sparks with electric power."
effect = "charged"
- container_type = INJECTABLE | DRAWABLE
icon_state = "charged"
/obj/item/slimecross/charged/Initialize()
. = ..()
- create_reagents(10)
+ create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/charged/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10))
diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm
index 25dbaa461f..f09cc7b9e0 100644
--- a/code/modules/research/xenobiology/crossbreeding/chilling.dm
+++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm
@@ -7,12 +7,11 @@ Chilling extracts:
name = "chilling extract"
desc = "It's cold to the touch, as if frozen solid."
effect = "chilling"
- container_type = INJECTABLE | DRAWABLE
icon_state = "chilling"
/obj/item/slimecross/chilling/Initialize()
. = ..()
- create_reagents(10)
+ create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/chilling/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10))
diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm
index 2ab39eb06f..4d39d956e7 100644
--- a/code/modules/research/xenobiology/crossbreeding/industrial.dm
+++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm
@@ -5,7 +5,6 @@ Industrial extracts:
/obj/item/slimecross/industrial
name = "industrial extract"
desc = "A gel-like, sturdy extract, fond of plasma and industry."
- container_type = INJECTABLE | DRAWABLE
effect = "industrial"
icon_state = "industrial_still"
var/plasmarequired = 2 //Units of plasma required to be consumed to produce item.
@@ -22,7 +21,7 @@ Industrial extracts:
/obj/item/slimecross/industrial/Initialize()
. = ..()
- create_reagents(100)
+ create_reagents(100, INJECTABLE | DRAWABLE)
START_PROCESSING(SSobj,src)
/obj/item/slimecross/industrial/Destroy()
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index ca12accbed..76d444da18 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -10,7 +10,6 @@
throwforce = 0
throw_speed = 3
throw_range = 6
- container_type = INJECTABLE | DRAWABLE
grind_results = list()
var/Uses = 1 // uses before it goes inert
var/qdel_timer = null // deletion timer, for delayed reactions
@@ -39,7 +38,7 @@
/obj/item/slime_extract/Initialize()
. = ..()
- create_reagents(100)
+ create_reagents(100, INJECTABLE | DRAWABLE)
/obj/item/slime_extract/on_grind()
if(Uses)