/obj/machinery/biogenerator name = "Biogenerator" desc = "" icon = 'icons/obj/biogenerator.dmi' icon_state = "biogen-stand" density = 1 anchored = 1 use_power = 1 idle_power_usage = 40 var/processing = 0 var/obj/item/weapon/reagent_containers/glass/beaker = null var/points = 0 var/menustat = "menu" New() ..() var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) on_reagent_change() //When the reagents change, change the icon as well. update_icon() update_icon() if(!src.beaker) icon_state = "biogen-empty" else if(!src.processing) icon_state = "biogen-stand" else icon_state = "biogen-work" return /obj/machinery/biogenerator/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/reagent_containers/glass)) if(beaker) user << "\red The biogenerator is already loaded." else user.before_take_item(O) O.loc = src beaker = O updateUsrDialog() else if(processing) user << "\red The biogenerator is currently processing." else if(istype(O, /obj/item/weapon/storage/bag/plants)) var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) i++ if(i >= 10) user << "\red The biogenerator is already full! Activate it." else for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents) G.loc = src i++ if(i >= 10) user << "\blue You fill the biogenerator to its capacity." break if(i<10) user << "\blue You empty the plant bag into the biogenerator." else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) user << "\red You cannot put this in [src.name]" else var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) i++ if(i >= 10) user << "\red The biogenerator is full! Activate it." else user.before_take_item(O) O.loc = src user << "\blue You put [O.name] in [src.name]" update_icon() return /obj/machinery/biogenerator/interact(mob/user as mob) if(stat & BROKEN) return user.set_machine(src) var/dat = "BiogeneratorBiogenerator:
" if (processing) dat += "Biogenerator is processing! Please wait..." else dat += "Biomass: [points] points.
" switch(menustat) if("menu") if (beaker) dat += "Activate Biogenerator!
" dat += "Detach Container

" dat += "Food
" dat += "10 milk (20)
" dat += "Slab of meat (50)
" dat += "Nutrient
" dat += "E-Z-Nutrient (10) | x5
" dat += "Left 4 Zed (20) | x5
" dat += "Robust Harvest (25) | x5
" dat += "Leather
" dat += "Wallet (100)
" dat += "Botanical gloves (250)
" dat += "Utility belt (300)
" dat += "Leather Satchel (400)
" dat += "Cash Bag (400)
" //dat += "Other
" //dat += "Monkey (500)
" else dat += "
No beaker inside. Please insert a beaker.
" if("nopoints") dat += "You do not have biomass to create products.
Please, put growns into reactor and activate it.
" dat += "Return to menu" if("complete") dat += "Operation complete.
" dat += "Return to menu" if("void") dat += "Error: No growns inside.
Please, put growns into reactor.
" dat += "Return to menu" user << browse(dat, "window=biogenerator") onclose(user, "biogenerator") return /obj/machinery/biogenerator/attack_hand(mob/user as mob) interact(user) /obj/machinery/biogenerator/proc/activate() if (usr.stat != 0) return if (src.stat != 0) //NOPOWER etc return if(src.processing) usr << "\red The biogenerator is in the process of working." return var/S = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents) S += 5 if(I.reagents.get_reagent_amount("nutriment") < 0.1) points += 1 else points += I.reagents.get_reagent_amount("nutriment")*10 del(I) if(S) processing = 1 update_icon() updateUsrDialog() playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) use_power(S*30) sleep(S+15) processing = 0 update_icon() else menustat = "void" return /obj/machinery/biogenerator/proc/create_product(var/item,var/cost) if(cost > points) menustat = "nopoints" return 0 processing = 1 update_icon() updateUsrDialog() points -= cost sleep(30) switch(item) if("milk") beaker.reagents.add_reagent("milk",10) if("meat") new/obj/item/weapon/reagent_containers/food/snacks/meat(src.loc) if("ez") new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) if("l4z") new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) if("rh") new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) if("ez5") //It's not an elegant method, but it's safe and easy. -Cheridan new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) if("l4z5") new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) if("rh5") new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) if("wallet") new/obj/item/weapon/storage/wallet(src.loc) if("gloves") new/obj/item/clothing/gloves/botanic_leather(src.loc) if("tbelt") new/obj/item/weapon/storage/belt/utility(src.loc) if("satchel") new/obj/item/weapon/storage/backpack/satchel(src.loc) if("cashbag") new/obj/item/weapon/storage/bag/cash(src.loc) if("monkey") new/mob/living/carbon/monkey(src.loc) processing = 0 menustat = "complete" update_icon() return 1 /obj/machinery/biogenerator/Topic(href, href_list) if(stat & BROKEN) return if(usr.stat || usr.restrained()) return if(!in_range(src, usr)) return usr.set_machine(src) switch(href_list["action"]) if("activate") activate() if("detach") if(beaker) beaker.loc = src.loc beaker = null update_icon() if("create") create_product(href_list["item"],text2num(href_list["cost"])) if("menu") menustat = "menu" updateUsrDialog()