diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm index d67cea367e9..43a18c7081f 100644 --- a/code/game/machinery/computer/operating_computer.dm +++ b/code/game/machinery/computer/operating_computer.dm @@ -143,11 +143,13 @@ var/chems_needed = surgery_step.get_chem_list() var/alternative_step var/alt_chems_needed = "" + var/alt_chems_present = FALSE if(surgery_step.repeatable) var/datum/surgery_step/next_step = procedure.get_surgery_next_step() if(next_step) alternative_step = capitalize(next_step.name) alt_chems_needed = next_step.get_chem_list() + alt_chems_present = next_step.chem_check(patient) else alternative_step = "Finish operation" data["procedures"] += list(list( @@ -155,7 +157,9 @@ "next_step" = capitalize(surgery_step.name), "chems_needed" = chems_needed, "alternative_step" = alternative_step, - "alt_chems_needed" = alt_chems_needed + "alt_chems_needed" = alt_chems_needed, + "chems_present" = surgery_step.chem_check(patient), + "alt_chems_present" = alt_chems_present )) return data diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 350bd60fbd1..336e76b4d70 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -96,6 +96,12 @@ var/fail_prob = 0//100 - fail_prob = success_prob var/advance = FALSE + if(!chem_check(target)) + user.balloon_alert(user, "missing [LOWER_TEXT(get_chem_list())]!") + to_chat(user, span_warning("[target] is missing the [LOWER_TEXT(get_chem_list())] required to perform this surgery step!")) + surgery.step_in_progress = FALSE + return FALSE + if(preop(user, target, target_zone, tool, surgery) == SURGERY_STEP_FAIL) update_surgery_mood(target, SURGERY_STATE_FAILURE) surgery.step_in_progress = FALSE @@ -134,9 +140,7 @@ if(do_after(user, modded_time, target = target, interaction_key = user.has_status_effect(/datum/status_effect/hippocratic_oath) ? target : DOAFTER_SOURCE_SURGERY)) //If we have the hippocratic oath, we can perform one surgery on each target, otherwise we can only do one surgery in total. - var/chem_check_result = chem_check(target) - if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && chem_check_result && !try_to_fail) - + if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && !try_to_fail) if(success(user, target, target_zone, tool, surgery)) update_surgery_mood(target, SURGERY_STATE_SUCCESS) play_success_sound(user, target, target_zone, tool, surgery) @@ -146,8 +150,6 @@ play_failure_sound(user, target, target_zone, tool, surgery) update_surgery_mood(target, SURGERY_STATE_FAILURE) advance = TRUE - if(chem_check_result) - return .(user, target, target_zone, tool, surgery, try_to_fail) //automatically re-attempt if failed for reason other than lack of required chemical if(advance && !repeatable) surgery.status++ if(surgery.status > surgery.steps.len) diff --git a/tgui/packages/tgui/interfaces/OperatingComputer.jsx b/tgui/packages/tgui/interfaces/OperatingComputer.jsx index 990fddcadd9..8a87840e89a 100644 --- a/tgui/packages/tgui/interfaces/OperatingComputer.jsx +++ b/tgui/packages/tgui/interfaces/OperatingComputer.jsx @@ -103,28 +103,24 @@ const PatientStateView = (props) => { {procedure.next_step} - {procedure.chems_needed && ( - <> -
-
- Required Chemicals: -
- {procedure.chems_needed} - - )}
+ {procedure.chems_needed && ( + + + {procedure.chems_needed} + + + )} {procedure.alternative_step && ( {procedure.alternative_step} - {procedure.alt_chems_needed && ( - <> -
-
- Required Chemicals: -
- {procedure.alt_chems_needed} - - )} +
+ )} + {procedure.alt_chems_needed && ( + + + {procedure.alt_chems_needed} + )}