diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index a3746d6bdb5..a2d2f4dcda0 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -815,7 +815,7 @@ added_purity = 0 if((reagent.inverse_chem_val > added_purity) && (reagent.inverse_chem))//Turns all of a added reagent into the inverse chem - add_reagent(reagent.inverse_chem, added_volume, FALSE, added_purity = 1-reagent.creation_purity) + add_reagent(reagent.inverse_chem, added_volume, FALSE, added_purity = reagent.get_inverse_purity(reagent.creation_purity)) var/datum/reagent/inverse_reagent = has_reagent(reagent.inverse_chem) if(inverse_reagent.chemical_flags & REAGENT_SNEAKYNAME) inverse_reagent.name = reagent.name//Negative effects are hidden diff --git a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm index 229dd16e7f0..9cffb75420c 100644 --- a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm +++ b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm @@ -219,7 +219,7 @@ This will not clean any inverted reagents. Inverted reagents will still be corre var/datum/reagent/inverse_reagent = GLOB.chemical_reagents_list[reagent.inverse_chem] if(inverse_reagent.mass < lower_mass_range || inverse_reagent.mass > upper_mass_range) in_range = FALSE - beakerContents.Add(list(list("name" = inverse_reagent.name, "volume" = round(reagent.volume, 0.01), "mass" = inverse_reagent.mass, "purity" = round(1-reagent.purity, 0.01)*100, "selected" = in_range, "color" = "#b60046", "type" = "Inverted"))) + beakerContents.Add(list(list("name" = inverse_reagent.name, "volume" = round(reagent.volume, 0.01), "mass" = inverse_reagent.mass, "purity" = round(reagent.get_inverse_purity(), 0.01)*100, "selected" = in_range, "color" = "#b60046", "type" = "Inverted"))) data["peakHeight"] = max(data["peakHeight"], reagent.volume) continue if(reagent.mass < lower_mass_range || reagent.mass > upper_mass_range) @@ -332,7 +332,7 @@ This will not clean any inverted reagents. Inverted reagents will still be corre if(inverse_reagent.mass < lower_mass_range || inverse_reagent.mass > upper_mass_range) continue log += list(inverse_reagent.type = "Cannot purify inverted") //Might as well make it do something - just updates the reagent's name - beaker2.reagents.add_reagent(reagent.inverse_chem, volume, reagtemp = beaker1.reagents.chem_temp, added_purity = 1-reagent.purity) + beaker2.reagents.add_reagent(reagent.inverse_chem, volume, reagtemp = beaker1.reagents.chem_temp, added_purity = reagent.get_inverse_purity()) beaker1.reagents.remove_reagent(reagent.type, volume) continue @@ -398,7 +398,6 @@ This will not clean any inverted reagents. Inverted reagents will still be corre continue if(reagent.mass < lower_mass_range || reagent.mass > upper_mass_range) continue - var/inverse_purity = 1-reagent.purity - time += (((reagent.mass * reagent.volume) + (reagent.mass * inverse_purity * 0.1)) * 0.0035) + 10 ///Roughly 10 - 30s? + time += (((reagent.mass * reagent.volume) + (reagent.mass * reagent.get_inverse_purity() * 0.1)) * 0.0035) + 10 ///Roughly 10 - 30s? delay_time = (time * cms_coefficient) return delay_time diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 7d2b4e72d51..af7c68f7145 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -244,6 +244,19 @@ Primarily used in reagents/reaction_agents creation_purity = src.creation_purity return creation_purity / normalise_num_to +/** + * Gets the inverse purity of this reagent. Mostly used when converting from a normal reagent to it's inverse one. + * + * Arguments + * * purity - Overrides the purity used for determining the inverse purity. + */ +/datum/reagent/proc/get_inverse_purity(purity) + if(!inverse_chem || !inverse_chem_val) + return + if(!purity) + purity = src.purity + return min(1-inverse_chem_val + purity + 0.01, 1) //Gives inverse reactions a 1% purity threshold for being 100% pure to appease players with OCD. + /** * Input a reagent_list, outputs pretty readable text! * Default output will be formatted as diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 23864f9fb8c..970a5208431 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -161,7 +161,7 @@ if((reaction_flags & REACTION_CLEAR_INVERSE) && reagent.inverse_chem) if(reagent.inverse_chem_val > reagent.purity) holder.remove_reagent(reagent.type, cached_volume, FALSE) - holder.add_reagent(reagent.inverse_chem, cached_volume, FALSE, added_purity = 1-cached_purity) + holder.add_reagent(reagent.inverse_chem, cached_volume, FALSE, added_purity = reagent.get_inverse_purity(cached_purity)) return /**