anchor.diff:  GLOBAL_LIST_EMPTY(roundstart_races)
   
   /datum/species
  -	var/id	// if the game needs to manually check your race to do something not included in a proc here, it will use this
  -	var/limbs_id		//this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans.
  -	var/name	// this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever
  -	var/default_color = "#FFF"	// if alien colors are disabled, this is the color that will be used by that race
  -
  -	var/sexes = 1		// whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows
  -
  +	/// if the game needs to manually check your race to do something not included in a proc here, it will use this
  +	var/id
  +	///this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans.
  +	var/limbs_id
  +	/// this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever
  +	var/name
  +	/// if alien colors are disabled, this is the color that will be used by that race
  +	var/default_color = "#FFF"
  +	/// whether or not the race has sexual characteristics. at the moment this is only FALSE for skeletons and shadows
  +	var/sexes = TRUE
  +
  +	///A list that contains pixel offsets for various clothing features, if your species is a different shape
   	var/list/offset_features = list(OFFSET_UNIFORM = list(0,0), OFFSET_ID = list(0,0), OFFSET_GLOVES = list(0,0), OFFSET_GLASSES = list(0,0), OFFSET_EARS = list(0,0), OFFSET_SHOES = list(0,0), OFFSET_S_STORE = list(0,0), OFFSET_FACEMASK = list(0,0), OFFSET_HEAD = list(0,0), OFFSET_FACE = list(0,0), OFFSET_BELT = list(0,0), OFFSET_BACK = list(0,0), OFFSET_SUIT = list(0,0), OFFSET_NECK = list(0,0))
   
  -	var/hair_color	// this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
  -	var/hair_alpha = 255	// the alpha used by the hair. 255 is completely solid, 0 is transparent.
  -
  -	var/use_skintones = 0	// does it use skintones or not? (spoiler alert this is only used by humans)
  -	var/exotic_blood = ""	// If your race wants to bleed something other than bog standard blood, change this to reagent id.
  -	var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc)
  -	var/meat = /obj/item/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing
  +	/// this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
  +	var/hair_color
  +	/// the alpha used by the hair. 255 is completely solid, 0 is transparent.
  +	var/hair_alpha = 255
  +
  +	/// does it use skintones or not? (spoiler alert this is only used by humans)
  +	var/use_skintones = FALSE
  +
  +	/// If your race wants to bleed something other than bog standard blood, change this to reagent id.
  +	var/exotic_blood = ""
  +	///If your race uses a non standard bloodtype (A+, O-, AB-, etc)
  +	var/exotic_bloodtype = ""
  +	///What the species drops on gibbing
  +	var/meat = /obj/item/reagent_containers/food/snacks/meat/slab/human
  +	///What, if any, leather will be dropped
   	var/skinned_type
  +	///What kind of foods the species loves
   	var/liked_food = NONE
  +	///What kind of foods the species dislikes!
   	var/disliked_food = GROSS
  +	///What kind of foods cause harm to the species
   	var/toxic_food = TOXIC
  -	var/list/no_equip = list()	// slots the race can't equip stuff to
  -	var/nojumpsuit = 0	// this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
  -	var/say_mod = "says"	// affects the speech message
  +	/// slots the race can't equip stuff to
  +	var/list/no_equip = list()
  +	/// this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
  +	var/nojumpsuit = FALSE
  +	/// affects the speech message
  +	var/say_mod = "says"
  +	///Used if you want to give your species thier own language
   	var/species_language_holder = /datum/language_holder
  -	var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have.
  -	var/list/mutant_bodyparts = list() 	// Visible CURRENT bodyparts that are unique to a species. DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK SHIT UP! Changes to this list for non-species specific bodyparts (ie cat ears and tails) should be assigned at organ level if possible. Layer hiding is handled by handle_mutant_bodyparts() below.
  -	var/list/mutant_organs = list()		//Internal organs that are unique to this race.
  -	var/speedmod = 0	// this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster
  -	var/armor = 0		// overall defense for the race... or less defense, if it's negative.
  -	var/brutemod = 1	// multiplier for brute damage
  -	var/burnmod = 1		// multiplier for burn damage
  -	var/coldmod = 1		// multiplier for cold damage
  -	var/heatmod = 1		// multiplier for heat damage
  -	var/acidmod = 1     // multiplier for acid damage // yogs - Old Plant People
  -	var/stunmod = 1		// multiplier for stun duration
  -	var/attack_type = BRUTE //Type of damage attack does
  -	var/punchdamagelow = 1       //lowest possible punch damage. if this is set to 0, punches will always miss
  -	var/punchdamagehigh = 10      //highest possible punch damage
  -	var/punchstunthreshold = 10//damage at which punches from this race will stun //yes it should be to the attacked race but it's not useful that way even if it's logical
  -	var/siemens_coeff = 1 //base electrocution coefficient
  -	var/damage_overlay_type = "human" //what kind of damage overlays (if any) appear on our species when wounded?
  -	var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"]
  -	var/inert_mutation 	= DWARFISM //special mutation that can be found in the genepool. Dont leave empty or changing species will be a headache
  -	var/deathsound //used to set the mobs deathsound on species change
  -	var/list/special_step_sounds //Sounds to override barefeet walkng
  -	var/grab_sound //Special sound for grabbing
  -	var/screamsound //yogs - audio of a species' scream
  -	var/flying_species = FALSE //is a flying species, just a check for some things
  -	var/datum/action/innate/flight/fly //the actual flying ability given to flying species
  -	var/wings_icon = "Angel" //the icon used for the wings
  -
  -	// species-only traits. Can be found in DNA.dm
  +	/// Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have.
  +	var/list/default_features = list()
  +	/// Visible CURRENT bodyparts that are unique to a species. DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK SHIT UP! Changes to this list for non-species specific bodyparts (ie cat ears and tails) should be assigned at organ level if possible. Layer hiding is handled by handle_mutant_bodyparts() below.
  +	var/list/mutant_bodyparts = list()
  +	///Internal organs that are unique to this race.
  +	var/list/mutant_organs = list()
  +	/// this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster
  +	var/speedmod = 0
  +	///overall defense for the race... or less defense, if it's negative.
  +	var/armor = 0
  +	/// multiplier for brute damage
  +	var/brutemod = 1
  +	/// multiplier for burn damage
  +	var/burnmod = 1
  +	/// multiplier for cold damage
  +	var/coldmod = 1
  +	/// multiplier for heat damage
  +	var/heatmod = 1
  +	/// multiplier for acid damage // yogs - Old Plant People
  +	var/acidmod = 1
  +	/// multiplier for stun duration
  +	var/stunmod = 1
  +	///Type of damage attack does
  +	var/attack_type = BRUTE
  +	///lowest possible punch damage. if this is set to 0, punches will always miss
  +	var/punchdamagelow = 1
  +	///highest possible punch damage
  +	var/punchdamagehigh = 10
  +	///damage at which punches from this race will stun //yes it should be to the attacked race but it's not useful that way even if it's logical
  +	var/punchstunthreshold = 10
  +	///base electrocution coefficient
  +	var/siemens_coeff = 1
  +	///what kind of damage overlays (if any) appear on our species when wounded?
  +	var/damage_overlay_type = "human"
  +	///to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"]
  +	var/fixed_mut_color = ""
  +	///special mutation that can be found in the genepool. Dont leave empty or changing species will be a headache
  +	var/inert_mutation 	= DWARFISM
  +	///used to set the mobs deathsound on species change
  +	var/deathsound
  +	///Sounds to override barefeet walkng
  +	var/list/special_step_sounds
  +	///Special sound for grabbing
  +	var/grab_sound
  +	///yogs - audio of a species' scream
  +	var/screamsound
  +	///is a flying species, just a check for some things
  +	var/flying_species = FALSE
  +	///the actual flying ability given to flying species
  +	var/datum/action/innate/flight/fly
  +	///the icon used for the wings
  +	var/wings_icon = "Angel"
  +
  +	/// species-only traits. Can be found in DNA.dm
   	var/list/species_traits = list()
  -	// generic traits tied to having the species
  +	/// generic traits tied to having the species
   	var/list/inherent_traits = list()
  +	///biotypes, used for viruses and the like
   	var/list/inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
  -
  -	var/attack_verb = "punch"	// punch-specific attack verb
  +	/// punch-specific attack verb
  +	var/attack_verb = "punch"
  +	///the melee attack sound
   	var/sound/attack_sound = 'sound/weapons/punch1.ogg'
  +	///the swing and miss sound
   	var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
   
  -	var/list/mob/living/ignored_by = list()	// list of mobs that will ignore this species
  +	/// list of mobs that will ignore this species
  +	var/list/mob/living/ignored_by = list()
   	//Breathing!
  +	///the mutant lungs, if different to the normal
   	var/obj/item/organ/lungs/mutantlungs = null
  +	///what type of gas is breathed
   	var/breathid = "o2"
   
  +	///the brain, if any
   	var/obj/item/organ/brain/mutant_brain = /obj/item/organ/brain
  +	///the heart
   	var/obj/item/organ/heart/mutant_heart = /obj/item/organ/heart
  +	///the eyes
   	var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes
  +	///the ears
   	var/obj/item/organ/ears/mutantears = /obj/item/organ/ears
  +	///the special hands, if any, for example the zombie has those claw hands
   	var/obj/item/mutanthands
  +	///the tongue, used for ssssssssssssss and other such speech impediments
   	var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue
  +	///the tail, if any
   	var/obj/item/organ/tail/mutanttail = null
   
  +	///The special liver, if any
   	var/obj/item/organ/liver/mutantliver
  +	///the special stomach, if any
   	var/obj/item/organ/stomach/mutantstomach
   	var/override_float = FALSE
   
  -	//Bitflag that controls what in game ways can select this species as a spawnable source
  -	//Think magic mirror and pride mirror, slime extract, ERT etc, see defines
  -	//in __DEFINES/mobs.dm, defaults to NONE, so people actually have to think about it
  +	///Bitflag that controls what in game ways can select this species as a spawnable source. Think magic mirror and pride mirror, slime extract, ERT etc, see defines in __DEFINES/mobs.dm, defaults to NONE, so people actually have to think about it
   	var/changesource_flags = NONE
   ///////////
   // PROCS //
  
positive.code: 		if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
  			bodyparts_to_add -= "tail_human"
  
  	if("waggingtail_human" in mutant_bodyparts)
  		if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
  			bodyparts_to_add -= "waggingtail_human"
  
negative.code: 	if("dome" in mutant_bodyparts)
  		if(!H.dna.features["dome"] || H.dna.features["dome"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC)
  			bodyparts_to_add -= "dome"
  
  	//Digitigrade legs are stuck in the phantom zone between true limbs and mutant bodyparts. Mainly it just needs more agressive updating than most limbs.
  	var/update_needed = FALSE
  