Merge pull request #41997 from coiax/removes-container-type

Refactors `container_type` into `reagents.flags`
This commit is contained in:
Jordie
2018-12-23 16:45:10 +11:00
committed by GitHub
54 changed files with 109 additions and 168 deletions

View File

@@ -60,9 +60,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define FLOATING (1<<3) #define FLOATING (1<<3)
#define UNSTOPPABLE (1<<4) //When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped. #define UNSTOPPABLE (1<<4) //When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped.
// Flags for reagents
#define REAGENT_NOREACT (1<<0)
//Fire and Acid stuff, for resistance_flags //Fire and Acid stuff, for resistance_flags
#define LAVA_PROOF (1<<0) #define LAVA_PROOF (1<<0)
#define FIRE_PROOF (1<<1) //100% immune to fire damage (but not necessarily to lava or heat) #define FIRE_PROOF (1<<1) //100% immune to fire damage (but not necessarily to lava or heat)

View File

@@ -2,7 +2,6 @@
#define LIQUID 2 #define LIQUID 2
#define GAS 3 #define GAS 3
// container_type defines
#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes. #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. #define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes.
@@ -11,6 +10,7 @@
#define TRANSPARENT (1<<4) // Used on containers which you want to be able to see the reagents off. #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 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. // Is an open container for all intents and purposes.
#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT) #define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)

View File

@@ -113,9 +113,6 @@ GLOBAL_LIST_INIT(bitfields, list(
"INDESTRUCTIBLE" = INDESTRUCTIBLE, "INDESTRUCTIBLE" = INDESTRUCTIBLE,
"FREEZE_PROOF" = FREEZE_PROOF "FREEZE_PROOF" = FREEZE_PROOF
), ),
"reagents_holder_flags" = list(
"REAGENT_NOREACT" = REAGENT_NOREACT
),
"flags_1" = list( "flags_1" = list(
"NOJAUNT_1" = NOJAUNT_1, "NOJAUNT_1" = NOJAUNT_1,
"UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1, "UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1,
@@ -156,14 +153,6 @@ GLOBAL_LIST_INIT(bitfields, list(
"SMOOTH_BORDER" = SMOOTH_BORDER, "SMOOTH_BORDER" = SMOOTH_BORDER,
"SMOOTH_QUEUED" = SMOOTH_QUEUED, "SMOOTH_QUEUED" = SMOOTH_QUEUED,
), ),
"container_type" = list(
"INJECTABLE" = INJECTABLE,
"DRAWABLE" = DRAWABLE,
"REFILLABLE" = REFILLABLE,
"DRAINABLE" = DRAINABLE,
"TRANSPARENT" = TRANSPARENT,
"AMOUNT_VISIBLE" = AMOUNT_VISIBLE,
),
"car_traits" = list( "car_traits" = list(
"CAN_KIDNAP" = CAN_KIDNAP, "CAN_KIDNAP" = CAN_KIDNAP,
), ),

View File

@@ -6,7 +6,6 @@
var/flags_1 = NONE var/flags_1 = NONE
var/interaction_flags_atom = NONE var/interaction_flags_atom = NONE
var/container_type = NONE
var/datum/reagents/reagents = null var/datum/reagents/reagents = null
//This atom's HUD (med/sec, etc) images. Associative list. //This atom's HUD (med/sec, etc) images. Associative list.
@@ -214,16 +213,16 @@
return is_refillable() && is_drainable() return is_refillable() && is_drainable()
/atom/proc/is_injectable(mob/user, allowmobs = TRUE) /atom/proc/is_injectable(mob/user, allowmobs = TRUE)
return reagents && (container_type & (INJECTABLE | REFILLABLE)) return reagents && (reagents.flags & (INJECTABLE | REFILLABLE))
/atom/proc/is_drawable(mob/user, allowmobs = TRUE) /atom/proc/is_drawable(mob/user, allowmobs = TRUE)
return reagents && (container_type & (DRAWABLE | DRAINABLE)) return reagents && (reagents.flags & (DRAWABLE | DRAINABLE))
/atom/proc/is_refillable() /atom/proc/is_refillable()
return reagents && (container_type & REFILLABLE) return reagents && (reagents.flags & REFILLABLE)
/atom/proc/is_drainable() /atom/proc/is_drainable()
return reagents && (container_type & DRAINABLE) return reagents && (reagents.flags & DRAINABLE)
/atom/proc/AllowDrop() /atom/proc/AllowDrop()
@@ -272,7 +271,7 @@
to_chat(user, desc) to_chat(user, desc)
if(reagents) if(reagents)
if(container_type & TRANSPARENT) if(reagents.flags & TRANSPARENT)
to_chat(user, "It contains:") to_chat(user, "It contains:")
if(reagents.reagent_list.len) if(reagents.reagent_list.len)
if(user.can_see_reagents()) //Show each individual reagent if(user.can_see_reagents()) //Show each individual reagent
@@ -285,7 +284,7 @@
to_chat(user, "[total_volume] units of various reagents") to_chat(user, "[total_volume] units of various reagents")
else else
to_chat(user, "Nothing.") to_chat(user, "Nothing.")
else if(container_type & AMOUNT_VISIBLE) else if(reagents.flags & AMOUNT_VISIBLE)
if(reagents.total_volume) if(reagents.total_volume)
to_chat(user, "<span class='notice'>It has [reagents.total_volume] unit\s left.</span>") to_chat(user, "<span class='notice'>It has [reagents.total_volume] unit\s left.</span>")
else else

View File

@@ -10,7 +10,6 @@
icon = 'icons/obj/machines/limbgrower.dmi' icon = 'icons/obj/machines/limbgrower.dmi'
icon_state = "limbgrower_idleoff" icon_state = "limbgrower_idleoff"
density = TRUE density = TRUE
container_type = OPENCONTAINER
use_power = IDLE_POWER_USE use_power = IDLE_POWER_USE
idle_power_usage = 10 idle_power_usage = 10
active_power_usage = 100 active_power_usage = 100
@@ -34,7 +33,7 @@
) )
/obj/machinery/limbgrower/Initialize() /obj/machinery/limbgrower/Initialize()
create_reagents(100) create_reagents(100, OPENCONTAINER)
stored_research = new /datum/techweb/specialized/autounlocking/limbgrower stored_research = new /datum/techweb/specialized/autounlocking/limbgrower
. = ..() . = ..()

View File

@@ -259,8 +259,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Initialize() /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Initialize()
. = ..() . = ..()
create_reagents(max_volume) create_reagents(max_volume, NO_REACT)
reagents.set_reacting(FALSE)
syringes = new syringes = new
known_reagents = list("epinephrine"="Epinephrine","charcoal"="Charcoal") known_reagents = list("epinephrine"="Epinephrine","charcoal"="Charcoal")
processed_reagents = new processed_reagents = new
@@ -276,7 +275,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/critfail() /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/critfail()
..() ..()
if(reagents) if(reagents)
reagents.set_reacting(TRUE) DISABLE_BITFIELD(reagents.flags, NO_REACT)
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/mecha/medical/M) /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/mecha/medical/M)
if(..()) if(..())

View File

@@ -102,7 +102,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigoff" icon_state = "cigoff"
throw_speed = 0.5 throw_speed = 0.5
item_state = "cigoff" item_state = "cigoff"
container_type = INJECTABLE
w_class = WEIGHT_CLASS_TINY w_class = WEIGHT_CLASS_TINY
body_parts_covered = null body_parts_covered = null
grind_results = list() grind_results = list()
@@ -125,8 +124,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/Initialize() /obj/item/clothing/mask/cigarette/Initialize()
. = ..() . = ..()
create_reagents(chem_volume) create_reagents(chem_volume, INJECTABLE | NO_REACT)
reagents.set_reacting(FALSE) // so it doesn't react until you light it
if(list_reagents) if(list_reagents)
reagents.add_reagent_list(list_reagents) reagents.add_reagent_list(list_reagents)
if(starts_lit) if(starts_lit)
@@ -186,7 +184,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
qdel(src) qdel(src)
return return
// allowing reagents to react after being lit // allowing reagents to react after being lit
reagents.set_reacting(TRUE) DISABLE_BITFIELD(reagents.flags, NO_REACT)
reagents.handle_reactions() reagents.handle_reactions()
icon_state = icon_on icon_state = icon_on
item_state = icon_on item_state = icon_on
@@ -729,8 +727,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/vape/Initialize(mapload, param_color) /obj/item/clothing/mask/vape/Initialize(mapload, param_color)
. = ..() . = ..()
create_reagents(chem_volume) create_reagents(chem_volume, NO_REACT)
reagents.set_reacting(FALSE) // so it doesn't react until you light it
reagents.add_reagent("nicotine", 50) reagents.add_reagent("nicotine", 50)
if(!icon_state) if(!icon_state)
if(!param_color) if(!param_color)
@@ -799,13 +796,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(reagents.total_volume > 0) if(reagents.total_volume > 0)
to_chat(user, "<span class='notice'>You empty [src] of all reagents.</span>") to_chat(user, "<span class='notice'>You empty [src] of all reagents.</span>")
reagents.clear_reagents() reagents.clear_reagents()
return
/obj/item/clothing/mask/vape/equipped(mob/user, slot) /obj/item/clothing/mask/vape/equipped(mob/user, slot)
if(slot == SLOT_WEAR_MASK) if(slot == SLOT_WEAR_MASK)
if(!screw) if(!screw)
to_chat(user, "<span class='notice'>You start puffing on the vape.</span>") to_chat(user, "<span class='notice'>You start puffing on the vape.</span>")
reagents.set_reacting(TRUE) DISABLE_BITFIELD(reagents.flags, NO_REACT)
START_PROCESSING(SSobj, src) START_PROCESSING(SSobj, src)
else //it will not start if the vape is opened. else //it will not start if the vape is opened.
to_chat(user, "<span class='warning'>You need to close the cap first!</span>") to_chat(user, "<span class='warning'>You need to close the cap first!</span>")
@@ -813,7 +809,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/vape/dropped(mob/user) /obj/item/clothing/mask/vape/dropped(mob/user)
var/mob/living/carbon/C = user var/mob/living/carbon/C = user
if(C.get_item_by_slot(SLOT_WEAR_MASK) == src) if(C.get_item_by_slot(SLOT_WEAR_MASK) == src)
reagents.set_reacting(FALSE) ENABLE_BITFIELD(reagents.flags, NO_REACT)
STOP_PROCESSING(SSobj, src) STOP_PROCESSING(SSobj, src)
/obj/item/clothing/mask/vape/proc/hand_reagents()//had to rename to avoid duplicate error /obj/item/clothing/mask/vape/proc/hand_reagents()//had to rename to avoid duplicate error

View File

@@ -15,7 +15,6 @@
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
dog_fashion = /datum/dog_fashion/back dog_fashion = /datum/dog_fashion/back
resistance_flags = FIRE_PROOF resistance_flags = FIRE_PROOF
container_type = AMOUNT_VISIBLE
var/max_water = 50 var/max_water = 50
var/last_use = 1 var/last_use = 1
var/chem = "water" var/chem = "water"
@@ -44,7 +43,7 @@
/obj/item/extinguisher/Initialize() /obj/item/extinguisher/Initialize()
. = ..() . = ..()
create_reagents(max_water) create_reagents(max_water, AMOUNT_VISIBLE)
reagents.add_reagent(chem, max_water) reagents.add_reagent(chem, max_water)

View File

@@ -2,7 +2,6 @@
name = "chem implant" name = "chem implant"
desc = "Injects things." desc = "Injects things."
icon_state = "reagents" icon_state = "reagents"
container_type = OPENCONTAINER
activated = FALSE activated = FALSE
/obj/item/implant/chem/get_data() /obj/item/implant/chem/get_data()
@@ -23,7 +22,7 @@
/obj/item/implant/chem/Initialize() /obj/item/implant/chem/Initialize()
. = ..() . = ..()
create_reagents(50) create_reagents(50, OPENCONTAINER)
GLOB.tracked_chem_implants += src GLOB.tracked_chem_implants += src
/obj/item/implant/chem/Destroy() /obj/item/implant/chem/Destroy()

View File

@@ -18,7 +18,7 @@
/obj/item/watertank/Initialize() /obj/item/watertank/Initialize()
. = ..() . = ..()
create_reagents(volume) create_reagents(volume, OPENCONTAINER)
noz = make_noz() noz = make_noz()
/obj/item/watertank/ui_action_click(mob/user) /obj/item/watertank/ui_action_click(mob/user)
@@ -113,7 +113,6 @@
possible_transfer_amounts = list(25,50,100) possible_transfer_amounts = list(25,50,100)
volume = 500 volume = 500
item_flags = NOBLUDGEON | ABSTRACT // don't put in storage item_flags = NOBLUDGEON | ABSTRACT // don't put in storage
container_type = OPENCONTAINER
slot_flags = 0 slot_flags = 0
var/obj/item/watertank/tank var/obj/item/watertank/tank
@@ -336,7 +335,7 @@
var/usage_ratio = 5 //5 unit added per 1 removed var/usage_ratio = 5 //5 unit added per 1 removed
var/injection_amount = 1 var/injection_amount = 1
amount_per_transfer_from_this = 5 amount_per_transfer_from_this = 5
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
spillable = FALSE spillable = FALSE
possible_transfer_amounts = list(5,10,15) possible_transfer_amounts = list(5,10,15)

View File

@@ -266,10 +266,10 @@
status = !status status = !status
if(status) if(status)
to_chat(user, "<span class='notice'>You resecure [src] and close the fuel tank.</span>") to_chat(user, "<span class='notice'>You resecure [src] and close the fuel tank.</span>")
container_type = NONE DISABLE_BITFIELD(reagents.flags, OPENCONTAINER)
else else
to_chat(user, "<span class='notice'>[src] can now be attached, modified, and refuelled.</span>") to_chat(user, "<span class='notice'>[src] can now be attached, modified, and refuelled.</span>")
container_type = OPENCONTAINER ENABLE_BITFIELD(reagents.flags, OPENCONTAINER)
add_fingerprint(user) add_fingerprint(user)
/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user) /obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)

View File

@@ -5,7 +5,6 @@
icon_state = "cart" icon_state = "cart"
anchored = FALSE anchored = FALSE
density = TRUE density = TRUE
container_type = OPENCONTAINER
//copypaste sorry //copypaste sorry
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite 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 var/obj/item/storage/bag/trash/mybag = null
@@ -18,7 +17,7 @@
/obj/structure/janitorialcart/Initialize() /obj/structure/janitorialcart/Initialize()
. = ..() . = ..()
create_reagents(100) create_reagents(100, OPENCONTAINER)
/obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user) /obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user)
if(reagents.total_volume < 1) if(reagents.total_volume < 1)

View File

@@ -4,13 +4,12 @@
icon = 'icons/obj/janitor.dmi' icon = 'icons/obj/janitor.dmi'
icon_state = "mopbucket" icon_state = "mopbucket"
density = TRUE density = TRUE
container_type = OPENCONTAINER
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
/obj/structure/mopbucket/Initialize() /obj/structure/mopbucket/Initialize()
. = ..() . = ..()
create_reagents(100) create_reagents(100, OPENCONTAINER)
/obj/structure/mopbucket/attackby(obj/item/I, mob/user, params) /obj/structure/mopbucket/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/mop)) if(istype(I, /obj/item/mop))
@@ -27,4 +26,4 @@
/obj/structure/mopbucket/update_icon() /obj/structure/mopbucket/update_icon()
cut_overlays() cut_overlays()
if(reagents.total_volume > 0) if(reagents.total_volume > 0)
add_overlay("mopbucket_water") add_overlay("mopbucket_water")

View File

@@ -13,7 +13,7 @@
icon = 'icons/obj/toy.dmi' icon = 'icons/obj/toy.dmi'
icon_state = "rag" icon_state = "rag"
item_flags = NOBLUDGEON item_flags = NOBLUDGEON
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
amount_per_transfer_from_this = 5 amount_per_transfer_from_this = 5
possible_transfer_amounts = list() possible_transfer_amounts = list()
volume = 5 volume = 5
@@ -47,4 +47,3 @@
if(do_after(user,30, target = A)) if(do_after(user,30, target = A))
user.visible_message("[user] finishes wiping off [A]!", "<span class='notice'>You finish wiping off [A].</span>") user.visible_message("[user] finishes wiping off [A]!", "<span class='notice'>You finish wiping off [A].</span>")
SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
return

View File

@@ -8,7 +8,7 @@
icon_state = null icon_state = null
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/food_righthand.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. 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) possible_transfer_amounts = list(5,10,15,20,25,30,50)
volume = 50 volume = 50
@@ -148,7 +148,6 @@
possible_transfer_amounts = list() possible_transfer_amounts = list()
volume = 5 volume = 5
flags_1 = CONDUCT_1 flags_1 = CONDUCT_1
container_type = OPENCONTAINER
spillable = TRUE spillable = TRUE
resistance_flags = FIRE_PROOF resistance_flags = FIRE_PROOF
isGlass = FALSE isGlass = FALSE
@@ -398,7 +397,7 @@
name = "soda can" name = "soda can"
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
container_type = NONE reagent_flags = NONE
spillable = FALSE spillable = FALSE
isGlass = FALSE isGlass = FALSE
custom_price = 10 custom_price = 10
@@ -435,10 +434,9 @@
/obj/item/reagent_containers/food/drinks/soda_cans/proc/open_soda(mob/user) /obj/item/reagent_containers/food/drinks/soda_cans/proc/open_soda(mob/user)
to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh
container_type = OPENCONTAINER ENABLE_BITFIELD(reagents.flags, OPENCONTAINER)
playsound(src, "can_open", 50, 1) playsound(src, "can_open", 50, 1)
spillable = TRUE spillable = TRUE
return
/obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user) /obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user)
if(!is_drainable()) if(!is_drainable())

View File

@@ -4,7 +4,7 @@
/obj/item/reagent_containers/food /obj/item/reagent_containers/food
possible_transfer_amounts = list() possible_transfer_amounts = list()
volume = 50 //Sets the default container amount for all food items. volume = 50 //Sets the default container amount for all food items.
container_type = INJECTABLE reagent_flags = INJECTABLE
resistance_flags = FLAMMABLE resistance_flags = FLAMMABLE
var/foodtype = NONE var/foodtype = NONE
var/last_check_time var/last_check_time
@@ -36,4 +36,4 @@
if(foodtype & H.dna.species.toxic_food) if(foodtype & H.dna.species.toxic_food)
to_chat(H, "<span class='warning'>You don't feel so good...</span>") to_chat(H, "<span class='warning'>You don't feel so good...</span>")
H.adjust_disgust(25 + 30 * fraction) H.adjust_disgust(25 + 30 * fraction)
last_check_time = world.time last_check_time = world.time

View File

@@ -10,7 +10,7 @@
desc = "Just your average condiment container." desc = "Just your average condiment container."
icon = 'icons/obj/food/containers.dmi' icon = 'icons/obj/food/containers.dmi'
icon_state = "emptycondiment" icon_state = "emptycondiment"
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
possible_transfer_amounts = list(1, 5, 10, 15, 20, 25, 30, 50) possible_transfer_amounts = list(1, 5, 10, 15, 20, 25, 30, 50)
volume = 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. //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.

View File

@@ -290,7 +290,7 @@
desc = "A simple bowl, used for soups and salads." desc = "A simple bowl, used for soups and salads."
icon = 'icons/obj/food/soupsalad.dmi' icon = 'icons/obj/food/soupsalad.dmi'
icon_state = "bowl" icon_state = "bowl"
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
materials = list(MAT_GLASS = 500) materials = list(MAT_GLASS = 500)
w_class = WEIGHT_CLASS_NORMAL w_class = WEIGHT_CLASS_NORMAL

View File

@@ -28,7 +28,6 @@ God bless America.
density = TRUE density = TRUE
use_power = IDLE_POWER_USE use_power = IDLE_POWER_USE
idle_power_usage = 5 idle_power_usage = 5
container_type = OPENCONTAINER
layer = BELOW_OBJ_LAYER layer = BELOW_OBJ_LAYER
var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW? var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW?
var/cook_time = 0 var/cook_time = 0
@@ -53,7 +52,7 @@ God bless America.
/obj/machinery/deepfryer/Initialize() /obj/machinery/deepfryer/Initialize()
. = ..() . = ..()
create_reagents(50) create_reagents(50, OPENCONTAINER)
reagents.add_reagent("cooking_oil", 25) reagents.add_reagent("cooking_oil", 25)
component_parts = list() component_parts = list()
component_parts += new /obj/item/circuitboard/machine/deep_fryer(null) component_parts += new /obj/item/circuitboard/machine/deep_fryer(null)

View File

@@ -15,13 +15,11 @@
var/portion = 10 var/portion = 10
var/selected_drink var/selected_drink
var/list/stored_food = list() var/list/stored_food = list()
container_type = OPENCONTAINER
var/obj/item/reagent_containers/mixer var/obj/item/reagent_containers/mixer
/obj/machinery/food_cart/Initialize() /obj/machinery/food_cart/Initialize()
. = ..() . = ..()
create_reagents(LIQUID_CAPACIY) create_reagents(LIQUID_CAPACIY, OPENCONTAINER | NO_REACT)
reagents.set_reacting(FALSE)
mixer = new /obj/item/reagent_containers(src, MIXER_CAPACITY) mixer = new /obj/item/reagent_containers(src, MIXER_CAPACITY)
mixer.name = "Mixer" mixer.name = "Mixer"

View File

@@ -14,7 +14,6 @@
anchored = FALSE anchored = FALSE
use_power = NO_POWER_USE use_power = NO_POWER_USE
layer = BELOW_OBJ_LAYER layer = BELOW_OBJ_LAYER
container_type = OPENCONTAINER
max_integrity = 300 max_integrity = 300
var/list/product_types = list() var/list/product_types = list()
var/dispense_flavour = ICECREAM_VANILLA var/dispense_flavour = ICECREAM_VANILLA
@@ -65,8 +64,7 @@
. = ..() . = ..()
while(product_types.len < 6) while(product_types.len < 6)
product_types.Add(5) product_types.Add(5)
create_reagents() create_reagents(100, NO_REACT | OPENCONTAINER)
reagents.set_reacting(FALSE)
for(var/reagent in icecream_vat_reagents) for(var/reagent in icecream_vat_reagents)
reagents.add_reagent(reagent, icecream_vat_reagents[reagent]) reagents.add_reagent(reagent, icecream_vat_reagents[reagent])

View File

@@ -95,7 +95,6 @@
if(O.use_tool(src, user, 20)) if(O.use_tool(src, user, 20))
user.visible_message("[user] fixes \the [src].", "<span class='notice'>You fix \the [src].</span>") user.visible_message("[user] fixes \the [src].", "<span class='notice'>You fix \the [src].</span>")
broken = 0 broken = 0
container_type = OPENCONTAINER
update_icon() update_icon()
return FALSE //to use some fuel return FALSE //to use some fuel
else else
@@ -111,7 +110,6 @@
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
user.visible_message("[user] has cleaned \the [src].", "<span class='notice'>You clean \the [src].</span>") user.visible_message("[user] has cleaned \the [src].", "<span class='notice'>You clean \the [src].</span>")
dirty = 0 dirty = 0
container_type = OPENCONTAINER
update_icon() update_icon()
updateUsrDialog() updateUsrDialog()
else else
@@ -124,7 +122,6 @@
if(do_after(user, P.cleanspeed, target = src)) if(do_after(user, P.cleanspeed, target = src))
user.visible_message("[user] has cleaned \the [src].", "<span class='notice'>You clean \the [src].</span>") user.visible_message("[user] has cleaned \the [src].", "<span class='notice'>You clean \the [src].</span>")
dirty = 0 dirty = 0
container_type = OPENCONTAINER
update_icon() update_icon()
return TRUE return TRUE

View File

@@ -18,8 +18,7 @@
/obj/machinery/smartfridge/Initialize() /obj/machinery/smartfridge/Initialize()
. = ..() . = ..()
create_reagents() create_reagents(100, NO_REACT)
reagents.set_reacting(FALSE)
if(islist(initial_contents)) if(islist(initial_contents))
for(var/typekey in initial_contents) for(var/typekey in initial_contents)

View File

@@ -5,14 +5,14 @@
icon_state = "barrel" icon_state = "barrel"
density = TRUE density = TRUE
anchored = FALSE anchored = FALSE
container_type = DRAINABLE | AMOUNT_VISIBLE
pressure_resistance = 2 * ONE_ATMOSPHERE pressure_resistance = 2 * ONE_ATMOSPHERE
max_integrity = 300 max_integrity = 300
var/open = FALSE var/open = FALSE
var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better. var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better.
/obj/structure/fermenting_barrel/Initialize() /obj/structure/fermenting_barrel/Initialize()
create_reagents(300) //Bluespace beakers, but without the portability or efficiency in circuits. // Bluespace beakers, but without the portability or efficiency in circuits.
create_reagents(300, DRAINABLE | AMOUNT_VISIBLE)
. = ..() . = ..()
/obj/structure/fermenting_barrel/examine(mob/user) /obj/structure/fermenting_barrel/examine(mob/user)
@@ -56,10 +56,12 @@
/obj/structure/fermenting_barrel/attack_hand(mob/user) /obj/structure/fermenting_barrel/attack_hand(mob/user)
open = !open open = !open
if(open) if(open)
container_type = REFILLABLE | AMOUNT_VISIBLE DISABLE_BITFIELD(reagents.flags, DRAINABLE)
ENABLE_BITFIELD(reagents.flags, REFILLABLE)
to_chat(user, "<span class='notice'>You open [src], letting you fill it.</span>") to_chat(user, "<span class='notice'>You open [src], letting you fill it.</span>")
else else
container_type = DRAINABLE | AMOUNT_VISIBLE ENABLE_BITFIELD(reagents.flags, DRAINABLE)
DISABLE_BITFIELD(reagents.flags, REFILLABLE)
to_chat(user, "<span class='notice'>You close [src], letting you draw from its tap.</span>") to_chat(user, "<span class='notice'>You close [src], letting you draw from its tap.</span>")
update_icon() update_icon()

View File

@@ -7,7 +7,6 @@
species = "replicapod" species = "replicapod"
plantname = "Replica Pod" plantname = "Replica Pod"
product = /mob/living/carbon/human //verrry special -- Urist product = /mob/living/carbon/human //verrry special -- Urist
container_type = INJECTABLE|DRAWABLE
lifespan = 50 lifespan = 50
endurance = 8 endurance = 8
maturation = 10 maturation = 10
@@ -28,7 +27,7 @@
/obj/item/seeds/replicapod/Initialize() /obj/item/seeds/replicapod/Initialize()
. = ..() . = ..()
create_reagents(volume) create_reagents(volume, INJECTABLE|DRAWABLE)
/obj/item/seeds/replicapod/on_reagent_change(changetype) /obj/item/seeds/replicapod/on_reagent_change(changetype)
if(changetype == ADD_REAGENT) if(changetype == ADD_REAGENT)

View File

@@ -310,10 +310,10 @@
/datum/plant_gene/trait/noreact/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) /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, NO_REACT)
/datum/plant_gene/trait/noreact/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) /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, NO_REACT)
G.reagents.handle_reactions() G.reagents.handle_reactions()

View File

@@ -150,9 +150,6 @@
/* /*
* Sleepypens * Sleepypens
*/ */
/obj/item/pen/sleepy
container_type = OPENCONTAINER
/obj/item/pen/sleepy/attack(mob/living/M, mob/user) /obj/item/pen/sleepy/attack(mob/living/M, mob/user)
if(!istype(M)) if(!istype(M))
@@ -167,7 +164,7 @@
/obj/item/pen/sleepy/Initialize() /obj/item/pen/sleepy/Initialize()
. = ..() . = ..()
create_reagents(45) create_reagents(45, OPENCONTAINER)
reagents.add_reagent("chloralhydratedelayed", 20) reagents.add_reagent("chloralhydratedelayed", 20)
reagents.add_reagent("mutetoxin", 15) reagents.add_reagent("mutetoxin", 15)
reagents.add_reagent("tirizene", 10) reagents.add_reagent("tirizene", 10)

View File

@@ -20,7 +20,6 @@
var/self_recharge = 0 //does it self recharge, over time, or not? var/self_recharge = 0 //does it self recharge, over time, or not?
var/ratingdesc = TRUE var/ratingdesc = TRUE
var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it. 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() /obj/item/stock_parts/cell/get_cell()
return src return src
@@ -28,7 +27,7 @@
/obj/item/stock_parts/cell/Initialize(mapload, override_maxcharge) /obj/item/stock_parts/cell/Initialize(mapload, override_maxcharge)
. = ..() . = ..()
START_PROCESSING(SSobj, src) START_PROCESSING(SSobj, src)
create_reagents(5) create_reagents(5, INJECTABLE | DRAINABLE)
if (override_maxcharge) if (override_maxcharge)
maxcharge = override_maxcharge maxcharge = override_maxcharge
charge = maxcharge charge = maxcharge

View File

@@ -111,23 +111,23 @@
icon_state = "cshell" icon_state = "cshell"
projectile_type = /obj/item/projectile/bullet/dart projectile_type = /obj/item/projectile/bullet/dart
var/reagent_amount = 30 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 /obj/item/ammo_casing/shotgun/dart/noreact
name = "cryostasis shotgun dart" name = "cryostasis shotgun dart"
desc = "A dart for use in shotguns, using similar technology as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." desc = "A dart for use in shotguns, using similar technology as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical."
icon_state = "cnrshell" icon_state = "cnrshell"
reagent_amount = 10 reagent_amount = 10
reagent_react = FALSE
/obj/item/ammo_casing/shotgun/dart/Initialize() /obj/item/ammo_casing/shotgun/dart/noreact/Initialize()
. = ..() . = ..()
container_type |= OPENCONTAINER ENABLE_BITFIELD(reagents.flags, NO_REACT)
create_reagents(reagent_amount)
reagents.set_reacting(reagent_react)
/obj/item/ammo_casing/shotgun/dart/attackby()
return
/obj/item/ammo_casing/shotgun/dart/bioterror /obj/item/ammo_casing/shotgun/dart/bioterror
desc = "A shotgun dart filled with deadly toxins." desc = "A shotgun dart filled with deadly toxins."

View File

@@ -12,7 +12,6 @@
materials = list(MAT_METAL=2000) materials = list(MAT_METAL=2000)
clumsy_check = FALSE clumsy_check = FALSE
fire_sound = 'sound/items/syringeproj.ogg' fire_sound = 'sound/items/syringeproj.ogg'
container_type = OPENCONTAINER
var/time_per_syringe = 250 var/time_per_syringe = 250
var/syringes_left = 4 var/syringes_left = 4
var/max_syringes = 4 var/max_syringes = 4
@@ -22,7 +21,7 @@
. = ..() . = ..()
chambered = new /obj/item/ammo_casing/chemgun(src) chambered = new /obj/item/ammo_casing/chemgun(src)
START_PROCESSING(SSobj, src) START_PROCESSING(SSobj, src)
create_reagents(100) create_reagents(100, OPENCONTAINER)
/obj/item/gun/chem/Destroy() /obj/item/gun/chem/Destroy()
. = ..() . = ..()
@@ -44,4 +43,4 @@
syringes_left++ syringes_left++
if(chambered && !chambered.BB) if(chambered && !chambered.BB)
chambered.newshot() chambered.newshot()
last_synth = world.time last_synth = world.time

View File

@@ -6,8 +6,7 @@
/obj/item/projectile/bullet/dart/Initialize() /obj/item/projectile/bullet/dart/Initialize()
. = ..() . = ..()
create_reagents(50) create_reagents(50, NO_REACT)
reagents.set_reacting(FALSE)
/obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE) /obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE)
if(iscarbon(target)) if(iscarbon(target))
@@ -24,7 +23,7 @@
"<span class='userdanger'>You were protected against \the [src]!</span>") "<span class='userdanger'>You were protected against \the [src]!</span>")
..(target, blocked) ..(target, blocked)
reagents.set_reacting(TRUE) DISABLE_BITFIELD(reagents.flags, NO_REACT)
reagents.handle_reactions() reagents.handle_reactions()
return TRUE return TRUE

View File

@@ -51,9 +51,9 @@
var/last_tick = 1 var/last_tick = 1
var/addiction_tick = 1 var/addiction_tick = 1
var/list/datum/reagent/addiction_list = new/list() var/list/datum/reagent/addiction_list = new/list()
var/reagents_holder_flags var/flags
/datum/reagents/New(maximum=100) /datum/reagents/New(maximum=100, new_flags=0)
maximum_volume = maximum maximum_volume = maximum
//I dislike having these here but map-objects are initialised before world/New() is called. >_> //I dislike having these here but map-objects are initialised before world/New() is called. >_>
@@ -62,6 +62,8 @@
if(!GLOB.chemical_reactions_list) if(!GLOB.chemical_reactions_list)
build_chemical_reactions_list() build_chemical_reactions_list()
flags = new_flags
/datum/reagents/Destroy() /datum/reagents/Destroy()
. = ..() . = ..()
var/list/cached_reagents = reagent_list var/list/cached_reagents = reagent_list
@@ -321,13 +323,6 @@
C.update_stamina() C.update_stamina()
update_total() 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) /datum/reagents/proc/conditional_update_move(atom/A, Running = 0)
var/list/cached_reagents = reagent_list var/list/cached_reagents = reagent_list
for(var/reagent in cached_reagents) for(var/reagent in cached_reagents)
@@ -343,11 +338,12 @@
update_total() update_total()
/datum/reagents/proc/handle_reactions() /datum/reagents/proc/handle_reactions()
if(flags & NO_REACT)
return //Yup, no reactions here. No siree.
var/list/cached_reagents = reagent_list var/list/cached_reagents = reagent_list
var/list/cached_reactions = GLOB.chemical_reactions_list var/list/cached_reactions = GLOB.chemical_reactions_list
var/datum/cached_my_atom = my_atom var/datum/cached_my_atom = my_atom
if(reagents_holder_flags & REAGENT_NOREACT)
return //Yup, no reactions here. No siree.
var/reaction_occurred = 0 var/reaction_occurred = 0
do do
@@ -804,10 +800,10 @@
// Convenience proc to create a reagents holder for an atom // Convenience proc to create a reagents holder for an atom
// Max vol is maximum volume of holder // Max vol is maximum volume of holder
/atom/proc/create_reagents(max_vol) /atom/proc/create_reagents(max_vol, flags)
if(reagents) if(reagents)
qdel(reagents) qdel(reagents)
reagents = new/datum/reagents(max_vol) reagents = new /datum/reagents(max_vol, flags)
reagents.my_atom = src reagents.my_atom = src
/proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents /proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents

View File

@@ -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. 'pouring' our reagents into something else.
atom/proc/is_open_container() atom/proc/is_open_container()
Checks obj/var/container_type & OPENCONTAINER. Checks atom/var/reagents.flags & OPENCONTAINER.
If this returns 1 , you can use syringes, beakers etc If this returns 1 , you can use syringes, beakers etc
to manipulate the contents of this object. to manipulate the contents of this object.
If it's 0, you'll need to write your own custom reagent If it's 0, you'll need to write your own custom reagent

View File

@@ -7,6 +7,7 @@
var/amount_per_transfer_from_this = 5 var/amount_per_transfer_from_this = 5
var/list/possible_transfer_amounts = list(5,10,15,20,25,30) var/list/possible_transfer_amounts = list(5,10,15,20,25,30)
var/volume = 30 var/volume = 30
var/reagent_flags
var/list/list_reagents = null var/list/list_reagents = null
var/spawned_disease = null var/spawned_disease = null
var/disease_amount = 20 var/disease_amount = 20
@@ -16,7 +17,7 @@
. = ..() . = ..()
if(isnum(vol) && vol > 0) if(isnum(vol) && vol > 0)
volume = vol volume = vol
create_reagents(volume) create_reagents(volume, reagent_flags)
if(spawned_disease) if(spawned_disease)
var/datum/disease/F = new spawned_disease() var/datum/disease/F = new spawned_disease()
var/list/data = list("viruses"= list(F)) var/list/data = list("viruses"= list(F))

View File

@@ -6,7 +6,7 @@
amount_per_transfer_from_this = 5 amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1, 2, 3, 4, 5) possible_transfer_amounts = list(1, 2, 3, 4, 5)
volume = 5 volume = 5
container_type = TRANSPARENT reagent_flags = TRANSPARENT
/obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity) /obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity)
. = ..() . = ..()

View File

@@ -3,7 +3,7 @@
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50) possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
volume = 50 volume = 50
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
spillable = TRUE spillable = TRUE
resistance_flags = ACID_PROOF resistance_flags = ACID_PROOF
@@ -197,13 +197,10 @@
reactions. Can hold up to 50 units." reactions. Can hold up to 50 units."
icon_state = "beakernoreact" icon_state = "beakernoreact"
materials = list(MAT_METAL=3000) materials = list(MAT_METAL=3000)
reagent_flags = OPENCONTAINER | NO_REACT
volume = 50 volume = 50
amount_per_transfer_from_this = 10 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 /obj/item/reagent_containers/glass/beaker/bluespace
name = "bluespace beaker" name = "bluespace beaker"
desc = "A bluespace beaker, powered by experimental bluespace technology \ desc = "A bluespace beaker, powered by experimental bluespace technology \
@@ -294,11 +291,11 @@
to_chat(user, "<span class='userdanger'>[src]'s contents spill all over you!</span>") to_chat(user, "<span class='userdanger'>[src]'s contents spill all over you!</span>")
reagents.reaction(user, TOUCH) reagents.reaction(user, TOUCH)
reagents.clear_reagents() reagents.clear_reagents()
container_type = NONE reagents.flags = NONE
/obj/item/reagent_containers/glass/bucket/dropped(mob/user) /obj/item/reagent_containers/glass/bucket/dropped(mob/user)
. = ..() . = ..()
container_type = initial(container_type) reagents.flags = initial(reagent_flags)
/obj/item/reagent_containers/glass/bucket/equip_to_best_slot(var/mob/M) /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 if(reagents.total_volume) //If there is water in a bucket, don't quick equip it to the head

View File

@@ -10,7 +10,7 @@
volume = 30 volume = 30
possible_transfer_amounts = list() possible_transfer_amounts = list()
resistance_flags = ACID_PROOF resistance_flags = ACID_PROOF
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT slot_flags = ITEM_SLOT_BELT
var/ignore_flags = 0 var/ignore_flags = 0
var/infinite = FALSE var/infinite = FALSE
@@ -73,7 +73,7 @@
desc = "A modified air-needle autoinjector with a small single-use reservoir. It contains an experimental serum." desc = "A modified air-needle autoinjector with a small single-use reservoir. It contains an experimental serum."
icon_state = "combat_hypo" icon_state = "combat_hypo"
volume = 5 volume = 5
container_type = NONE reagent_flags = NONE
list_reagents = list("magillitis" = 5) list_reagents = list("magillitis" = 5)
//MediPens //MediPens
@@ -88,7 +88,7 @@
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
volume = 10 volume = 10
ignore_flags = 1 //so you can medipen through hardsuits ignore_flags = 1 //so you can medipen through hardsuits
container_type = DRAWABLE reagent_flags = DRAWABLE
flags_1 = null flags_1 = null
list_reagents = list("epinephrine" = 10) list_reagents = list("epinephrine" = 10)
custom_price = 40 custom_price = 40
@@ -104,7 +104,7 @@
..() ..()
if(!iscyborg(user)) if(!iscyborg(user))
reagents.maximum_volume = 0 //Makes them useless afterwards reagents.maximum_volume = 0 //Makes them useless afterwards
container_type = NONE reagents.flags = NONE
update_icon() update_icon()
addtimer(CALLBACK(src, .proc/cyborg_recharge, user), 80) addtimer(CALLBACK(src, .proc/cyborg_recharge, user), 80)
@@ -179,4 +179,4 @@
/obj/item/reagent_containers/hypospray/medipen/atropine /obj/item/reagent_containers/hypospray/medipen/atropine
name = "atropine autoinjector" name = "atropine autoinjector"
desc = "A rapid way to save a person from a critical injury state!" desc = "A rapid way to save a person from a critical injury state!"
list_reagents = list("atropine" = 10) list_reagents = list("atropine" = 10)

View File

@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
item_flags = NOBLUDGEON item_flags = NOBLUDGEON
obj_flags = UNIQUE_RENAME obj_flags = UNIQUE_RENAME
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT slot_flags = ITEM_SLOT_BELT
throwforce = 0 throwforce = 0
w_class = WEIGHT_CLASS_SMALL w_class = WEIGHT_CLASS_SMALL

View File

@@ -7,7 +7,7 @@
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
item_flags = NOBLUDGEON item_flags = NOBLUDGEON
container_type = OPENCONTAINER reagent_flags = OPENCONTAINER
slot_flags = ITEM_SLOT_BELT slot_flags = ITEM_SLOT_BELT
throwforce = 0 throwforce = 0
w_class = WEIGHT_CLASS_SMALL w_class = WEIGHT_CLASS_SMALL
@@ -231,7 +231,7 @@
return return
/obj/item/reagent_containers/spray/waterflower/cyborg /obj/item/reagent_containers/spray/waterflower/cyborg
container_type = NONE reagent_flags = NONE
volume = 100 volume = 100
list_reagents = list("water" = 100) list_reagents = list("water" = 100)
var/generate_amount = 5 var/generate_amount = 5

View File

@@ -13,7 +13,7 @@
var/busy = FALSE // needed for delayed drawing of blood var/busy = FALSE // needed for delayed drawing of blood
var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun
materials = list(MAT_METAL=10, MAT_GLASS=20) materials = list(MAT_METAL=10, MAT_GLASS=20)
container_type = TRANSPARENT reagent_flags = TRANSPARENT
/obj/item/reagent_containers/syringe/Initialize() /obj/item/reagent_containers/syringe/Initialize()
. = ..() . = ..()
@@ -249,10 +249,7 @@
name = "cryo syringe" name = "cryo syringe"
desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units."
volume = 20 volume = 20
reagent_flags = TRANSPARENT | NO_REACT
/obj/item/reagent_containers/syringe/noreact/Initialize()
. = ..()
reagents.set_reacting(FALSE)
/obj/item/reagent_containers/syringe/piercing /obj/item/reagent_containers/syringe/piercing
name = "piercing syringe" name = "piercing syringe"

View File

@@ -5,7 +5,6 @@
icon_state = "water" icon_state = "water"
density = TRUE density = TRUE
anchored = FALSE anchored = FALSE
container_type = DRAINABLE | AMOUNT_VISIBLE
pressure_resistance = 2*ONE_ATMOSPHERE pressure_resistance = 2*ONE_ATMOSPHERE
max_integrity = 300 max_integrity = 300
var/tank_volume = 1000 //In units, how much the dispenser can hold var/tank_volume = 1000 //In units, how much the dispenser can hold
@@ -24,7 +23,7 @@
return ..() return ..()
/obj/structure/reagent_dispensers/Initialize() /obj/structure/reagent_dispensers/Initialize()
create_reagents(tank_volume) create_reagents(tank_volume, DRAINABLE | AMOUNT_VISIBLE)
reagents.add_reagent(reagent_id, tank_volume) reagents.add_reagent(reagent_id, tank_volume)
. = ..() . = ..()

View File

@@ -1,7 +1,6 @@
/obj/machinery/rnd/production /obj/machinery/rnd/production
name = "technology fabricator" name = "technology fabricator"
desc = "Makes researched and prototype items with materials and energy." desc = "Makes researched and prototype items with materials and energy."
container_type = OPENCONTAINER
layer = BELOW_OBJ_LAYER layer = BELOW_OBJ_LAYER
var/consoleless_interface = FALSE //Whether it can be used without a console. var/consoleless_interface = FALSE //Whether it can be used without a console.
var/efficiency_coeff = 1 //Materials needed / coeff = actual. var/efficiency_coeff = 1 //Materials needed / coeff = actual.
@@ -21,7 +20,7 @@
/obj/machinery/rnd/production/Initialize(mapload) /obj/machinery/rnd/production/Initialize(mapload)
. = ..() . = ..()
create_reagents(0) create_reagents(0, OPENCONTAINER)
matching_designs = list() matching_designs = list()
cached_designs = list() cached_designs = list()
stored_research = new stored_research = new

View File

@@ -2,7 +2,6 @@
name = "circuit imprinter" name = "circuit imprinter"
desc = "Manufactures circuit boards for the construction of machines." desc = "Manufactures circuit boards for the construction of machines."
icon_state = "circuit_imprinter" icon_state = "circuit_imprinter"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/circuit_imprinter circuit = /obj/item/circuitboard/machine/circuit_imprinter
categories = list( categories = list(
"AI Modules", "AI Modules",

View File

@@ -2,7 +2,6 @@
name = "department circuit imprinter" 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." 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" icon_state = "circuit_imprinter"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department circuit = /obj/item/circuitboard/machine/circuit_imprinter/department
requires_console = FALSE requires_console = FALSE
consoleless_interface = TRUE consoleless_interface = TRUE
@@ -11,4 +10,4 @@
name = "department circuit imprinter (Science)" name = "department circuit imprinter (Science)"
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department/science circuit = /obj/item/circuitboard/machine/circuit_imprinter/department/science
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE
department_tag = "Science" department_tag = "Science"

View File

@@ -2,7 +2,6 @@
name = "department protolathe" 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." 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" icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/protolathe/department circuit = /obj/item/circuitboard/machine/protolathe/department
requires_console = FALSE requires_console = FALSE
consoleless_interface = TRUE consoleless_interface = TRUE
@@ -41,4 +40,4 @@
name = "department protolathe (Security)" name = "department protolathe (Security)"
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY
department_tag = "Security" department_tag = "Security"
circuit = /obj/item/circuitboard/machine/protolathe/department/security circuit = /obj/item/circuitboard/machine/protolathe/department/security

View File

@@ -2,7 +2,6 @@
name = "department techfab" 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." 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" icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/techfab/department circuit = /obj/item/circuitboard/machine/techfab/department
/obj/machinery/rnd/production/techfab/department/engineering /obj/machinery/rnd/production/techfab/department/engineering
@@ -39,4 +38,4 @@
name = "department techfab (Security)" name = "department techfab (Security)"
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY
department_tag = "Security" department_tag = "Security"
circuit = /obj/item/circuitboard/machine/techfab/department/security circuit = /obj/item/circuitboard/machine/techfab/department/security

View File

@@ -2,7 +2,6 @@
name = "protolathe" name = "protolathe"
desc = "Converts raw materials into useful objects." desc = "Converts raw materials into useful objects."
icon_state = "protolathe" icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/protolathe circuit = /obj/item/circuitboard/machine/protolathe
categories = list( categories = list(
"Power Designs", "Power Designs",
@@ -23,4 +22,4 @@
/obj/machinery/rnd/production/protolathe/disconnect_console() /obj/machinery/rnd/production/protolathe/disconnect_console()
linked_console.linked_lathe = null linked_console.linked_lathe = null
..() ..()

View File

@@ -2,7 +2,6 @@
name = "technology fabricator" name = "technology fabricator"
desc = "Produces researched prototypes with raw materials and energy." desc = "Produces researched prototypes with raw materials and energy."
icon_state = "protolathe" icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/techfab circuit = /obj/item/circuitboard/machine/techfab
categories = list( categories = list(
"Power Designs", "Power Designs",
@@ -33,4 +32,4 @@
production_animation = "protolathe_n" production_animation = "protolathe_n"
requires_console = FALSE requires_console = FALSE
consoleless_interface = TRUE consoleless_interface = TRUE
allowed_buildtypes = PROTOLATHE | IMPRINTER allowed_buildtypes = PROTOLATHE | IMPRINTER

View File

@@ -90,12 +90,11 @@ To add a crossbreed:
icon = 'icons/obj/slimecrossing.dmi' icon = 'icons/obj/slimecrossing.dmi'
icon_state = "base" icon_state = "base"
var/del_on_empty = TRUE var/del_on_empty = TRUE
container_type = INJECTABLE | DRAWABLE
var/list/list_reagents var/list/list_reagents
/obj/item/slimecrossbeaker/Initialize() /obj/item/slimecrossbeaker/Initialize()
. = ..() . = ..()
create_reagents(50) create_reagents(50, INJECTABLE | DRAWABLE)
if(list_reagents) if(list_reagents)
for(var/reagent in list_reagents) for(var/reagent in list_reagents)
reagents.add_reagent(reagent, list_reagents[reagent]) reagents.add_reagent(reagent, list_reagents[reagent])
@@ -130,10 +129,13 @@ To add a crossbreed:
list_reagents = list("omnizine" = 15) list_reagents = list("omnizine" = 15)
/obj/item/slimecrossbeaker/autoinjector //As with the above, but automatically injects whomever it is used on with contents. /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/ignore_flags = FALSE
var/self_use_only = FALSE var/self_use_only = FALSE
/obj/item/slimecrossbeaker/autoinjector/Initialize()
. = ..()
reagents.flags = DRAWABLE // Cannot be refilled, since it's basically an autoinjector!
/obj/item/slimecrossbeaker/autoinjector/attack(mob/living/M, mob/user) /obj/item/slimecrossbeaker/autoinjector/attack(mob/living/M, mob/user)
if(!reagents.total_volume) if(!reagents.total_volume)
to_chat(user, "<span class='warning'>[src] is empty!</span>") to_chat(user, "<span class='warning'>[src] is empty!</span>")
@@ -169,12 +171,15 @@ To add a crossbreed:
list_reagents = list("slimejelly" = 50) list_reagents = list("slimejelly" = 50)
/obj/item/slimecrossbeaker/autoinjector/peaceandlove /obj/item/slimecrossbeaker/autoinjector/peaceandlove
container_type = null //It won't be *that* easy to get your hands on pax.
name = "peaceful distillation" name = "peaceful distillation"
desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy." desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy."
color = "#DDAAAA" color = "#DDAAAA"
list_reagents = list("synthpax" = 10, "space_drugs" = 15) //Peace, dudes list_reagents = list("synthpax" = 10, "space_drugs" = 15) //Peace, dudes
/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize()
. = ..()
reagents.flags = NONE // It won't be *that* easy to get your hands on pax.
/obj/item/slimecrossbeaker/autoinjector/slimestimulant /obj/item/slimecrossbeaker/autoinjector/slimestimulant
name = "invigorating gel" name = "invigorating gel"
desc = "A bubbling purple mixture, designed to heal and boost movement." desc = "A bubbling purple mixture, designed to heal and boost movement."

View File

@@ -7,12 +7,11 @@ Burning extracts:
name = "burning extract" name = "burning extract"
desc = "It's boiling over with barely-contained energy." desc = "It's boiling over with barely-contained energy."
effect = "burning" effect = "burning"
container_type = INJECTABLE | DRAWABLE
icon_state = "burning" icon_state = "burning"
/obj/item/slimecross/burning/Initialize() /obj/item/slimecross/burning/Initialize()
. = ..() . = ..()
create_reagents(10) create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/burning/attack_self(mob/user) /obj/item/slimecross/burning/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10)) if(!reagents.has_reagent("plasma",10))

View File

@@ -8,12 +8,11 @@ Charged extracts:
name = "charged extract" name = "charged extract"
desc = "It sparks with electric power." desc = "It sparks with electric power."
effect = "charged" effect = "charged"
container_type = INJECTABLE | DRAWABLE
icon_state = "charged" icon_state = "charged"
/obj/item/slimecross/charged/Initialize() /obj/item/slimecross/charged/Initialize()
. = ..() . = ..()
create_reagents(10) create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/charged/attack_self(mob/user) /obj/item/slimecross/charged/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10)) if(!reagents.has_reagent("plasma",10))

View File

@@ -7,11 +7,11 @@ Chilling extracts:
name = "chilling extract" name = "chilling extract"
desc = "It's cold to the touch, as if frozen solid." desc = "It's cold to the touch, as if frozen solid."
effect = "chilling" effect = "chilling"
container_type = INJECTABLE | DRAWABLE
icon_state = "chilling" icon_state = "chilling"
/obj/item/slimecross/chilling/Initialize() /obj/item/slimecross/chilling/Initialize()
. = ..() . = ..()
create_reagents(10) create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/chilling/attack_self(mob/user) /obj/item/slimecross/chilling/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10)) if(!reagents.has_reagent("plasma",10))

View File

@@ -5,7 +5,6 @@ Industrial extracts:
/obj/item/slimecross/industrial /obj/item/slimecross/industrial
name = "industrial extract" name = "industrial extract"
desc = "A gel-like, sturdy extract, fond of plasma and industry." desc = "A gel-like, sturdy extract, fond of plasma and industry."
container_type = INJECTABLE | DRAWABLE
effect = "industrial" effect = "industrial"
icon_state = "industrial_still" icon_state = "industrial_still"
var/plasmarequired = 2 //Units of plasma required to be consumed to produce item. var/plasmarequired = 2 //Units of plasma required to be consumed to produce item.
@@ -22,7 +21,7 @@ Industrial extracts:
/obj/item/slimecross/industrial/Initialize() /obj/item/slimecross/industrial/Initialize()
. = ..() . = ..()
create_reagents(100) create_reagents(100, INJECTABLE | DRAWABLE)
START_PROCESSING(SSobj,src) START_PROCESSING(SSobj,src)
/obj/item/slimecross/industrial/Destroy() /obj/item/slimecross/industrial/Destroy()

View File

@@ -10,7 +10,6 @@
throwforce = 0 throwforce = 0
throw_speed = 3 throw_speed = 3
throw_range = 6 throw_range = 6
container_type = INJECTABLE | DRAWABLE
grind_results = list() grind_results = list()
var/Uses = 1 // uses before it goes inert var/Uses = 1 // uses before it goes inert
var/qdel_timer = null // deletion timer, for delayed reactions var/qdel_timer = null // deletion timer, for delayed reactions
@@ -39,7 +38,7 @@
/obj/item/slime_extract/Initialize() /obj/item/slime_extract/Initialize()
. = ..() . = ..()
create_reagents(100) create_reagents(100, INJECTABLE | DRAWABLE)
/obj/item/slime_extract/on_grind() /obj/item/slime_extract/on_grind()
if(Uses) if(Uses)