diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 81db8718d2f..da9ac99b56e 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -52,7 +52,7 @@ return FALSE // True surgeons (like abductor scientists) need no instructions - if(HAS_TRAIT(user, TRAIT_SURGEON) || HAS_TRAIT(user.mind, TRAIT_SURGEON)) + if(HAS_TRAIT(user, TRAIT_SURGEON) || (!isnull(user.mind) && HAS_TRAIT(user.mind, TRAIT_SURGEON))) if(replaced_by) // only show top-level surgeries return FALSE else @@ -78,9 +78,9 @@ //Get the relevant operating computer var/obj/machinery/computer/operating/opcomputer = locate_operating_computer(patient_turf) if (isnull(opcomputer)) - return FALSE + return . if(replaced_by in opcomputer.advanced_surgeries) - return FALSE + return . if(type in opcomputer.advanced_surgeries) return TRUE diff --git a/code/modules/unit_tests/surgeries.dm b/code/modules/unit_tests/surgeries.dm index b9ebb586f3e..75614f4e8e0 100644 --- a/code/modules/unit_tests/surgeries.dm +++ b/code/modules/unit_tests/surgeries.dm @@ -77,6 +77,20 @@ INVOKE_ASYNC(surgery_step, /datum/surgery_step/proc/initiate, user, patient_one, BODY_ZONE_CHEST, scalpel, surgery_for_one) TEST_ASSERT(surgery_for_one.step_in_progress, "Surgery on patient one was not initiated, despite having rod of asclepius") +/// Ensures that the tend wounds surgery can be started +/datum/unit_test/start_tend_wounds + +/datum/unit_test/start_tend_wounds/Run() + var/mob/living/carbon/human/patient = allocate(/mob/living/carbon/human) + var/mob/living/carbon/human/user = allocate(/mob/living/carbon/human) + + var/datum/surgery/surgery = new /datum/surgery/healing/brute/basic + + if (!surgery.can_start(user, patient)) + Fail("Can't start basic tend wounds!") + + qdel(surgery) + /datum/unit_test/tend_wounds/Run() var/mob/living/carbon/human/patient = allocate(/mob/living/carbon/human) patient.take_overall_damage(100, 100)