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)
|
||||
if(!ismob(user))
|
||||
return 0
|
||||
if(can_operate(src) && I.do_surgery(src,user))
|
||||
if(I.can_do_surgery(src,user))
|
||||
if(can_operate(src) && I.can_do_surgery(src,user))
|
||||
if(I.do_surgery(src,user))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
return 0
|
||||
if (affected.robotic >= ORGAN_ROBOT)
|
||||
return 0
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
return 0
|
||||
if (affected.robotic >= ORGAN_ROBOT)
|
||||
return 0
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
/////////////////////////////
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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)
|
||||
|
||||
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