diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index b8ae835d412..1e3bcb92db5 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -10,7 +10,8 @@ pass_flags = PASSTABLE var/operating = 0 var/obj/item/reagent_containers/beaker = new /obj/item/reagent_containers/glass/beaker/large - var/limit = 10 + var/limit = null + var/efficiency = null //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent var/list/blend_items = list ( @@ -101,6 +102,16 @@ component_parts += new /obj/item/stock_parts/matter_bin(null) RefreshParts() +/obj/machinery/reagentgrinder/RefreshParts() + var/H + var/T + for(var/obj/item/stock_parts/matter_bin/M in component_parts) + H += M.rating + for(var/obj/item/stock_parts/manipulator/M in component_parts) + T += M.rating + limit = 10*H + efficiency = 0.8+T*0.1 + /obj/machinery/reagentgrinder/Destroy() QDEL_NULL(beaker) return ..() @@ -120,6 +131,9 @@ if(default_unfasten_wrench(user, I)) return + if(exchange_parts(user, I)) + return + if(anchored && !beaker) if(default_deconstruction_screwdriver(user, "juicer_open", "juicer0", I)) return @@ -349,7 +363,7 @@ var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume var/amount = get_juice_amount(O) - beaker.reagents.add_reagent(r_id, min(amount, space)) + beaker.reagents.add_reagent(r_id, min(amount*efficiency, space)) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break @@ -389,17 +403,17 @@ if(amount <= 0) if(amount == 0) if (O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment")*efficiency, space)) O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) if (O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter"), space)) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter")*efficiency, space)) O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) else if (O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space)) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)*efficiency), space)) O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) if (O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)), space)) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)*efficiency), space)) O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) @@ -421,7 +435,7 @@ for (var/r_id in allowed) var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space)) + beaker.reagents.add_reagent(r_id,min(amount*efficiency, space)) if (space < amount) break if (i == round(O.amount, 1)) @@ -437,9 +451,9 @@ var/amount = allowed[r_id] if (amount == 0) if (O.reagents != null && O.reagents.has_reagent(r_id)) - beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space)) + beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id)*efficiency, space)) else - beaker.reagents.add_reagent(r_id,min(amount, space)) + beaker.reagents.add_reagent(r_id,min(amount*efficiency, space)) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break @@ -454,7 +468,7 @@ var/amount = O.reagents.total_volume O.reagents.trans_to(beaker, min(amount, space)) if (O.Uses > 0) - beaker.reagents.add_reagent("slimejelly",min(20, space)) + beaker.reagents.add_reagent("slimejelly",min(20*efficiency, space)) remove_object(O) //Everything else - Transfers reagents from it into beaker