You empty the plant bag into the bloodbankgen.")
- else if(PB.contents.len == 0)
- to_chat(user, "You empty the plant bag into the bloodbankgen, filling it to its capacity.")
- else
- to_chat(user, "You fill the bloodbankgen to its capacity.")
- return TRUE //no afterattack
-
- else if(istype(O, /obj/item/reagent_containers/food/snacks/grown))
- var/i = 0
- for(var/obj/item/reagent_containers/food/snacks/grown/G in contents)
- i++
- if(i >= max_items)
- to_chat(user, "The bloodbankgen is full! Activate it.")
- else
- if(user.transferItemToLoc(O, src))
- to_chat(user, "You put [O.name] in [src.name]")
- return TRUE //no afterattack
- else if (istype(O, /obj/item/disk/design_disk))
- user.visible_message("[user] begins to load \the [O] in \the [src]...",
- "You begin to load a design from \the [O]...",
- "You hear the chatter of a floppy drive.")
- processing = TRUE
- var/obj/item/disk/design_disk/D = O
- if(do_after(user, 10, target = src))
- for(var/B in D.blueprints)
- if(B)
- stored_research.add_design(B)
- processing = FALSE
- return TRUE
else
to_chat(user, "You cannot put this in [src.name]!")
@@ -152,49 +199,38 @@
. = ..()
var/dat
if(processing)
- dat += "bloodbankgen is processing! Please wait...
"
+ dat += "The blood generator is processing! Please wait...
"
else
switch(menustat)
- if("nopoints")
- dat += "You do not have enough biomass to create products.
Please, put growns into reactor and activate it.
"
+ if("noblood")
+ dat += "You do not have enough blood product to create synthetics.
"
menustat = "menu"
if("complete")
dat += "Operation complete.
"
menustat = "menu"
- if("void")
- dat += "Error: No growns inside.
Please, put growns into reactor.
"
- menustat = "menu"
if("nobagspace")
- dat += "Not enough space left in container. Unable to create product.
"
+ dat += "Not enough space left in container. Please replace receptical.
"
menustat = "menu"
if(bag)
- var/categories = show_categories.Copy()
- for(var/V in categories)
- categories[V] = list()
- for(var/V in stored_research.researched_designs)
- var/datum/design/D = stored_research.researched_designs[V]
- for(var/C in categories)
- if(C in D.category)
- categories[C] += D
-
- dat += "Biomass: [points] units.
"
- dat += "ActivateDetach Container"
- for(var/cat in categories)
- dat += "[cat]:
"
- dat += ""
- for(var/V in categories[cat])
- var/datum/design/D = V
- dat += "[D.name]:
Make"
- if(cat in timesFiveCategories)
- dat += "
x5"
- if(ispath(D.build_path, /obj/item/stack))
- dat += "
x10"
- dat += "([D.materials[MAT_BIOMASS]/efficiency])
"
- dat += "
"
+ data["isBagLoaded"] = bag ? TRUE : FALSE
+ var/bagContents = list()
+ if(bag && bag.reagents && bag.reagents.reagent_list.len)
+ for(var/datum/reagent/R in bag.reagents.reagent_list)
+ bagContents += list(list("name" = R.name, "volume" = R.volume))
+ data["bagContents"] = bagContents
+ return data
+ if(outbag)
+ data["isOutbagLoaded"] = outbag ? TRUE : FALSE
+ var/outbagContents = list()
+ if(outbag && outbag.reagents && outbag.reagents.reagent_list.len)
+ for(var/datum/reagent/R in outbag.reagents.reagent_list)
+ outbagContents += list(list("name" = R.name, "volume" = R.volume))
+ data["outbagContents"] = outbagContents
+ return data
else
- dat += "No container inside, please insert container.
"
+ dat += "No containers inside, please insert container.
"
- var/datum/browser/popup = new(user, "biogen", name, 350, 520)
+ var/datum/browser/popup = new(user, "bloodbank", name, 350, 520)
popup.set_content(dat)
popup.open()
@@ -207,11 +243,12 @@
to_chat(usr, "The bloodbankgen is in the process of working.")
return
var/S = 0
- for(var/obj/item/reagent_containers/food/snacks/grown/I in contents)
+ if(reagents)
+ var/datum/reagent/blood/B = reagents.has_reagent("blood")
S += 5
- if(I.reagents.get_reagent_amount("nutriment") < 0.1)
- points += 1*productivity
- else points += I.reagents.get_reagent_amount("nutriment")*10*productivity
+ if(B.reagents.get_reagent_amount("blood") < 0.1)
+ bloodstored += 2*productivity
+ else bloodstored += B.reagents.get_reagent_amount("nutriment")*10*productivity
qdel(I)
if(S)
processing = TRUE
@@ -225,15 +262,15 @@
else
menustat = "void"
-/obj/machinery/bloodbankgen/proc/check_cost(list/materials, multiplier = 1, remove_points = 1)
+/obj/machinery/bloodbankgen/proc/check_cost(list/materials, multiplier = 1, remove_bloodstored = 1)
if(materials.len != 1 || materials[1] != MAT_BIOMASS)
return FALSE
- if (materials[MAT_BIOMASS]*multiplier/efficiency > points)
- menustat = "nopoints"
+ if (materials[MAT_BIOMASS]*multiplier/efficiency > bloodstored)
+ menustat = "noblood"
return FALSE
else
- if(remove_points)
- points -= materials[MAT_BIOMASS]*multiplier/efficiency
+ if(remove_bloodstored)
+ bloodstored -= materials[MAT_BIOMASS]*multiplier/efficiency
update_icon()
updateUsrDialog()
return TRUE
@@ -244,49 +281,24 @@
sum_reagents += reagents[R]
sum_reagents *= multiplier
- if(bag.reagents.total_volume + sum_reagents > bag.reagents.maximum_volume)
+ if(outbag.reagents.total_volume + sum_reagents > outbag.reagents.maximum_volume)
menustat = "nobagspace"
return FALSE
return TRUE
-/obj/machinery/bloodbankgen/proc/create_product(datum/design/D, amount)
- if(!bag || !loc)
- return FALSE
-
- if(ispath(D.build_path, /obj/item/stack))
- if(!check_container_volume(D.make_reagents, amount))
- return FALSE
- if(!check_cost(D.materials, amount))
- return FALSE
-
- new D.build_path(drop_location(), amount)
- for(var/R in D.make_reagents)
- bag.reagents.add_reagent(R, D.make_reagents[R]*amount)
- else
- var/i = amount
- while(i > 0)
- if(!check_container_volume(D.make_reagents))
- return .
- if(!check_cost(D.materials))
- return .
- if(D.build_path)
- new D.build_path(loc)
- for(var/R in D.make_reagents)
- bag.reagents.add_reagent(R, D.make_reagents[R])
- . = 1
- --i
-
- menustat = "complete"
- update_icon()
- return .
-
-/obj/machinery/bloodbankgen/proc/detach()
+/obj/machinery/bloodbankgen/proc/detachinput()
if(bag)
bag.forceMove(drop_location())
bag = null
update_icon()
+/obj/machinery/bloodbankgen/proc/detachoutput()
+ if(outbag)
+ outbag.forceMove(drop_location())
+ outbag = null
+ update_icon()
+
/obj/machinery/bloodbankgen/Topic(href, href_list)
if(..() || panel_open)
return
@@ -297,18 +309,10 @@
activate()
updateUsrDialog()
- else if(href_list["detach"])
- detach()
+ else if(href_list["detachinput"])
+ detachinput()
updateUsrDialog()
- else if(href_list["create"])
- var/amount = (text2num(href_list["amount"]))
- //Can't be outside these (if you change this keep a sane limit)
- amount = CLAMP(amount, 1, 50)
- var/datum/design/D = locate(href_list["create"])
- create_product(D, amount)
- updateUsrDialog()
-
- else if(href_list["menu"])
- menustat = "menu"
+ else if(href_list["detachoutput"])
+ detachoutput()
updateUsrDialog()
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 2a01a7e18f..c8d81f4aca 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -31,6 +31,15 @@
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/sheet/glass = 1)
+/obj/item/circuitboard/machine/bloodbankgen
+ name = "Blood Bank Generator (Machine Board)"
+ build_path = obj/machinery/bloodbankgen
+ req_components = list(
+ /obj/item/stock_parts/matter_bin = 1,
+ /obj/item/stock_parts/manipulator = 1,
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/stack/sheet/glass = 1)
+
/obj/item/circuitboard/machine/clonepod
name = "Clone Pod (Machine Board)"
build_path = /obj/machinery/clonepod
diff --git a/icons/obj/bloodbank.dmi b/icons/obj/bloodbank.dmi
new file mode 100644
index 0000000000..4b4b2b6990
Binary files /dev/null and b/icons/obj/bloodbank.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index ee88ace1cc..31cc701c2f 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -562,6 +562,7 @@
#include "code\game\machinery\autolathe.dm"
#include "code\game\machinery\bank_machine.dm"
#include "code\game\machinery\Beacon.dm"
+#include "code\game\machinery\bloodbankgen.dm"
#include "code\game\machinery\buttons.dm"
#include "code\game\machinery\cell_charger.dm"
#include "code\game\machinery\cloning.dm"