mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
[MIRROR] Split NO_SCAN into two flags (#10420)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
committed by
GitHub
parent
f862d60640
commit
15a65537e9
@@ -1,7 +1,7 @@
|
||||
// Species flags.
|
||||
#define NO_MINOR_CUT 0x1 // Can step on broken glass with no ill-effects. Either thick skin (diona), cut resistant (slimes) or incorporeal (shadows)
|
||||
#define IS_PLANT 0x2 // Is a treeperson.
|
||||
#define NO_SCAN 0x4 // Cannot be scanned in a DNA machine/genome-stolen.
|
||||
#define NO_SLEEVE 0x4 // Cannot be resleeved by clonepods
|
||||
#define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator.
|
||||
#define NO_SLIP 0x10 // Cannot fall over.
|
||||
#define NO_POISON 0x20 // Cannot not suffer toxloss.
|
||||
@@ -11,6 +11,7 @@
|
||||
#define UNDEAD 0x200 // Various things that living things don't do, mostly for skeletons
|
||||
#define NO_INFECT 0x400 // Don't allow infections in limbs or organs, similar to IS_PLANT, without other strings.
|
||||
#define NO_DEFIB 0x800 // Don't allow them to be defibbed
|
||||
#define NO_DNA 0x1000 // Cannot have mutations or have their dna changed by genetics/radiation/genome-stolen.
|
||||
// unused: 0x8000 - higher than this will overflow
|
||||
|
||||
// Species EMP vuln for carbons
|
||||
|
||||
@@ -64,15 +64,15 @@
|
||||
var/mob/living/carbon/human/H = player.current
|
||||
if(H.isSynthetic())
|
||||
return 0
|
||||
if(H.species.flags & NO_SCAN)
|
||||
if(H.species.flags & (NO_SLEEVE|NO_DNA))
|
||||
return 0
|
||||
return 1
|
||||
else if(isnewplayer(player.current))
|
||||
if(player.current.client && player.current.client.prefs)
|
||||
var/datum/species/S = GLOB.all_species[player.current.client.prefs.species]
|
||||
if(S && (S.flags & NO_SCAN))
|
||||
if(S && (S.flags & (NO_SLEEVE|NO_DNA)))
|
||||
return 0
|
||||
if(player.current.client.prefs.organ_data["torso"] == "cyborg") // Full synthetic.
|
||||
if(player.current.client.prefs.organ_data["torso"] == "cyborg") // Full synthetic. // TODO, this to issynthetic()?
|
||||
return 0
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
// flags: See below, bitfield.
|
||||
|
||||
/proc/domutcheck(var/mob/living/M, var/connected=null, var/flags=0)
|
||||
// Traitgenes NO_SCAN and Synthetics cannot be mutated
|
||||
// Traitgenes NO_DNA and Synthetics cannot be mutated
|
||||
if(M.isSynthetic())
|
||||
return
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.species || H.species.flags & NO_SCAN)
|
||||
if(!H.species || H.species.flags & NO_DNA)
|
||||
return
|
||||
// Traitgenes Sort genes into currently active, and deactivated... Genes that are active and may deactivate should do so before attempting to activate genes(to avoid conflicts blocking them!)
|
||||
var/list/enabled_genes = list()
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
// Give Random Bad Mutation to M
|
||||
/proc/randmutb(var/mob/living/M)
|
||||
if(!M || !(M.dna)) return
|
||||
// Traitgenes NO_SCAN and Synthetics cannot be mutated
|
||||
// Traitgenes NO_DNA and Synthetics cannot be mutated
|
||||
if(M.isSynthetic())
|
||||
return
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.species || H.species.flags & NO_SCAN)
|
||||
if(!H.species || H.species.flags & NO_DNA)
|
||||
return
|
||||
M.dna.check_integrity()
|
||||
// Traitgenes Pick from bad traitgenes
|
||||
@@ -38,12 +38,12 @@
|
||||
// Give Random Good Mutation to M
|
||||
/proc/randmutg(var/mob/living/M)
|
||||
if(!M || !(M.dna)) return
|
||||
// Traitgenes NO_SCAN and Synthetics cannot be mutated
|
||||
// Traitgenes NO_DNA and Synthetics cannot be mutated
|
||||
if(M.isSynthetic())
|
||||
return
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.species || H.species.flags & NO_SCAN)
|
||||
if(!H.species || H.species.flags & NO_DNA)
|
||||
return
|
||||
M.dna.check_integrity()
|
||||
// Traitgenes Pick from good traitgenes
|
||||
@@ -53,12 +53,12 @@
|
||||
// Scramble UI or SE.
|
||||
/proc/scramble(var/UI, var/mob/M, var/prob)
|
||||
if(!M || !(M.dna)) return
|
||||
// Traitgenes edit begin - NO_SCAN and Synthetics cannot be mutated
|
||||
// Traitgenes edit begin - NO_DNA and Synthetics cannot be mutated
|
||||
if(M.isSynthetic())
|
||||
return
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.species || H.species.flags & NO_SCAN)
|
||||
if(!H.species || H.species.flags & NO_DNA)
|
||||
return
|
||||
// Traitgenes edit end
|
||||
M.dna.check_integrity()
|
||||
|
||||
@@ -467,13 +467,13 @@
|
||||
occupantData["name"] = WC.real_name
|
||||
occupantData["stat"] = WC.stat
|
||||
occupantData["isViableSubject"] = 1
|
||||
// Traitgenes NO_SCAN and Synthetics cannot be mutated
|
||||
// Traitgenes NO_DNA and Synthetics cannot be mutated
|
||||
var/allowed = TRUE
|
||||
if(WC.isSynthetic())
|
||||
allowed = FALSE
|
||||
if(ishuman(WC))
|
||||
var/mob/living/carbon/human/H = WC
|
||||
if(!H.species || (H.species.flags & NO_SCAN))
|
||||
if(!H.species || (H.species.flags & NO_DNA))
|
||||
allowed = FALSE
|
||||
if(!allowed || (NOCLONE in WC.mutations) || !WC.dna)
|
||||
occupantData["isViableSubject"] = 0
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
to_chat(src, span_warning("\The [T] is not compatible with our biology."))
|
||||
return
|
||||
|
||||
if(T.species.flags & NO_SCAN)
|
||||
if(T.species.flags & (NO_DNA|NO_SLEEVE))
|
||||
to_chat(src, span_warning("We do not know how to parse this creature's DNA!"))
|
||||
return
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
to_chat(src, span_warning("\The [T] is not compatible with our biology."))
|
||||
return 0
|
||||
|
||||
if(T.species.flags & NO_SCAN)
|
||||
if(T.species.flags & (NO_DNA|NO_SLEEVE))
|
||||
to_chat(src, span_warning("We do not know how to parse this creature's DNA!"))
|
||||
return 0
|
||||
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
eject_wait = 0 //If it's still set somehow.
|
||||
if(ishuman(occupant)) //Need to be safe.
|
||||
var/mob/living/carbon/human/patient = occupant
|
||||
if(!(patient.species.flags & NO_SCAN)) //If, for some reason, someone makes a genetically-unalterable clone, let's not make them permanently disabled.
|
||||
if(!(patient.species.flags & NO_DNA)) //If, for some reason, someone makes a genetically-unalterable clone, let's not make them permanently disabled.
|
||||
domutcheck(occupant) //Waiting until they're out before possible transforming.
|
||||
occupant.UpdateAppearance()
|
||||
occupant = null
|
||||
|
||||
@@ -71,16 +71,16 @@
|
||||
L.apply_effect(rand(5,20), IRRADIATE, check_protection = 0)
|
||||
L.apply_damage(max(2,L.getCloneLoss()), CLONE)
|
||||
|
||||
// Traitgenes edit begin - NO_SCAN and Synthetics cannot be mutated
|
||||
// Traitgenes edit begin - NO_DNA and Synthetics cannot be mutated
|
||||
var/allow = TRUE
|
||||
if(M.isSynthetic())
|
||||
allow = FALSE
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.species || H.species.flags & NO_SCAN)
|
||||
if(!H.species || H.species.flags & NO_DNA)
|
||||
allow = FALSE
|
||||
// Traitgenes edit end
|
||||
if (!(NOCLONE in M.mutations) && allow) // prevents drained people from having their DNA changed, Traitgenes edit - NO_SCAN and Synthetics cannot be mutated
|
||||
if (!(NOCLONE in M.mutations) && allow) // prevents drained people from having their DNA changed, Traitgenes edit - NO_DNA and Synthetics cannot be mutated
|
||||
if(buf)
|
||||
if (buf.types & DNA2_BUF_UI)
|
||||
if (!block) //isolated block?
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
src.icon_state = "morgue2"
|
||||
get_occupants()
|
||||
for (var/mob/living/carbon/human/H in occupants)
|
||||
if(H.isSynthetic() || H.suiciding || !H.ckey || !H.client || (NOCLONE in H.mutations) || (H.species && H.species.flags & NO_SCAN))
|
||||
if(H.isSynthetic() || H.suiciding || !H.ckey || !H.client || (NOCLONE in H.mutations) || (H.species && H.species.flags & NO_SLEEVE))
|
||||
src.icon_state = "morgue2"
|
||||
break
|
||||
else
|
||||
|
||||
@@ -652,7 +652,7 @@
|
||||
if(Tar.nif)
|
||||
to_chat(user,span_warning("Target already has a NIF."))
|
||||
return
|
||||
if(Tar.species.flags & NO_SCAN)
|
||||
if(Tar.species.flags & NO_DNA)
|
||||
var/obj/item/nif/S = /obj/item/nif/bioadap
|
||||
input_NIF = initial(S.name)
|
||||
new /obj/item/nif/bioadap(Tar)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
to_chat(usr,span_warning("Target already has a NIF."))
|
||||
return
|
||||
|
||||
if(H.species.flags & NO_SCAN)
|
||||
if(H.species.flags & NO_DNA)
|
||||
new /obj/item/nif/authenticbio(H)
|
||||
else
|
||||
new /obj/item/nif/authentic(H)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
to_chat(usr,span_warning("Target already has a NIF."))
|
||||
return
|
||||
|
||||
if(H.species.flags & NO_SCAN)
|
||||
if(H.species.flags & NO_DNA)
|
||||
var/obj/item/nif/S = /obj/item/nif/bioadap
|
||||
input_NIF = initial(S.name)
|
||||
new /obj/item/nif/bioadap(H)
|
||||
|
||||
@@ -1211,8 +1211,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
dat += "</br>" + span_bold("Does not have a circulatory system.")
|
||||
if(!current_species.has_organ[O_LUNGS])
|
||||
dat += "</br>" + span_bold("Does not have a respiratory system.")
|
||||
if(current_species.flags & NO_SCAN)
|
||||
if(current_species.flags & NO_DNA)
|
||||
dat += "</br>" + span_bold("Does not have DNA.")
|
||||
if(current_species.flags & NO_SLEEVE)
|
||||
dat += "</br>" + span_bold("Cannot be cloned.")
|
||||
if(current_species.flags & NO_DEFIB)
|
||||
dat += "</br>" + span_bold("Cannot be defibrillated.")
|
||||
if(current_species.flags & NO_PAIN)
|
||||
|
||||
@@ -1488,20 +1488,6 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/getDNA()
|
||||
if(species.flags & NO_SCAN)
|
||||
return null
|
||||
if(isSynthetic())
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/setDNA()
|
||||
if(species.flags & NO_SCAN)
|
||||
return
|
||||
if(isSynthetic())
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/has_brain()
|
||||
if(internal_organs_by_name[O_BRAIN])
|
||||
var/obj/item/organ/brain = internal_organs_by_name[O_BRAIN]
|
||||
|
||||
@@ -246,13 +246,13 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/proc/Stasis(amount)
|
||||
if((species.flags & NO_SCAN) || isSynthetic())
|
||||
if((species.flags & NO_DNA) || isSynthetic())
|
||||
in_stasis = 0
|
||||
else
|
||||
in_stasis = amount
|
||||
|
||||
/mob/living/carbon/human/proc/getStasis()
|
||||
if((species.flags & NO_SCAN) || isSynthetic())
|
||||
if((species.flags & NO_DNA) || isSynthetic())
|
||||
return 0
|
||||
|
||||
return in_stasis
|
||||
@@ -266,12 +266,12 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/getCloneLoss()
|
||||
if((species.flags & NO_SCAN) || isSynthetic())
|
||||
if((species.flags & NO_DNA) || isSynthetic())
|
||||
cloneloss = 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/setCloneLoss(var/amount)
|
||||
if((species.flags & NO_SCAN) || isSynthetic())
|
||||
if((species.flags & NO_DNA) || isSynthetic())
|
||||
cloneloss = 0
|
||||
else
|
||||
..()
|
||||
@@ -279,7 +279,7 @@
|
||||
/mob/living/carbon/human/adjustCloneLoss(var/amount)
|
||||
..()
|
||||
|
||||
if((species.flags & NO_SCAN) || isSynthetic())
|
||||
if((species.flags & NO_DNA) || isSynthetic())
|
||||
cloneloss = 0
|
||||
return
|
||||
|
||||
|
||||
@@ -193,10 +193,10 @@
|
||||
SHOULD_NOT_OVERRIDE(TRUE) //Don't. Even. /Think/. About. It.
|
||||
if(!dna || !species)
|
||||
return
|
||||
// Traitgenes NO_SCAN and Synthetics cannot be mutated
|
||||
// Traitgenes NO_DNA and Synthetics cannot be mutated
|
||||
if(isSynthetic())
|
||||
return
|
||||
if(species.flags & NO_SCAN)
|
||||
if(species.flags & NO_DNA)
|
||||
return
|
||||
if(refresh_traits && species.traits)
|
||||
for(var/TR in species.traits)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
language = LANGUAGE_LLEILL
|
||||
name_language = LANGUAGE_LLEILL
|
||||
|
||||
flags = NO_SCAN | NO_MINOR_CUT | NO_INFECT | NO_HALLUCINATION
|
||||
flags = NO_SLEEVE | NO_MINOR_CUT | NO_INFECT | NO_HALLUCINATION
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_UNDERWEAR
|
||||
|
||||
|
||||
@@ -197,7 +197,10 @@ Variables you may want to make use of are:
|
||||
flags ^= NO_SLIP
|
||||
|
||||
/datum/species/event1/proc/toggle_cloning()
|
||||
flags ^= NO_SCAN
|
||||
flags ^= NO_SLEEVE
|
||||
|
||||
/datum/species/event1/proc/toggle_dna()
|
||||
flags ^= NO_DNA
|
||||
|
||||
/datum/species/event1/proc/toggle_defibbing()
|
||||
flags ^= NO_DEFIB
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
remains_type = /obj/effect/decal/cleanable/ash
|
||||
death_message = "dissolves into ash..."
|
||||
|
||||
flags = NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_DEFIB
|
||||
flags = NO_DNA | NO_SLEEVE | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
genders = list(NEUTER)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
max_age = 110
|
||||
health_hud_intensity = 1.5
|
||||
|
||||
flags = NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_BLOOD | UNDEAD | NO_DEFIB
|
||||
flags = NO_DNA | NO_SLEEVE | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_BLOOD | UNDEAD | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
appearance_flags = null
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
ideal_air_type = /datum/gas_mixture/belly_air/vox
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
flags = NO_SCAN
|
||||
flags = NO_DNA | NO_SLEEVE | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_WHITELISTED
|
||||
appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_SKIN_COLOR
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
heat_level_2 = 1000
|
||||
heat_level_3 = 1150
|
||||
|
||||
flags = NO_SCAN | NO_MINOR_CUT | NO_INFECT
|
||||
flags = NO_DNA | NO_SLEEVE | NO_MINOR_CUT | NO_INFECT
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
|
||||
reagent_tag = IS_SHADEKIN // for shadekin-unqiue chem interactions
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
breath_heat_level_3 = 800 //lower incineration threshold though
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
flags = NO_SCAN | IS_PLANT | NO_MINOR_CUT
|
||||
flags = NO_DNA | NO_SLEEVE | IS_PLANT | NO_MINOR_CUT
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/alraune_fruit_select, //Give them the voremodes related to wrapping people in vines and sapping their fluids
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
language = "Sol Common" //todo?
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch)
|
||||
flags = NO_PAIN | NO_SCAN | NO_POISON | NO_MINOR_CUT | NO_DEFIB
|
||||
flags = NO_PAIN | NO_DNA | NO_SLEEVE | NO_POISON | NO_MINOR_CUT | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
siemens_coefficient = 0
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
bump_flag = SLIME
|
||||
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
push_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_DEFIB
|
||||
flags = NO_DNA | NO_SLEEVE | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_DEFIB
|
||||
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
health_hud_intensity = 2
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
flesh_color = "#505050"
|
||||
base_color = "#FFFFFF" //Color mult, start out with this
|
||||
|
||||
flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_PAIN
|
||||
flags = NO_DNA | NO_SLEEVE | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_PAIN
|
||||
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
health_hud_intensity = 2
|
||||
|
||||
@@ -626,7 +626,7 @@
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
|
||||
flags = NO_SCAN | IS_PLANT | NO_PAIN | NO_SLIP | NO_MINOR_CUT | NO_DEFIB
|
||||
flags = NO_DNA | NO_SLEEVE | IS_PLANT | NO_PAIN | NO_SLIP | NO_MINOR_CUT | NO_DEFIB
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
|
||||
blood_color = "#004400"
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
//primitive_form = SPECIES_MONKEY_TAJ
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE//Whitelisted as restricted is broken.
|
||||
flags = NO_SCAN | NO_INFECT // | NO_DEFIB // Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is. Leaving NO_DEFIB there for the future/in case reversion to old 'chimera no-defib.
|
||||
flags = NO_SLEEVE | NO_DNA | NO_INFECT // | NO_DEFIB // Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is. Leaving NO_DEFIB there for the future/in case reversion to old 'chimera no-defib.
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
@@ -544,7 +544,7 @@
|
||||
heat_level_2 = 1000
|
||||
heat_level_3 = 1150
|
||||
|
||||
flags = NO_SCAN
|
||||
flags = NO_DNA | NO_SLEEVE
|
||||
spawn_flags = SPECIES_IS_RESTRICTED //SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE CHOMPedit: disabled maybe forever
|
||||
|
||||
reagent_tag = IS_SHADEKIN // for shadekin-unqiue chem interactions
|
||||
|
||||
@@ -704,3 +704,28 @@
|
||||
cost = -5
|
||||
var_changes = list("dirtslip" = TRUE)
|
||||
excludes = list(/datum/trait/positive/absorbent) // CHOMPAdd
|
||||
|
||||
/datum/trait/negative/nodefib
|
||||
name = "Unreviveable"
|
||||
desc = "For whatever strange genetic reason, defibs cannot restart your heart."
|
||||
cost = -1
|
||||
custom_only = FALSE
|
||||
var_changes = list("flags" = NO_DEFIB)
|
||||
can_take = ORGANICS
|
||||
excludes = list(/datum/trait/negative/noresleeve, /datum/trait/negative/onelife)
|
||||
|
||||
/datum/trait/negative/noresleeve
|
||||
name = "Unsleeveable"
|
||||
desc = "Your genetics have been ruined, to the point where resleeving can no longer bring you back. Your DNA is unappealing to slimes as a result." //The autoresleever still resleeves on Virgo as that section has been commented out, but eh, whatever. It's not really a big concern. -1+-1 = -2 is all I care about.
|
||||
cost = -1
|
||||
custom_only = TRUE
|
||||
var_changes = list("flags" = NO_SLEEVE)
|
||||
excludes = list(/datum/trait/negative/nodefib, /datum/trait/negative/onelife)
|
||||
|
||||
/datum/trait/negative/onelife
|
||||
name = "One Life"
|
||||
desc = "Once you are dead, you are incapable of being resleeved or revived using a defib."
|
||||
cost = -2
|
||||
custom_only = TRUE
|
||||
var_changes = list("flags" = NO_SLEEVE | NO_DEFIB)
|
||||
excludes = list(/datum/trait/negative/nodefib, /datum/trait/negative/noresleeve)
|
||||
|
||||
@@ -405,3 +405,10 @@
|
||||
/datum/trait/positive/vibration_sense/unapply(datum/species/S, mob/living/carbon/human/H, trait_prefs)
|
||||
. = ..()
|
||||
H.motiontracker_unsubscribe()
|
||||
|
||||
/datum/trait/positive/stable_genetics
|
||||
name = "Stable Genetics"
|
||||
desc = "Your genetics are extraordinarily stable, with your DNA being immune to any changes, including slimes!"
|
||||
cost = 2
|
||||
custom_only = TRUE
|
||||
var_changes = list("flags" = NO_DNA)
|
||||
|
||||
@@ -49,7 +49,10 @@
|
||||
ASSERT(S)
|
||||
if(var_changes)
|
||||
for(var/V in var_changes)
|
||||
S.vars[V] = var_changes[V]
|
||||
if(V == "flags") // Is bitflag, implimentation means traits can only GIVE you flags, not remove them.
|
||||
S.vars[V] |= var_changes[V]
|
||||
else
|
||||
S.vars[V] = var_changes[V]
|
||||
if (trait_prefs)
|
||||
for (var/trait in trait_prefs)
|
||||
switch(has_preferences[trait][3])
|
||||
@@ -77,7 +80,11 @@
|
||||
ASSERT(S)
|
||||
if(var_changes)
|
||||
for(var/V in var_changes)
|
||||
S.vars[V] = initial(S.vars[V])
|
||||
if(V == "flags") // Is bitflag, this assumes traits can only ever GIVE you flags.
|
||||
if(!(initial(S.vars[V]) & var_changes[V]))
|
||||
S.vars[V] &= ~var_changes[V]
|
||||
else
|
||||
S.vars[V] = initial(S.vars[V])
|
||||
if (trait_prefs)
|
||||
for (var/trait in trait_prefs)
|
||||
switch(has_preferences[trait][3])
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
flags = NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_INFECT | NO_DEFIB
|
||||
flags = NO_DNA | NO_SLEEVE | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_INFECT | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
reagent_tag = IS_XENOS
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
//VOREStation Addition start
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.species.flags & NO_SCAN)
|
||||
if(H.species.flags & (NO_DNA|NO_SLEEVE))
|
||||
to_chat(src, "This subject's life energy is beyond my reach...")
|
||||
return FALSE
|
||||
//VOREStation Addition end
|
||||
|
||||
@@ -119,7 +119,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable
|
||||
should_be_in = brain.parent_organ
|
||||
|
||||
if(istype(H) && !H.nif && H.species && (loc == H.get_organ(should_be_in)))
|
||||
if(!bioadap && (H.species.flags & NO_SCAN)) //NO_SCAN is the default 'too complicated' flag
|
||||
if(!bioadap && (H.species.flags & NO_DNA)) //NO_DNA is the default 'too complicated' flag
|
||||
return FALSE
|
||||
|
||||
human = H
|
||||
|
||||
@@ -615,7 +615,7 @@
|
||||
H.b_hair = max(0, min(255, H.b_hair + color_shift))
|
||||
if(H.b_facial)
|
||||
H.b_facial = max(0, min(255, H.b_facial + color_shift))
|
||||
if(H.species.flags & NO_SCAN)
|
||||
if(H.species.flags & NO_DNA)
|
||||
return
|
||||
|
||||
//The original coder comment here wanted it to be "Approx. one mutation per 10 injected/20 ingested/30 touching units"
|
||||
@@ -887,7 +887,7 @@
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && (H.species.flags & NO_SCAN))
|
||||
if(istype(H) && (H.species.flags & NO_DNA))
|
||||
return
|
||||
|
||||
if(M.dna)
|
||||
@@ -913,7 +913,7 @@
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && (H.species.flags & NO_SCAN))
|
||||
if(istype(H) && (H.species.flags & NO_DNA))
|
||||
return
|
||||
|
||||
if(M.dna)
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
return
|
||||
|
||||
// CHOMPedit start
|
||||
|
||||
var/datum/species/chosen_species
|
||||
if(ghost.client.prefs.species) // In case we somehow don't have a species set here.
|
||||
chosen_species = GLOB.all_species[ghost_client.prefs.species]
|
||||
|
||||
@@ -48,23 +48,6 @@
|
||||
..()
|
||||
H.add_modifier(/datum/modifier/trait/majorempweakness)
|
||||
|
||||
/datum/trait/negative/nodefib
|
||||
name = "Unreviveable"
|
||||
desc = "For whatever strange genetic reason, defibs cannot restart your heart."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("flags" = NO_DEFIB)
|
||||
can_take = ORGANICS //Mostly because I think synth code bypasses the no defib thing. Or maybe that is just vox
|
||||
excludes = list(/datum/trait/negative/noresleeve) //No, just, no
|
||||
|
||||
/datum/trait/negative/noresleeve
|
||||
name = "Unsleeveable"
|
||||
desc = "Your genetics have been ruined, to the point where resleeving can no longer bring you back, including the autoresleever."
|
||||
cost = -1
|
||||
custom_only = TRUE
|
||||
var_changes = list("flags" = NO_SCAN)
|
||||
excludes = list(/datum/trait/negative/nodefib) //No, just, no
|
||||
|
||||
/datum/trait/negative/meltable
|
||||
name = "Water Weakness"
|
||||
desc = "Due to your biology, water is harmful to you."
|
||||
@@ -81,14 +64,6 @@
|
||||
var_changes = list("water_resistance" = 0, "water_damage_mod" = 0.8)
|
||||
excludes = list(/datum/trait/negative/meltable)
|
||||
|
||||
/datum/trait/negative/onelife
|
||||
name = "One Life"
|
||||
desc = "For whatever reason, once you dead, that is final."
|
||||
cost = -2
|
||||
custom_only = TRUE
|
||||
var_changes = list("flags" = NO_SCAN | NO_DEFIB)
|
||||
excludes = list(/datum/trait/negative/nodefib, /datum/trait/negative/noresleeve)
|
||||
|
||||
/datum/trait/negative/lightweight_light
|
||||
name = "Lesser Lightweight"
|
||||
desc = "Your light weight and poor balance make you very susceptible to unhelpful bumping if you are unprepared)"
|
||||
|
||||
@@ -102,10 +102,10 @@
|
||||
if(L.getCloneLoss() >= L.getMaxHealth() * 1.5)
|
||||
to_chat(src, "This subject does not have an edible life energy...")
|
||||
return FALSE
|
||||
//VOREStation Addition start
|
||||
//VOREStation Addition start //This is a modular_chomp file... why is there a vorestation edit? TODO: Reassess this file. Port upstream if needed.
|
||||
if(istype(L, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.species.flags & NO_SCAN)
|
||||
if(H.species.flags & NO_DNA)
|
||||
to_chat(src, "This subject's life energy is beyond my reach...")
|
||||
return FALSE
|
||||
//VOREStation Addition end
|
||||
|
||||
Reference in New Issue
Block a user