diff --git a/code/modules/surgery/advanced/dna_recovery.dm b/code/modules/surgery/advanced/dna_recovery.dm index 522cd323e9d9..536f540f9db9 100644 --- a/code/modules/surgery/advanced/dna_recovery.dm +++ b/code/modules/surgery/advanced/dna_recovery.dm @@ -17,8 +17,7 @@ if(!HAS_TRAIT_FROM(target, TRAIT_BADDNA, CHANGELING_DRAIN)) return FALSE - else - return TRUE + return TRUE /datum/surgery_step/dna_recovery name = "recover DNA" @@ -37,4 +36,4 @@ "[user] successfully repairs some of [target]'s DNA", "[user] completes the surgery on [target]'s brain.") REMOVE_TRAIT(target, TRAIT_BADDNA, CHANGELING_DRAIN) - return TRUE \ No newline at end of file + return TRUE diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 520d25c8cae3..b3ff3a818e57 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -87,7 +87,8 @@ prob_chance = implements[implement_type] prob_chance *= surgery.get_propability_multiplier() - if((prob(prob_chance) || iscyborg(user)) && chem_check(target) && !try_to_fail) + if((prob(prob_chance) || iscyborg(user)) && chem_check(target, user, + tool) && !try_to_fail) if(success(user, target, target_zone, tool, surgery)) advance = 1 else @@ -122,20 +123,27 @@ /datum/surgery_step/proc/tool_check(mob/user, obj/item/tool) return 1 -/datum/surgery_step/proc/chem_check(mob/living/carbon/target) +/datum/surgery_step/proc/chem_check(mob/living/carbon/target, user, obj/item/tool) if(!LAZYLEN(chems_needed)) return TRUE - + var/obj/item/reagent_containers/syringe/S + if(target.can_inject(user, FALSE)) + S = tool if(require_all_chems) . = TRUE for(var/R in chems_needed) if(!target.reagents.has_reagent(R)) - return FALSE + if(!(S && S.reagents.has_reagent(R))) + return FALSE + S.reagents.remove_reagent(R, min(S.amount_per_transfer_from_this, S.reagents.get_reagent_amount(R))) else . = FALSE for(var/R in chems_needed) if(target.reagents.has_reagent(R)) return TRUE + if(S && S.reagents.has_reagent(R)) + S.reagents.remove_reagent(R, min(S.amount_per_transfer_from_this, S.reagents.get_reagent_amount(R))) + return TRUE /datum/surgery_step/proc/get_chem_list() if(!LAZYLEN(chems_needed))