Self-Surgery (#7671)

* Allows organics to self-surgery after standing still for 5 seconds. It follows the same rules as normal surgery.

* Confirm-by-delay for self-surgery steps.

* Verb to toggle self-surgery.

* Add log.
This commit is contained in:
Mechoid
2020-11-18 13:55:33 -08:00
committed by GitHub
parent 499c248712
commit b411c75a19
6 changed files with 38 additions and 8 deletions
+11 -3
View File
@@ -121,8 +121,8 @@
/obj/item/proc/can_do_surgery(mob/living/carbon/M, mob/living/user)
if(M == user)
return 0
// if(M == user)
// return 0
if(!ishuman(M))
return 1
@@ -139,11 +139,19 @@
if(zone in M.op_stage.in_progress) //Can't operate on someone repeatedly.
to_chat(user, "<span class='warning'>You can't operate on this area while surgery is already in progress.</span>")
return 1
for(var/datum/surgery_step/S in surgery_steps)
//check if tool is right or close enough and if this step is possible
if(S.tool_quality(src))
var/step_is_valid = S.can_use(user, M, zone, src)
if(step_is_valid && S.is_valid_target(M))
if(M == user) // Once we determine if we can actually do a step at all, give a slight delay to self-surgery to confirm attempts.
to_chat(user, "<span class='critical'>You focus on attempting to perform surgery upon yourself.</span>")
if(!do_after(user, 3 SECONDS, M))
return 0
if(step_is_valid == SURGERY_FAILURE) // This is a failure that already has a message for failing.
return 1
M.op_stage.in_progress += zone
@@ -155,7 +163,7 @@
success = FALSE
// Bad or no surface may mean failure as well.
var/obj/surface = M.get_surgery_surface()
var/obj/surface = M.get_surgery_surface(user)
if(!surface || !prob(surface.surgery_odds))
success = FALSE