@@ -117,7 +117,6 @@
|
||||
#define BIOWARE_NERVES "nerves"
|
||||
#define BIOWARE_CIRCULATION "circulation"
|
||||
#define BIOWARE_LIGAMENTS "ligaments"
|
||||
#define BIOWARE_DISSECTION "dissected"
|
||||
|
||||
//Health hud screws for carbon mobs
|
||||
#define SCREWYHUD_NONE 0
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
#define TRAIT_NODEATH "nodeath"
|
||||
#define TRAIT_NOHARDCRIT "nohardcrit"
|
||||
#define TRAIT_NOSOFTCRIT "nosoftcrit"
|
||||
#define TRAIT_MINDSHIELD "mindshield"
|
||||
#define TRAIT_DISSECTED "dissected"
|
||||
#define TRAIT_FEARLESS "fearless"
|
||||
#define TRAIT_UNSTABLE "unstable"
|
||||
#define TRAIT_PARALYSIS_L_ARM "para-l-arm" //These are used for brain-based paralysis, where replacing the limb won't fix it
|
||||
|
||||
@@ -91,6 +91,7 @@
|
||||
|
||||
if(combatmode)
|
||||
msg += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]\n"
|
||||
msg += common_trait_examine()
|
||||
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, src)
|
||||
if(mood)
|
||||
|
||||
@@ -335,6 +335,8 @@
|
||||
if(digitalcamo)
|
||||
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n"
|
||||
|
||||
msg += common_trait_examine()
|
||||
|
||||
var/traitstring = get_trait_string()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
@@ -486,3 +486,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
|
||||
/mob/proc/can_hear()
|
||||
. = TRUE
|
||||
|
||||
//Examine text for traits shared by multiple types. I wish examine was less copypasted.
|
||||
/mob/proc/common_trait_examine()
|
||||
. = ""
|
||||
|
||||
if(has_trait(TRAIT_DISSECTED))
|
||||
. += "<span class='notice'>This body has been dissected and analyzed. It is no longer worth experimenting on.</span><br>"
|
||||
@@ -728,7 +728,7 @@
|
||||
name = "Experimental Dissection"
|
||||
desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
|
||||
id = "surgery_exp_dissection"
|
||||
surgery = /datum/surgery/advanced/bioware/experimental_dissection
|
||||
surgery = /datum/surgery/advanced/experimental_dissection
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery/lobotomy
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
/datum/surgery/advanced/bioware/can_start(mob/user, mob/living/carbon/human/target)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(!istype(target))
|
||||
return FALSE
|
||||
for(var/X in target.bioware)
|
||||
var/datum/bioware/B = X
|
||||
if(B.mod_type == bioware_target)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/datum/surgery/advanced/bioware/experimental_dissection
|
||||
/datum/surgery/advanced/experimental_dissection
|
||||
name = "Experimental Dissection"
|
||||
desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
|
||||
steps = list(/datum/surgery_step/incise,
|
||||
@@ -8,10 +8,12 @@
|
||||
/datum/surgery_step/dissection,
|
||||
/datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
bioware_target = BIOWARE_DISSECTION
|
||||
target_mobtypes = list(/mob/living/carbon) //Feel free to dissect devils but they're magic.
|
||||
|
||||
/datum/surgery/advanced/bioware/experimental_dissection/can_start(mob/user, mob/living/carbon/target)
|
||||
/datum/surgery/advanced/experimental_dissection/can_start(mob/user, mob/living/carbon/target)
|
||||
. = ..()
|
||||
if(target.has_trait(TRAIT_DISSECTED))
|
||||
return FALSE
|
||||
if(iscyborg(user))
|
||||
return FALSE //robots cannot be creative
|
||||
//(also this surgery shouldn't be consistently successful, and cyborgs have a 100% success rate on surgery)
|
||||
@@ -53,7 +55,7 @@
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = check_value(target)))
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
new /datum/bioware/dissected(target)
|
||||
target.add_trait(TRAIT_DISSECTED)
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
@@ -63,10 +65,5 @@
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = (check_value(target) * 0.2)))
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
new /datum/bioware/dissected(target)
|
||||
return TRUE
|
||||
|
||||
/datum/bioware/dissected
|
||||
name = "Dissected"
|
||||
desc = "This body has been dissected and analyzed. It is no longer worth experimenting on."
|
||||
mod_type = BIOWARE_DISSECTION
|
||||
target.add_trait(TRAIT_DISSECTED)
|
||||
return TRUE
|
||||
@@ -12,8 +12,8 @@
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/brainwash,
|
||||
/datum/surgery_step/close)
|
||||
|
||||
species = list(/mob/living/carbon/human)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
/datum/surgery/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target)
|
||||
if(!..())
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/datum/surgery_step/lobotomize,
|
||||
/datum/surgery_step/close)
|
||||
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = 0
|
||||
/datum/surgery/advanced/lobotomy/can_start(mob/user, mob/living/carbon/target)
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/pacify,
|
||||
/datum/surgery_step/close)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = 0
|
||||
/datum/surgery/advanced/pacify/can_start(mob/user, mob/living/carbon/target)
|
||||
@@ -37,4 +38,4 @@
|
||||
"<span class='warning'>[user] screws up, causing brain damage!</span>",
|
||||
"[user] completes the surgery on [target]'s brain.")
|
||||
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY)
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
/datum/surgery_step/reconstruct,
|
||||
/datum/surgery_step/close)
|
||||
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
requires_bodypart_type = 0
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/revive,
|
||||
/datum/surgery_step/close)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = 0
|
||||
/datum/surgery/advanced/revival/can_start(mob/user, mob/living/carbon/target)
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/viral_bond,
|
||||
/datum/surgery_step/close)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
/datum/surgery/advanced/viral_bonding/can_start(mob/user, mob/living/carbon/target)
|
||||
if(!..())
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/surgery/amputation
|
||||
name = "Amputation"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/sever_limb)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = 0
|
||||
/datum/surgery_step/sever_limb
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/fix_brain,
|
||||
/datum/surgery_step/close)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = 0
|
||||
/datum/surgery_step/fix_brain
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/surgery/cavity_implant
|
||||
name = "Cavity implant"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/handle_cavity, /datum/surgery_step/close)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
//handle cavity
|
||||
/datum/surgery_step/handle_cavity
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/datum/surgery/core_removal
|
||||
name = "Core removal"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/extract_core)
|
||||
species = list(/mob/living/simple_animal/slime)
|
||||
target_mobtypes = list(/mob/living/simple_animal/slime)
|
||||
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
|
||||
lying_required = FALSE
|
||||
ignore_clothes = TRUE
|
||||
|
||||
/datum/surgery/core_removal/can_start(mob/user, mob/living/target)
|
||||
if(target.stat == DEAD)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/surgery/eye_surgery
|
||||
name = "Eye surgery"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_PRECISE_EYES)
|
||||
requires_bodypart_type = 0
|
||||
//fix eyes
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
C = M
|
||||
affecting = C.get_bodypart(check_zone(selected_zone))
|
||||
|
||||
if(!M.lying && !isslime(M)) //if they're prone or a slime
|
||||
return
|
||||
|
||||
var/datum/surgery/current_surgery
|
||||
|
||||
for(var/datum/surgery/S in M.surgeries)
|
||||
@@ -35,13 +32,18 @@
|
||||
continue
|
||||
else if(C && S.requires_bodypart) //mob with no limb in surgery zone when we need a limb
|
||||
continue
|
||||
if(S.lying_required && !(M.mobility_flags & MOBILITY_STAND))
|
||||
continue
|
||||
if(!S.can_start(user, M))
|
||||
continue
|
||||
for(var/path in S.species)
|
||||
for(var/path in S.target_mobtypes)
|
||||
if(istype(M, path))
|
||||
available_surgeries[S.name] = S
|
||||
break
|
||||
|
||||
if(!available_surgeries.len)
|
||||
return
|
||||
|
||||
var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries
|
||||
if(P && user && user.Adjacent(M) && (I in user))
|
||||
var/datum/surgery/S = available_surgeries[P]
|
||||
@@ -60,6 +62,8 @@
|
||||
return
|
||||
else if(C && S.requires_bodypart)
|
||||
return
|
||||
if(S.lying_required && !(M.mobility_flags & MOBILITY_STAND))
|
||||
return
|
||||
if(!S.can_start(user, M))
|
||||
return
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/surgery/implant_removal
|
||||
name = "implant removal"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/extract_implant, /datum/surgery_step/close)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
//extract implant
|
||||
/datum/surgery_step/extract_implant
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
/datum/surgery/augmentation
|
||||
name = "Augmentation"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/replace, /datum/surgery_step/saw, /datum/surgery_step/replace_limb)
|
||||
species = list(/mob/living/carbon/human)
|
||||
target_mobtypes = list(/mob/living/carbon/human)
|
||||
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
|
||||
requires_real_bodypart = TRUE
|
||||
//SURGERY STEP SUCCESSES
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/surgery/organ_manipulation
|
||||
name = "Organ manipulation"
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
name = "organ manipulation"
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD)
|
||||
requires_real_bodypart = 1
|
||||
steps = list(
|
||||
@@ -26,7 +26,7 @@
|
||||
/datum/surgery/organ_manipulation/alien
|
||||
name = "Alien organ manipulation"
|
||||
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
|
||||
species = list(/mob/living/carbon/alien/humanoid)
|
||||
target_mobtypes = list(/mob/living/carbon/alien/humanoid)
|
||||
steps = list(
|
||||
/datum/surgery_step/saw,
|
||||
/datum/surgery_step/incise,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/surgery/prosthetic_replacement
|
||||
name = "Prosthetic replacement"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/add_prosthetic)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD)
|
||||
requires_bodypart = FALSE //need a missing limb
|
||||
requires_bodypart_type = 0
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
var/list/steps = list() //Steps in a surgery
|
||||
var/step_in_progress = 0 //Actively performing a Surgery
|
||||
var/can_cancel = 1 //Can cancel this surgery after step 1 with cautery
|
||||
var/list/species = list(/mob/living/carbon/human) //Acceptable Species
|
||||
var/location = BODY_ZONE_CHEST //Surgery location
|
||||
var/list/target_mobtypes = list(/mob/living/carbon/human) //Acceptable Species
|
||||
var/location = BODY_ZONE_CHEST //Surgery location
|
||||
var/requires_bodypart_type = BODYPART_ORGANIC //Prevents you from performing an operation on incorrect limbs. 0 for any limb type
|
||||
var/list/possible_locs = list() //Multiple locations
|
||||
var/ignore_clothes = 0 //This surgery ignores clothes
|
||||
@@ -15,6 +15,7 @@
|
||||
var/requires_bodypart = TRUE //Surgery available only when a bodypart is present, or only when it is missing.
|
||||
var/success_multiplier = 0 //Step success propability multiplier
|
||||
var/requires_real_bodypart = 0 //Some surgeries don't work on limbs that don't really exist
|
||||
var/lying_required = TRUE //Does the vicitm needs to be lying down.
|
||||
|
||||
/datum/surgery/New(surgery_target, surgery_location, surgery_bodypart)
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user