Merge pull request #6667 from Heroman3003/voidsuti-surgery

Prevents surgery from being done while wearing a voidsuit
This commit is contained in:
Atermonera
2020-02-10 13:01:34 -08:00
committed by VirgoBot
parent 12a412be47
commit 571fe9f734
13 changed files with 125 additions and 44 deletions

View File

@@ -24,6 +24,8 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -63,6 +65,8 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.organ_tag != BP_HEAD && !(affected.robotic >= ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
/datum/surgery_step/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -107,6 +111,8 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.organ_tag == BP_HEAD && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
/datum/surgery_step/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -149,6 +155,8 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.open >= 2 && !(affected.robotic >= ORGAN_ROBOT) && affected.stage == 2
/datum/surgery_step/finish_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -188,6 +196,8 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
/datum/surgery_step/clamp_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)

View File

@@ -12,6 +12,8 @@
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= 2
///////////////////////////////////////////////////////////////

View File

@@ -26,6 +26,8 @@
return 0
if (affected.robotic >= ORGAN_ROBOT)
return 0
if(coverage_check(user, target, affected, tool))
return 0
return 1

View File

@@ -14,6 +14,8 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (!affected || (affected.robotic >= ORGAN_ROBOT))
return 0
if(coverage_check(user, target, affected, tool))
return 0
return target_zone == O_MOUTH
///////////////////////////////////////////////////////////////

View File

@@ -20,6 +20,8 @@
return 0
if (affected.robotic >= ORGAN_ROBOT)
return 0
if(coverage_check(user, target, affected, tool))
return 0
return 1
///////////////////////////////////////////////////////////////

View File

@@ -6,37 +6,40 @@
/datum/surgery_step/cavity
priority = 1
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING)
proc/get_max_wclass(var/obj/item/organ/external/affected)
switch (affected.organ_tag)
if (BP_HEAD)
return ITEMSIZE_TINY
if (BP_TORSO)
return ITEMSIZE_NORMAL
if (BP_GROIN)
return ITEMSIZE_SMALL
/datum/surgery_step/cavity/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING)
proc/get_cavity(var/obj/item/organ/external/affected)
switch (affected.organ_tag)
if (BP_HEAD)
return "cranial"
if (BP_TORSO)
return "thoracic"
if (BP_GROIN)
return "abdominal"
return ""
/datum/surgery_step/cavity/proc/get_max_wclass(var/obj/item/organ/external/affected)
switch (affected.organ_tag)
if (BP_HEAD)
return ITEMSIZE_TINY
if (BP_TORSO)
return ITEMSIZE_NORMAL
if (BP_GROIN)
return ITEMSIZE_SMALL
return 0
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
user.visible_message("<font color='red'>[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</font>", \
"<font color='red'>Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</font>")
affected.createwound(CUT, 20)
/datum/surgery_step/cavity/proc/get_cavity(var/obj/item/organ/external/affected)
switch (affected.organ_tag)
if (BP_HEAD)
return "cranial"
if (BP_TORSO)
return "thoracic"
if (BP_GROIN)
return "abdominal"
return ""
/datum/surgery_step/cavity/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
user.visible_message("<font color='red'>[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</font>", \
"<font color='red'>Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</font>")
affected.createwound(CUT, 20)
///////////////////////////////////////////////////////////////
// Space Making Surgery
@@ -52,23 +55,23 @@
min_duration = 60
max_duration = 80
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(..())
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return affected && !affected.cavity
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
/datum/surgery_step/cavity/make_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(..())
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \
"You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." )
target.custom_pain("The pain in your chest is living hell!",1)
affected.cavity = 1
..()
return affected && !affected.cavity
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
user.visible_message("<font color='blue'>[user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].</font>", \
"<font color='blue'>You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].</font>" )
/datum/surgery_step/cavity/make_space/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \
"You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." )
target.custom_pain("The pain in your chest is living hell!",1)
affected.cavity = 1
..()
/datum/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
user.visible_message("<font color='blue'>[user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].</font>", \
"<font color='blue'>You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].</font>" )
///////////////////////////////////////////////////////////////
// Cavity Closing Surgery

View File

@@ -14,6 +14,8 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (!affected || (affected.robotic >= ORGAN_ROBOT) || !(affected.open >= 3))
return 0
if(coverage_check(user, target, affected, tool))
return 0
return target_zone == BP_HEAD
/////////////////////////////

View File

@@ -10,6 +10,8 @@
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.open == (affected.encased ? 3 : 2)

View File

@@ -25,6 +25,8 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!affected) return
if(coverage_check(user, target, affected, tool))
return 0
var/internal_bleeding = 0
for(var/datum/wound/W in affected.wounds) if(W.internal)
internal_bleeding = 1
@@ -80,6 +82,8 @@
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.open >= 2 && (affected.status & ORGAN_DEAD)
@@ -136,6 +140,8 @@
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.open == 3 && (affected.status & ORGAN_DEAD)
/datum/surgery_step/treat_necrosis/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)

View File

@@ -20,6 +20,8 @@
return 0
if (!(affected.robotic == ORGAN_ROBOT || affected.robotic == ORGAN_LIFELIKE)) //VOREStation Edit - No good on ORGAN_NANOFORM
return 0
if(coverage_check(user, target, affected, tool))
return 0
return 1
///////////////////////////////////////////////////////////////

View File

@@ -67,6 +67,18 @@
return 1
// Let's check if stuff blocks us from doing surgery on them
// TODO: make it based on area coverage rather than just forbid spacesuits?
// Returns true if target organ is covered
/datum/surgery_step/proc/coverage_check(mob/living/user, mob/living/carbon/human/target, obj/item/organ/external/affected, obj/item/tool)
if(affected.organ_tag == BP_HEAD)
if(target.head && istype(target.head,/obj/item/clothing/head/helmet/space))
return TRUE
else
if(target.wear_suit && istype(target.wear_suit,/obj/item/clothing/suit/space))
return TRUE
return FALSE
// checks whether this step can be applied with the given user and target
/datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)