mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge pull request #6667 from Heroman3003/voidsuti-surgery
Prevents surgery from being done while wearing a voidsuit
This commit is contained in:
@@ -44,8 +44,8 @@ avoid code duplication. This includes items that may sometimes act as a standard
|
|||||||
/mob/living/attackby(obj/item/I, mob/user, var/attack_modifier)
|
/mob/living/attackby(obj/item/I, mob/user, var/attack_modifier)
|
||||||
if(!ismob(user))
|
if(!ismob(user))
|
||||||
return 0
|
return 0
|
||||||
if(can_operate(src) && I.do_surgery(src,user))
|
if(can_operate(src) && I.can_do_surgery(src,user))
|
||||||
if(I.can_do_surgery(src,user))
|
if(I.do_surgery(src,user))
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
if (!hasorgans(target))
|
if (!hasorgans(target))
|
||||||
return 0
|
return 0
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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
|
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)
|
/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))
|
if (!hasorgans(target))
|
||||||
return 0
|
return 0
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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
|
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)
|
/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))
|
if (!hasorgans(target))
|
||||||
return 0
|
return 0
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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
|
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)
|
/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))
|
if (!hasorgans(target))
|
||||||
return 0
|
return 0
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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
|
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)
|
/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))
|
if (!hasorgans(target))
|
||||||
return 0
|
return 0
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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
|
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)
|
/datum/surgery_step/clamp_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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
|
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= 2
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
return 0
|
return 0
|
||||||
if (affected.robotic >= ORGAN_ROBOT)
|
if (affected.robotic >= ORGAN_ROBOT)
|
||||||
return 0
|
return 0
|
||||||
|
if(coverage_check(user, target, affected, tool))
|
||||||
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||||
if (!affected || (affected.robotic >= ORGAN_ROBOT))
|
if (!affected || (affected.robotic >= ORGAN_ROBOT))
|
||||||
return 0
|
return 0
|
||||||
|
if(coverage_check(user, target, affected, tool))
|
||||||
|
return 0
|
||||||
return target_zone == O_MOUTH
|
return target_zone == O_MOUTH
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
return 0
|
return 0
|
||||||
if (affected.robotic >= ORGAN_ROBOT)
|
if (affected.robotic >= ORGAN_ROBOT)
|
||||||
return 0
|
return 0
|
||||||
|
if(coverage_check(user, target, affected, tool))
|
||||||
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -6,37 +6,40 @@
|
|||||||
|
|
||||||
/datum/surgery_step/cavity
|
/datum/surgery_step/cavity
|
||||||
priority = 1
|
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)
|
/datum/surgery_step/cavity/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
switch (affected.organ_tag)
|
if(!hasorgans(target))
|
||||||
if (BP_HEAD)
|
|
||||||
return ITEMSIZE_TINY
|
|
||||||
if (BP_TORSO)
|
|
||||||
return ITEMSIZE_NORMAL
|
|
||||||
if (BP_GROIN)
|
|
||||||
return ITEMSIZE_SMALL
|
|
||||||
return 0
|
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)
|
/datum/surgery_step/cavity/proc/get_max_wclass(var/obj/item/organ/external/affected)
|
||||||
switch (affected.organ_tag)
|
switch (affected.organ_tag)
|
||||||
if (BP_HEAD)
|
if (BP_HEAD)
|
||||||
return "cranial"
|
return ITEMSIZE_TINY
|
||||||
if (BP_TORSO)
|
if (BP_TORSO)
|
||||||
return "thoracic"
|
return ITEMSIZE_NORMAL
|
||||||
if (BP_GROIN)
|
if (BP_GROIN)
|
||||||
return "abdominal"
|
return ITEMSIZE_SMALL
|
||||||
return ""
|
return 0
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
/datum/surgery_step/cavity/proc/get_cavity(var/obj/item/organ/external/affected)
|
||||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
switch (affected.organ_tag)
|
||||||
user.visible_message("<font color='red'>[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</font>", \
|
if (BP_HEAD)
|
||||||
"<font color='red'>Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</font>")
|
return "cranial"
|
||||||
affected.createwound(CUT, 20)
|
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
|
// Space Making Surgery
|
||||||
@@ -52,23 +55,23 @@
|
|||||||
min_duration = 60
|
min_duration = 60
|
||||||
max_duration = 80
|
max_duration = 80
|
||||||
|
|
||||||
can_use(mob/living/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(..())
|
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)
|
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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].", \
|
return affected && !affected.cavity
|
||||||
"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
|
|
||||||
..()
|
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
/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/chest/affected = target.get_organ(target_zone)
|
var/obj/item/organ/external/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>", \
|
user.visible_message("[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \
|
||||||
"<font color='blue'>You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].</font>" )
|
"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
|
// Cavity Closing Surgery
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||||
if (!affected || (affected.robotic >= ORGAN_ROBOT) || !(affected.open >= 3))
|
if (!affected || (affected.robotic >= ORGAN_ROBOT) || !(affected.open >= 3))
|
||||||
return 0
|
return 0
|
||||||
|
if(coverage_check(user, target, affected, tool))
|
||||||
|
return 0
|
||||||
return target_zone == BP_HEAD
|
return target_zone == BP_HEAD
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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)
|
return affected && affected.open == (affected.encased ? 3 : 2)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||||
if(!affected) return
|
if(!affected) return
|
||||||
|
if(coverage_check(user, target, affected, tool))
|
||||||
|
return 0
|
||||||
var/internal_bleeding = 0
|
var/internal_bleeding = 0
|
||||||
for(var/datum/wound/W in affected.wounds) if(W.internal)
|
for(var/datum/wound/W in affected.wounds) if(W.internal)
|
||||||
internal_bleeding = 1
|
internal_bleeding = 1
|
||||||
@@ -80,6 +82,8 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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)
|
return affected && affected.open >= 2 && (affected.status & ORGAN_DEAD)
|
||||||
|
|
||||||
@@ -136,6 +140,8 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
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)
|
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)
|
/datum/surgery_step/treat_necrosis/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
return 0
|
return 0
|
||||||
if (!(affected.robotic == ORGAN_ROBOT || affected.robotic == ORGAN_LIFELIKE)) //VOREStation Edit - No good on ORGAN_NANOFORM
|
if (!(affected.robotic == ORGAN_ROBOT || affected.robotic == ORGAN_LIFELIKE)) //VOREStation Edit - No good on ORGAN_NANOFORM
|
||||||
return 0
|
return 0
|
||||||
|
if(coverage_check(user, target, affected, tool))
|
||||||
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -67,6 +67,18 @@
|
|||||||
|
|
||||||
return 1
|
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
|
// 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)
|
/datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
|
|||||||
36
html/changelogs/heroman3003 - voidsuti-surgery.yml
Normal file
36
html/changelogs/heroman3003 - voidsuti-surgery.yml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
################################
|
||||||
|
# Example Changelog File
|
||||||
|
#
|
||||||
|
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||||
|
#
|
||||||
|
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||||
|
# When it is, any changes listed below will disappear.
|
||||||
|
#
|
||||||
|
# Valid Prefixes:
|
||||||
|
# bugfix
|
||||||
|
# wip (For works in progress)
|
||||||
|
# tweak
|
||||||
|
# soundadd
|
||||||
|
# sounddel
|
||||||
|
# rscadd (general adding of nice things)
|
||||||
|
# rscdel (general deleting of nice things)
|
||||||
|
# imageadd
|
||||||
|
# imagedel
|
||||||
|
# maptweak
|
||||||
|
# spellcheck (typo fixes)
|
||||||
|
# experiment
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Your name.
|
||||||
|
author: Heroman3003
|
||||||
|
|
||||||
|
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||||
|
delete-after: True
|
||||||
|
|
||||||
|
# Any changes you've made. See valid prefix list above.
|
||||||
|
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||||
|
# SCREW THIS UP AND IT WON'T WORK.
|
||||||
|
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||||
|
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||||
|
changes:
|
||||||
|
- tweak: "Surgery can no longer be done through the space suits."
|
||||||
Reference in New Issue
Block a user