From e859991c31e6b56e6ee95b1575b69b90de35ab73 Mon Sep 17 00:00:00 2001 From: skull132 Date: Sun, 10 Jan 2016 17:05:44 +0200 Subject: [PATCH] Vaurca Self-Healing & ORGAN_ADV_ROBOT flag Added a new flag for advanced synthetic organs. They're meant to be immune to EMP, mimmic most fleshy organ features, but lack the ability to heal themselves (while still accepting fleshy organ medicine). This also fixes the Vaurca automatically healing themselves. --- .../mob/living/carbon/human/species.dm | 4 ++ code/modules/organs/organ_external.dm | 62 ++++++++++--------- code/setup.dm | 1 + 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index ec03d213..8e1563f9 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -146,6 +146,10 @@ I.mechanize() if(flags & IS_BUG) + for (var/datum/organ/external/E in H.organs) + if ((E.status & ORGAN_CUT_AWAY) || (E.status & ORGAN_DESTROYED)) + continue + E.status |= ORGAN_ADV_ROBOT for(var/datum/organ/internal/I in H.internal_organs) I.mechanize() diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 70f2d187..5611303d 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -43,9 +43,9 @@ // how often wounds should be updated, a higher number means less often var/wound_update_accuracy = 1 - + var/datum/synthetic_limb_cover/covering = null // paint or synth skin - + var/gendered = FALSE @@ -438,7 +438,7 @@ Note that amputating the affected organ does in fact remove the infection from t //Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections /datum/organ/external/proc/update_wounds() - if((status & ORGAN_ROBOT)) //Robotic limbs don't heal or get worse. + if((status & ORGAN_ROBOT) || (status & ORGAN_ADV_ROBOT)) //Robotic limbs don't heal or get worse. return for(var/datum/wound/W in wounds) @@ -517,14 +517,14 @@ Note that amputating the affected organ does in fact remove the infection from t if (open && !clamped && (H && !(H.species.flags & NO_BLOOD))) //things tend to bleed if they are CUT OPEN status |= ORGAN_BLEEDING - - + + /datum/organ/external/proc/can_take_covering() // is this organ functional enough to take a covering if (status&(ORGAN_DESTROYED|ORGAN_BROKEN|ORGAN_DEAD)) return return (burn_dam + brute_dam) <= (max_damage * 0.1) // you get hurt you're going to lose your covering - - + + // new damage icon system // adjusted to set damage_state to brute/burn code only (without r_name0 as before) /datum/organ/external/proc/update_icon() @@ -539,14 +539,14 @@ Note that amputating the affected organ does in fact remove the infection from t owner.update_body(TRUE) return TRUE return FALSE - + /datum/organ/external/head/update_icon() var/result = ..() if (result) owner.update_hair() return result - - + + // new damage icon system // returns just the brute/burn damage code /datum/organ/external/proc/damage_state_text() @@ -573,8 +573,8 @@ Note that amputating the affected organ does in fact remove the infection from t tbrute = 2 else tbrute = 3 - - + + return "[tbrute][tburn]" /**************************************************** @@ -812,6 +812,12 @@ Note that amputating the affected organ does in fact remove the infection from t if(T) T.robotize() +/datum/organ/external/proc/robotize_advanced() + status |= ORGAN_ADV_ROBOT + for (var/datum/organ/external/T in children) + if (T) + T.robotize_advanced() + /datum/organ/external/proc/mutate() src.status |= ORGAN_MUTATED owner.update_body() @@ -829,7 +835,7 @@ Note that amputating the affected organ does in fact remove the infection from t return 1 return 0 - + /datum/organ/external/proc/get_icon_key() if (status & ORGAN_DESTROYED) return "L" // l for lost @@ -842,32 +848,32 @@ Note that amputating the affected organ does in fact remove the infection from t /datum/organ/external/proc/valid_covering() if (status & ORGAN_ROBOT) - if (covering) + if (covering) return (covering.coverage) // is our covering working? - return FALSE // if we have no covering at all + return FALSE // if we have no covering at all return TRUE // squishies always have skin - + /datum/organ/external/proc/get_synthetic_icon_key() if (!covering) // no covering at all, this should not happen return "R" // regular old robot return covering.get_icon_key() - - + + /datum/organ/external/proc/get_synthetic_icon() if (!covering) // no covering at all, this should not happen return new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][get_gender_string()]") return covering.get_icon() - - + + /datum/organ/external/proc/get_gender_string() if (!gendered) // most organs aren't gender specific return "" if (owner) // if we're a gender specific organ with an owner return (owner.gender == FEMALE ? "_f" : "_m") return "_f" - - + + /datum/organ/external/get_icon(var/icon/race_icon, var/icon/deform_icon, var/list/skin_info) if (status & ORGAN_ROBOT) return get_synthetic_icon() @@ -1037,7 +1043,7 @@ Note that amputating the affected organ does in fact remove the infection from t vital = 1 encased = "skull" gendered = TRUE - + /datum/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list()) ..(brute, burn, sharp, edge, used_weapon, forbidden_limbs) @@ -1069,7 +1075,7 @@ obj/item/weapon/organ icon = 'icons/mob/human_races/r_human.dmi' var/op_stage = 0 var/list/organs_internal = list() - + obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) ..(loc) @@ -1099,11 +1105,11 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) base = icon('icons/mob/human_races/r_human.dmi') if(base) // handle skin colours var/list/skin_info = H.skin_colour_info() // get the skin tone info - base.Blend(skin_info["rgb"],skin_info["mode"]) + base.Blend(skin_info["rgb"],skin_info["mode"]) icon = base set_dir(SOUTH) src.transform = turn(src.transform, rand(70,130)) - + /**************************************************** EXTERNAL ORGAN ITEMS DEFINES @@ -1137,7 +1143,7 @@ obj/item/weapon/organ/head name = "head" icon_state = "head_m" var/mob/living/carbon/brain/brainmob - + /obj/item/weapon/organ/head/posi name = "robotic head" @@ -1195,4 +1201,4 @@ obj/item/weapon/organ/attackby(obj/item/weapon/W as obj, mob/user as mob) else user.visible_message("[user] fishes around fruitlessly in [src] with [W].") return - ..() \ No newline at end of file + ..() diff --git a/code/setup.dm b/code/setup.dm index 4fc51f38..ee719a87 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -620,6 +620,7 @@ var/list/liftable_structures = list(\ #define SALVED 512 #define ORGAN_DEAD 1024 #define ORGAN_MUTATED 2048 +#define ORGAN_ADV_ROBOT 4096 #define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.