diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 157fa1c30b9..f64022136ef 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -81,3 +81,4 @@ #define NO_INTORGANS "no_internal_organs" #define CAN_WINGDINGS "can_wingdings" #define NO_CLONESCAN "no_clone_scan" +#define NO_HAIR "no_hair" diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/advance/symptoms/shedding.dm index 087231017b4..a1f244c5566 100644 --- a/code/datums/diseases/advance/symptoms/shedding.dm +++ b/code/datums/diseases/advance/symptoms/shedding.dm @@ -31,6 +31,8 @@ BONUS to_chat(M, "[pick("Your scalp itches.", "Your skin feels flakey.")]") if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + if(NO_HAIR in H.dna.species.species_traits) + return // Hair can't fall out if you don't have any var/obj/item/organ/external/head/head_organ = H.get_organ("head") switch(A.stage) if(3, 4) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 7c8bd56e822..14603c1681a 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -103,7 +103,7 @@ icon = H.icon speak_emote = list("groans") icon_state = "zombie2_s" - if(head_organ) + if(head_organ && !(NO_HAIR in H.dna.species.species_traits)) head_organ.h_style = null H.update_hair() human_overlays = H.overlays diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5b1e11d1437..4e3727aaf25 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -354,11 +354,12 @@ emp_act if(prob(min(acidpwr * acid_volume / 10, 90))) //Applies disfigurement head_organ.receive_damage(acidity, 2 * acidity) emote("scream") - head_organ.h_style = "Bald" - head_organ.f_style = "Shaved" - update_hair() - update_fhair() head_organ.disfigure() + if(!(NO_HAIR in dna.species.species_traits)) + head_organ.h_style = "Bald" + head_organ.f_style = "Shaved" + update_hair() + update_fhair() UpdateDamageIcon() diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 9d642c155f8..215f43b2491 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -807,7 +807,7 @@ if(radiation > RAD_MOB_HAIRLOSS) var/obj/item/organ/external/head/head_organ = H.get_organ("head") - if(!head_organ) + if(!head_organ || (NO_HAIR in species_traits)) return if(prob(15) && head_organ.h_style != "Bald") to_chat(H, "Your hair starts to fall out in clumps...") diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index 058abc8d0cf..646dbe8ac58 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -13,7 +13,7 @@ "eyes" = /obj/item/organ/internal/eyes/abductor //3 darksight. ) - species_traits = list(NO_BLOOD) + species_traits = list(NO_BLOOD, NO_HAIR) inherent_traits = list(TRAIT_VIRUSIMMUNE, TRAIT_CHUNKYFINGERS, TRAIT_NOHUNGER, TRAIT_NOBREATH, TRAIT_NOEXAMINE) dies_at_threshold = TRUE diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index ffb7510dd40..3813dedbdd7 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -20,6 +20,7 @@ even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \ water and other radiation." + species_traits = list(NO_HAIR) inherent_traits = list(TRAIT_NOGERMS, TRAIT_NODECAY) inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT clothing_flags = HAS_SOCKS diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm index 5eb62de833f..05767c244f1 100644 --- a/code/modules/mob/living/carbon/human/species/drask.dm +++ b/code/modules/mob/living/carbon/human/species/drask.dm @@ -31,7 +31,7 @@ "is sucking in warm air!", "is holding their breath!") - species_traits = list(LIPS, IS_WHITELISTED) + species_traits = list(LIPS, IS_WHITELISTED, NO_HAIR) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS has_gender = FALSE diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index e940136702d..3880d578b58 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -4,7 +4,7 @@ icobase = 'icons/mob/human_races/r_golem.dmi' - species_traits = list(NO_BLOOD) + species_traits = list(NO_BLOOD, NO_HAIR) inherent_traits = list(TRAIT_RESISTHEAT, TRAIT_NOBREATH, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_NOFIRE, TRAIT_CHUNKYFINGERS, TRAIT_RADIMMUNE, TRAIT_PIERCEIMMUNE, TRAIT_NOPAIN) inherent_biotypes = MOB_HUMANOID | MOB_MINERAL dies_at_threshold = TRUE diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index 008fa9b39ac..26b56be2315 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -18,7 +18,7 @@ brute_mod = 1.25 //greys are fragile - species_traits = list(LIPS, IS_WHITELISTED, CAN_WINGDINGS) + species_traits = list(LIPS, IS_WHITELISTED, CAN_WINGDINGS, NO_HAIR) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_BODY_MARKINGS dietflags = DIET_HERB diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm index da887e261b6..df364f6122b 100644 --- a/code/modules/mob/living/carbon/human/species/kidan.dm +++ b/code/modules/mob/living/carbon/human/species/kidan.dm @@ -9,7 +9,7 @@ hunger_drain = 0.15 tox_mod = 1.7 - species_traits = list(IS_WHITELISTED) + species_traits = list(IS_WHITELISTED, NO_HAIR) inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_BUG clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 69f28131aa0..926ed17348e 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -5,7 +5,7 @@ dangerous_existence = TRUE //So so much //language = "Clatter" - species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING) + species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING, NO_HAIR) inherent_traits = list(TRAIT_RADIMMUNE, TRAIT_NOHUNGER) inherent_biotypes = MOB_HUMANOID | MOB_MINERAL forced_heartattack = TRUE // Plasmamen have no blood, but they should still get heart-attacks diff --git a/code/modules/mob/living/carbon/human/species/skeleton.dm b/code/modules/mob/living/carbon/human/species/skeleton.dm index a0f929f3f48..92207de211e 100644 --- a/code/modules/mob/living/carbon/human/species/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/skeleton.dm @@ -9,7 +9,7 @@ blood_color = "#FFFFFF" flesh_color = "#E6E6C6" - species_traits = list(NO_BLOOD) + species_traits = list(NO_BLOOD, NO_HAIR) inherent_traits = list(TRAIT_RESISTHEAT, TRAIT_NOBREATH, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_RADIMMUNE, TRAIT_PIERCEIMMUNE, TRAIT_NOHUNGER, TRAIT_XENO_IMMUNE) inherent_biotypes = MOB_UNDEAD | MOB_HUMANOID tox_mod = 0 diff --git a/code/modules/mob/living/carbon/human/species/skrell.dm b/code/modules/mob/living/carbon/human/species/skrell.dm index 99fa6344253..1beed1d8773 100644 --- a/code/modules/mob/living/carbon/human/species/skrell.dm +++ b/code/modules/mob/living/carbon/human/species/skrell.dm @@ -12,7 +12,7 @@ the secrets of their empire to their allies." - species_traits = list(LIPS) + species_traits = list(LIPS, NO_HAIR) inherent_traits = list(TRAIT_NOFAT, TRAIT_WATERBREATH) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_COLOR | HAS_BODY_MARKINGS diff --git a/code/modules/mob/living/carbon/human/species/wryn.dm b/code/modules/mob/living/carbon/human/species/wryn.dm index 78b707aed31..a88b0efaf8b 100644 --- a/code/modules/mob/living/carbon/human/species/wryn.dm +++ b/code/modules/mob/living/carbon/human/species/wryn.dm @@ -34,7 +34,7 @@ "antennae" = /obj/item/organ/internal/wryn/hivenode ) - species_traits = list(LIPS, IS_WHITELISTED, NO_CLONESCAN, HIVEMIND) + species_traits = list(LIPS, IS_WHITELISTED, NO_CLONESCAN, NO_HAIR, HIVEMIND) inherent_traits = list(TRAIT_NOBREATH) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_COLOR diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index c093c8e3d36..8cd010d96e7 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -76,9 +76,9 @@ attacktext = "bites" attack_sound = 'sound/creatures/zombie_attack.ogg' icon_state = "zombie2_s" - if(head_organ) + if(head_organ && !(NO_HAIR in H.dna.species.species_traits)) head_organ.h_style = null - H.update_hair() + H.update_hair() host_species = H.dna.species.name human_overlays = H.overlays update_icons()