[MIRROR] Split NO_SCAN into two flags (#10420)

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-03-15 13:45:38 -07:00
committed by GitHub
parent f862d60640
commit 15a65537e9
40 changed files with 101 additions and 94 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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?

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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]

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -49,6 +49,9 @@
ASSERT(S)
if(var_changes)
for(var/V in var_changes)
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)
@@ -77,6 +80,10 @@
ASSERT(S)
if(var_changes)
for(var/V in var_changes)
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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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]

View File

@@ -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)"

View File

@@ -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