/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" var/build_eff = 1 var/eat_eff = 1 /obj/machinery/biogenerator/New() ..() var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src beaker = new /obj/item/weapon/reagent_containers/glass/bottle(src) component_parts = list() component_parts += new /obj/item/weapon/circuitboard/biogenerator(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) RefreshParts() /obj/machinery/biogenerator/on_reagent_change() //When the reagents change, change the icon as well. update_icon() /obj/machinery/biogenerator/update_icon() if(!beaker) icon_state = "biogen-empty" else if(!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(default_deconstruction_screwdriver(user, O)) return if(default_deconstruction_crowbar(user, O)) return if(default_part_replacement(user, O)) return if(istype(O, /obj/item/weapon/reagent_containers/glass)) if(beaker) user << "]The [src] is already loaded." else user.before_take_item(O) O.loc = src beaker = O updateUsrDialog() else if(processing) user << "\The [src] 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 << "\The [src] 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 << "You fill \the [src] to its capacity." break if(i < 10) user << "You empty \the [O] into \the [src]." else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) user << "You cannot put this in \the [src]." else var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) i++ if(i >= 10) user << "\The [src] is full! Activate it." else user.before_take_item(O) O.loc = src user << "You put \the [O] in \the [src]" 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 ([round(20/build_eff)])
" dat += "Slab of meat ([round(50/build_eff)])
" dat += "Nutrient
" dat += "E-Z-Nutrient ([round(10/build_eff)]) | x5
" dat += "Left 4 Zed ([round(20/build_eff)]) | x5
" dat += "Robust Harvest ([round(25/build_eff)]) | x5
" dat += "Leather
" dat += "Wallet ([round(100/build_eff)])
" dat += "Botanical gloves ([round(250/build_eff)])
" dat += "Utility belt ([round(300/build_eff)])
" dat += "Leather Satchel ([round(400/build_eff)])
" dat += "Cash Bag ([round(400/build_eff)])
" //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) return if (stat) //NOPOWER etc return if(processing) usr << "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 * eat_eff 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) / eat_eff) processing = 0 update_icon() else menustat = "void" return /obj/machinery/biogenerator/proc/create_product(var/item, var/cost) cost = round(cost/build_eff) 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(loc) if("ez") new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) if("l4z") new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) if("rh") new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(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(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) if("l4z5") new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) if("rh5") new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) if("wallet") new/obj/item/weapon/storage/wallet(loc) if("gloves") new/obj/item/clothing/gloves/botanic_leather(loc) if("tbelt") new/obj/item/weapon/storage/belt/utility(loc) if("satchel") new/obj/item/weapon/storage/backpack/satchel(loc) if("cashbag") new/obj/item/weapon/storage/bag/cash(loc) if("monkey") new/mob/living/carbon/monkey(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() /obj/machinery/biogenerator/RefreshParts() ..() var/man_rating = 0 var/bin_rating = 0 for(var/obj/item/weapon/stock_parts/P in component_parts) if(istype(P, /obj/item/weapon/stock_parts/matter_bin)) bin_rating += P.rating if(istype(P, /obj/item/weapon/stock_parts/manipulator)) man_rating += P.rating build_eff = man_rating eat_eff = bin_rating