Split NO_SCAN into two flags (#17226)

* Split NO_SCAN into two flags

* traits

* species flags applied correctly by traits

* fixed species flag toggling for traits

* bold of you

---------

Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com>
This commit is contained in:
Cameron Lennox
2025-03-14 17:34:03 -04:00
committed by GitHub
parent 5788fd6e21
commit f48f89f1db
37 changed files with 99 additions and 68 deletions
+2 -1
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
+3 -3
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
+2 -2
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()
+6 -6
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()
+2 -2
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
@@ -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
+1 -1
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
@@ -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?
+1 -1
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
+1 -1
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)
+1 -1
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)
@@ -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)
@@ -1487,20 +1487,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]
@@ -221,13 +221,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
@@ -241,12 +241,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
..()
@@ -254,7 +254,7 @@
/mob/living/carbon/human/adjustCloneLoss(var/amount)
..()
if((species.flags & NO_SCAN) || isSynthetic())
if((species.flags & NO_DNA) || isSynthetic())
cloneloss = 0
return
@@ -192,10 +192,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
@@ -20,7 +20,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
@@ -48,7 +48,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
@@ -46,7 +46,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
@@ -44,7 +44,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 | SPECIES_IS_WHITELISTED
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
@@ -591,7 +591,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 | SPECIES_IS_WHITELISTED
blood_color = "#004400"
@@ -50,7 +50,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)
@@ -497,7 +497,7 @@
heat_level_2 = 1000
heat_level_3 = 1150
flags = NO_SCAN
flags = NO_DNA | NO_SLEEVE
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
reagent_tag = IS_SHADEKIN // for shadekin-unqiue chem interactions
@@ -702,3 +702,28 @@
desc = "Even the tiniest particles of dirt give you uneasy footing, even through several layers of footwear."
cost = -5
var_changes = list("dirtslip" = TRUE)
/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)
@@ -386,3 +386,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
+1 -1
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
+3 -3
View File
@@ -605,7 +605,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"
@@ -875,7 +875,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)
@@ -901,7 +901,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)
+2 -2
View File
@@ -79,12 +79,12 @@
to_chat(ghost, span_warning("You are not whitelisted to spawn as this species!"))
return
/* // Comments out NO_SCAN restriction, as per headmin/maintainer request.
/* // Comments out NO_SLEEVE restriction, as per headmin/maintainer request.
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]
if(chosen_species.flags && NO_SCAN) // Sanity. Prevents species like Xenochimera, Proteans, etc from rejoining the round via resleeve, as they should have their own methods of doing so already, as agreed to when you whitelist as them.
if(chosen_species.flags && NO_SLEEVE) // Sanity. Prevents species like Xenochimera, Proteans, etc from rejoining the round via resleeve, as they should have their own methods of doing so already, as agreed to when you whitelist as them.
to_chat(ghost, span_warning("This species cannot be resleeved!"))
return
*/