diff --git a/code/WorkInProgress/Chemistry-Holder.dm b/code/WorkInProgress/Chemistry-Holder.dm index d19db4bd0a9..5c57a0b98f7 100644 --- a/code/WorkInProgress/Chemistry-Holder.dm +++ b/code/WorkInProgress/Chemistry-Holder.dm @@ -156,33 +156,42 @@ datum handle_reactions() if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree. - for(var/A in typesof(/datum/chemical_reaction) - /datum/chemical_reaction) - var/datum/chemical_reaction/C = new A() - var/total_required_reagents = C.required_reagents.len - var/total_matching_reagents = 0 - var/list/multipliers = new/list() + var/reaction_occured = 0 + do + reaction_occured = 0 + for(var/A in typesof(/datum/chemical_reaction) - /datum/chemical_reaction) + var/datum/chemical_reaction/C = new A() + var/total_required_reagents = C.required_reagents.len + var/total_matching_reagents = 0 + var/total_required_catalysts = C.required_catalysts.len + var/total_matching_catalysts= 0 + var/list/multipliers = new/list() - for(var/B in C.required_reagents) - if(has_reagent(B, C.required_reagents[B])) - total_matching_reagents++ - multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) - - if(total_matching_reagents == total_required_reagents) - var/multiplier = min(multipliers) for(var/B in C.required_reagents) - del_reagent(B) + if(has_reagent(B, C.required_reagents[B])) + total_matching_reagents++ + multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) + for(var/B in C.required_catalysts) + if(has_reagent(B, C.required_catalysts[B])) + total_matching_catalysts++ - var/created_volume = C.result_amount*multiplier - if(C.result) - multiplier = max(multiplier, 1) //this shouldnt happen ... - add_reagent(C.result, C.result_amount*multiplier) + if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts) + var/multiplier = min(multipliers) + for(var/B in C.required_reagents) + remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) - for(var/mob/M in viewers(4, get_turf(my_atom)) ) - M << "\blue \icon[my_atom] The solution begins to bubble." - playsound(get_turf(my_atom), 'bubbles.ogg', 80, 1) + var/created_volume = C.result_amount*multiplier + if(C.result) + multiplier = max(multiplier, 1) //this shouldnt happen ... + add_reagent(C.result, C.result_amount*multiplier) - C.on_reaction(src, created_volume) + for(var/mob/M in viewers(4, get_turf(my_atom)) ) + M << "\blue \icon[my_atom] The solution begins to bubble." + playsound(get_turf(my_atom), 'bubbles.ogg', 80, 1) + C.on_reaction(src, created_volume) + reaction_occured = 1 + while(reaction_occured) update_total() return 0 diff --git a/code/WorkInProgress/Chemistry-Readme.dm b/code/WorkInProgress/Chemistry-Readme.dm index 4d74421665a..165f025c02f 100644 --- a/code/WorkInProgress/Chemistry-Readme.dm +++ b/code/WorkInProgress/Chemistry-Readme.dm @@ -189,6 +189,12 @@ About Recipes: of that reagent. The handle_reaction proc can detect mutiples of the same recipes so for most cases you want to set the required amount to 1. + required_catalysts (Added May 2011) + This is a list of the ids of the required catalysts. + Functionally similar to required_reagents, it is a list of reagents that are required + for the reaction. However, unlike required_reagents, catalysts are NOT consumed. + They mearly have to be present in the container. + result_amount This is the amount of the resulting reagent this recipe will produce. I recommend you set this to the total volume of all required reagent. diff --git a/code/WorkInProgress/Chemistry-Recipes.dm b/code/WorkInProgress/Chemistry-Recipes.dm index 6660a1e809e..ce3a2592949 100644 --- a/code/WorkInProgress/Chemistry-Recipes.dm +++ b/code/WorkInProgress/Chemistry-Recipes.dm @@ -5,6 +5,7 @@ datum var/id = null var/result = null var/list/required_reagents = new/list() + var/list/required_catalysts = new/list() var/result_amount = 0 proc @@ -46,7 +47,7 @@ datum name = "Sterilizine" id = "sterilizine" result = "sterilizine" - required_reagents = list("ethanol" = 1, "anti-toxin" = 1, "chlorine" = 1) + required_reagents = list("ethanol" = 1, "anti_toxin" = 1, "chlorine" = 1) result_amount = 3 inaprovaline @@ -497,7 +498,8 @@ datum name = "Tofu" id = "tofu" result = null - required_reagents = list("soymilk" = 10, "enzyme" = 2) + required_reagents = list("soymilk" = 10) + required_catalysts = list("enzyme" = 5) result_amount = 1 on_reaction(var/datum/reagents/holder, var/created_volume) var/location = get_turf(holder.my_atom) @@ -516,27 +518,14 @@ datum name = "Cheesewheel" id = "cheesewheel" result = null - required_reagents = list("milk" = 40, "enzyme" = 2) + required_reagents = list("milk" = 40) + required_catalysts = list("enzyme" = 5) result_amount = 1 on_reaction(var/datum/reagents/holder, var/created_volume) var/location = get_turf(holder.my_atom) new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) return - icetea - name = "Iced Tea" - id = "icetea" - result = "icetea" - required_reagents = list("ice" = 1, "tea" = 3) - result_amount = 4 - - icecoffee - name = "Iced Coffee" - id = "icecoffee" - result = "icecoffee" - required_reagents = list("ice" = 1, "coffee" = 3) - result_amount = 4 - hot_ramen name = "Hot Ramen" id = "hot_ramen" @@ -554,34 +543,51 @@ datum ////////////////////////////////////////// COCKTAILS ////////////////////////////////////// + icetea + name = "Iced Tea" + id = "icetea" + result = "icetea" + required_reagents = list("ice" = 1, "tea" = 3) + result_amount = 4 + + icecoffee + name = "Iced Coffee" + id = "icecoffee" + result = "icecoffee" + required_reagents = list("ice" = 1, "coffee" = 3) + result_amount = 4 + moonshine name = "Moonshine" id = "moonshine" result = "moonshine" - required_reagents = list("nutriment" = 10, "enzyme" = 2) + required_reagents = list("nutriment" = 10) + required_catalysts = list("enzyme" = 5) result_amount = 5 wine name = "Wine" id = "wine" result = "wine" - required_reagents = list("berryjuice" = 10, "enzyme" = 2) + required_reagents = list("berryjuice" = 10) + required_catalysts = list("enzyme" = 5) result_amount = 5 vodka name = "Vodka" id = "vodka" result = "vodka" - required_reagents = list("potato" = 10, "enzyme" = 2) + required_reagents = list("potato" = 10) + required_catalysts = list("enzyme" = 5) result_amount = 5 kahlua name = "Kahlua" id = "kahlua" result = "kahlua" - required_reagents = list("coffee" = 5, "sugar" = 5, "enzyme" = 2) - - + required_reagents = list("coffee" = 5, "sugar" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 5 gin_tonic name = "Gin and Tonic"