code:
/// We need those arguments
/mob/living/carbon/human/breathe(delta_time, times_fired, datum/organ_process/lung_process)
	if(!dna.species.breathe(src, delta_time, times_fired, lung_process))
		return ..()

/// Returns how often we need to breathe, basically
/mob/living/carbon/human/get_breath_modulo()
	var/breath_modulo_total
	for(var/thing in getorganslotlist(ORGAN_SLOT_LUNGS))
		var/obj/item/organ/lungs/lung = thing
		breath_modulo_total += lung.get_breath_modulo()
	if(undergoing_cardiac_arrest())
		breath_modulo_total -= 2
	if(!isnull(breath_modulo_total))
		return max(breath_modulo_total, 1)
	else
		return ..()

/// Funny alert and stuff
/mob/living/carbon/human/check_breath(datum/gas_mixture/breath, lung_efficiency, list/lungs, datum/organ_process/lung_process)
	if(lung_efficiency < lung_process.failing_threshold)
		failed_last_breath = TRUE
		update_hud_breath(failed_last_breath, lung_efficiency, lung_process.bruised_threshold, lung_process.failing_threshold)
		return FALSE

	check_breath_lungs(breath, lung_efficiency, lungs, lung_process)
	return TRUE

/mob/living/carbon/human/proc/check_breath_lungs(datum/gas_mixture/breath, lung_efficiency = 0, list/lungs, datum/organ_process/lung_process)
	if(!breath || (breath.total_moles() == 0) || (lung_efficiency <= 0) || !length(lungs))
		check_failed_breath(breath, lung_efficiency, lungs, lung_process)
		return FALSE

	var/gas_breathed = 0

	var/list/breath_gases = breath.gases

	breath.assert_gases(/datum/gas/oxygen,
						/datum/gas/plasma,
						/datum/gas/carbon_dioxide,
						/datum/gas/nitrous_oxide,
						/datum/gas/bz,
						/datum/gas/nitrogen,
						/datum/gas/tritium,
						/datum/gas/nitryl,
						/datum/gas/pluoxium,
						/datum/gas/stimulum,
						/datum/gas/freon,
						/datum/gas/hypernoblium,
						/datum/gas/healium,
						/datum/gas/proto_nitrate,
						/datum/gas/zauker,
						/datum/gas/halon
						)

	//Partial pressures in our breath
	var/O2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES]))
	var/N2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrogen][MOLES])
	var/Toxins_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/plasma][MOLES])
	var/CO2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])

	//Vars for n2o and healium induced euphorias.
	var/n2o_euphoria = EUPHORIA_LAST_FLAG
	var/healium_euphoria = EUPHORIA_LAST_FLAG

	// Get these damn variables from our lungs
	var/safe_oxygen_min = 0
	var/safe_oxygen_max = 0
	var/safe_nitro_min = 0
	var/safe_nitro_max = 0
	var/safe_co2_min = 0
	var/safe_co2_max = 0
	var/safe_plas_min = 0
	var/safe_plas_max = 0
	var/SA_para_min = 0
	var/SA_sleep_min = 0
	var/BZ_trip_balls_min = 0
	var/BZ_brain_damage_min = 0
	var/gas_stimulation_min = 0
	var/healium_para_min = 0
	var/healium_sleep_min = 0
	var/suffers_miasma = FALSE

	var/oxy_breath_dam_min = 0
	var/oxy_breath_dam_max = 0
	var/oxy_damage_type = ""
	var/nitro_breath_dam_min = 0
	var/nitro_breath_dam_max = 0
	var/nitro_damage_type = ""
	var/co2_breath_dam_min = 0
	var/co2_breath_dam_max = 0
	var/co2_damage_type = ""
	var/plas_breath_dam_min = 0
	var/plas_breath_dam_max = 0
	var/plas_damage_type = ""

	var/amount_lungs = length(lungs)

	// loopity loop
	for(var/thing in lungs)
		var/obj/item/organ/lungs/lung = thing
		// "master lung" handles these variables
		if(lungs[1] == lung)
			oxy_damage_type = lung.oxy_damage_type
			nitro_damage_type = lung.nitro_damage_type
			co2_damage_type = lung.co2_damage_type
			plas_damage_type = lung.plas_damage_type
		// these add up, but get divided by the amount of lungs later
		oxy_breath_dam_min += lung.oxy_breath_dam_min
		oxy_breath_dam_max += lung.oxy_breath_dam_max
		nitro_breath_dam_min += lung.nitro_breath_dam_min
		nitro_breath_dam_max += lung.nitro_breath_dam_max
		co2_breath_dam_min += lung.co2_breath_dam_min
		co2_breath_dam_max += lung.co2_breath_dam_max
		plas_breath_dam_min += lung.plas_breath_dam_min
		plas_breath_dam_max += lung.plas_breath_dam_max
		// these variables just add up
		safe_oxygen_min += lung.safe_oxygen_min
		safe_oxygen_max += lung.safe_oxygen_max
		safe_nitro_min += lung.safe_nitro_min
		safe_nitro_max += lung.safe_nitro_max
		safe_co2_min += lung.safe_co2_min
		safe_co2_max += lung.safe_co2_max
		safe_plas_min += lung.safe_plas_min
		safe_plas_max += lung.safe_plas_max
		SA_para_min += lung.SA_para_min
		SA_sleep_min += lung.SA_sleep_min
		BZ_trip_balls_min += lung.BZ_trip_balls_min
		BZ_brain_damage_min += lung.BZ_brain_damage_min
		gas_stimulation_min += lung.gas_stimulation_min
		healium_para_min += lung.healium_para_min
		healium_sleep_min += lung.healium_sleep_min
		if(lung.suffers_miasma)
			suffers_miasma = TRUE
		lung.handle_gas_override(src, breath_gases, gas_breathed)

	// remember these? time to divide them by the amount of lungs, to get the average
	oxy_breath_dam_min /= amount_lungs
	oxy_breath_dam_max /= amount_lungs
	nitro_breath_dam_min /= amount_lungs
	nitro_breath_dam_max /= amount_lungs
	co2_breath_dam_min /= amount_lungs
	co2_breath_dam_max /= amount_lungs
	plas_breath_dam_min /= amount_lungs
	plas_breath_dam_max /= amount_lungs

	//-- OXY --//

	//Too much oxygen! //Yes, some lungs may not like it!
	if(safe_oxygen_max)
		if(O2_pp > safe_oxygen_max)
			var/ratio = (breath_gases[/datum/gas/oxygen][MOLES]/safe_oxygen_max) * 10
			apply_damage_type(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type)

	//Too little oxygen!
	if(safe_oxygen_min)
		if(O2_pp < safe_oxygen_min)
			gas_breathed = check_too_little_breath(O2_pp, safe_oxygen_min, breath_gases[/datum/gas/oxygen][MOLES], lung_efficiency, lungs, lung_process)
		else
			failed_last_breath = FALSE
			gas_breathed = breath_gases[/datum/gas/oxygen][MOLES]

	//Exhale
	breath_gases[/datum/gas/oxygen][MOLES] -= gas_breathed
	breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
	gas_breathed = 0

	//-- Nitrogen --//

	//Too much nitrogen!
	if(safe_nitro_max)
		if(N2_pp > safe_nitro_max)
			var/ratio = (breath_gases[/datum/gas/nitrogen][MOLES]/safe_nitro_max) * 10
			apply_damage_type(clamp(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type)

	//Too little nitrogen!
	if(safe_nitro_min)
		if(N2_pp < safe_nitro_min)
			gas_breathed = check_too_little_breath(N2_pp, safe_nitro_min, breath_gases[/datum/gas/nitrogen][MOLES], lung_efficiency, lungs, lung_process)
		else
			failed_last_breath = FALSE
			gas_breathed = breath_gases[/datum/gas/nitrogen][MOLES]

	//Exhale
	breath_gases[/datum/gas/nitrogen][MOLES] -= gas_breathed
	breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
	gas_breathed = 0

	//-- CO2 --//

	//CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
	if(safe_co2_max)
		if(CO2_pp > safe_co2_max)
			if(!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so.
				co2overloadtime = world.time
			else if(world.time - co2overloadtime > 120)
				Unconscious(60)
				apply_damage_type(3, co2_damage_type) // Lets hurt em a little, let them know we mean business
				if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
					apply_damage_type(8, co2_damage_type)
			if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
				emote("cough")
		else
			co2overloadtime = 0

	//Too little CO2!
	if(safe_co2_min)
		if(CO2_pp < safe_co2_min)
			gas_breathed = check_too_little_breath(CO2_pp, safe_co2_min, breath_gases[/datum/gas/carbon_dioxide][MOLES], lung_efficiency, lungs, lung_process)
		else
			failed_last_breath = FALSE
			gas_breathed = breath_gases[/datum/gas/carbon_dioxide][MOLES]

	//Exhale
	breath_gases[/datum/gas/carbon_dioxide][MOLES] -= gas_breathed
	breath_gases[/datum/gas/oxygen][MOLES] += gas_breathed
	gas_breathed = 0

	//-- TOX --//

	//Too much plasma!
	if(safe_plas_max)
		if(Toxins_pp > safe_plas_max)
			var/ratio = (breath_gases[/datum/gas/plasma][MOLES]/safe_plas_max) * 10
			apply_damage_type(clamp(ratio, plas_breath_dam_min, plas_breath_dam_max), plas_damage_type)

	//Too little plasma!
	if(safe_plas_min)
		if(Toxins_pp < safe_plas_min)
			gas_breathed = check_too_little_breath(Toxins_pp, safe_plas_min, breath_gases[/datum/gas/plasma][MOLES], lung_efficiency, lungs, lung_process)
		else
			failed_last_breath = FALSE
			gas_breathed = breath_gases[/datum/gas/plasma][MOLES]

	//Exhale
	breath_gases[/datum/gas/plasma][MOLES] -= gas_breathed
	breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
	gas_breathed = 0

	//-- TRACES --//

	if(breath) // If there's some other shit in the air lets deal with it here.

	// N2O

		var/SA_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrous_oxide][MOLES])
		if(SA_pp > SA_para_min) // Enough to make us stunned for a bit
			Unconscious(60) // 60 gives them one second to wake up and run away a bit!
			if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
				Sleeping(min(AmountSleeping() + 100, 200))
				add_chem_effect(CE_PAINKILLER, 100, "nitrous_oxide")
		else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
			if(prob(20))
				n2o_euphoria = EUPHORIA_ACTIVE
				emote(pick("giggle", "laugh"))
			remove_chem_effect(CE_PAINKILLER, "nitrous_oxide")
		else
			remove_chem_effect(CE_PAINKILLER, "nitrous_oxide")
			n2o_euphoria = EUPHORIA_INACTIVE

	// BZ

		var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES])
		if(bz_pp > BZ_trip_balls_min)
			hallucination += 10
			reagents.add_reagent(/datum/reagent/bz_metabolites,5)
		if(bz_pp > BZ_brain_damage_min && prob(33))
			adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)

	// Tritium
		var/trit_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/tritium][MOLES])
		if (trit_pp > 50)
			radiation += trit_pp/2 //If you're breathing in half an atmosphere of radioactive gas, you fucked up.
		else
			radiation += trit_pp/10

	// Nitryl
		var/nitryl_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitryl][MOLES])
		if (prob(nitryl_pp))
			emote("burp")
		if (prob(nitryl_pp) && nitryl_pp>10)
			adjustOrganLoss(ORGAN_SLOT_LUNGS, nitryl_pp/2)
			to_chat(src, span_notice("You feel a burning sensation in your chest"))
		gas_breathed = breath_gases[/datum/gas/nitryl][MOLES]
		if (gas_breathed > gas_stimulation_min)
			reagents.add_reagent(/datum/reagent/nitryl,1)

		breath_gases[/datum/gas/nitryl][MOLES]-=gas_breathed

	// Freon
		var/freon_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/freon][MOLES])
		if (prob(freon_pp))
			to_chat(src, span_alert("Your mouth feels like it's burning!"))
		if (freon_pp >40)
			emote("gasp")
			adjustFireLoss(15)
			if (prob(freon_pp/2))
				to_chat(src, span_alert("Your throat closes up!"))
				silent = max(silent, 3)
		else
			adjustFireLoss(freon_pp/4)
		gas_breathed = breath_gases[/datum/gas/freon][MOLES]
		if (gas_breathed > gas_stimulation_min)
			reagents.add_reagent(/datum/reagent/freon,1)

		breath_gases[/datum/gas/freon][MOLES]-=gas_breathed

	// Healium
		var/healium_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/healium][MOLES])
		if(healium_pp > gas_stimulation_min)
			if(prob(15))
				to_chat(src, span_alert("Your head starts spinning and your lungs burn!"))
				healium_euphoria = EUPHORIA_ACTIVE
				emote("gasp")
		else
			healium_euphoria = EUPHORIA_INACTIVE

		if(healium_pp > healium_para_min)
			Unconscious(rand(30, 50))//not in seconds to have a much higher variation
			if(healium_pp > healium_sleep_min)
				var/existing = reagents.get_reagent_amount(/datum/reagent/healium)
				reagents.add_reagent(/datum/reagent/healium,max(0, 1 - existing))
		gas_breathed = breath_gases[/datum/gas/healium][MOLES]
		breath_gases[/datum/gas/healium][MOLES]-=gas_breathed

	// Proto Nitrate
		// Inert
	// Zauker
		var/zauker_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/zauker][MOLES])
		if(zauker_pp > gas_stimulation_min)
			adjustBruteLoss(25)
			adjustOxyLoss(5)
			adjustFireLoss(8)
			adjustToxLoss(8)
		gas_breathed = breath_gases[/datum/gas/zauker][MOLES]
		breath_gases[/datum/gas/zauker][MOLES]-=gas_breathed

	// Halon
		var/halon_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/halon][MOLES])
		if(halon_pp > gas_stimulation_min)
			adjustOxyLoss(5)
			var/existing = reagents.get_reagent_amount(/datum/reagent/halon)
			reagents.add_reagent(/datum/reagent/halon,max(0, 1 - existing))
		gas_breathed = breath_gases[/datum/gas/halon][MOLES]
		breath_gases[/datum/gas/halon][MOLES]-=gas_breathed

	// Stimulum
		gas_breathed = breath_gases[/datum/gas/stimulum][MOLES]
		if (gas_breathed > gas_stimulation_min)
			var/existing = reagents.get_reagent_amount(/datum/reagent/stimulum)
			reagents.add_reagent(/datum/reagent/stimulum,max(0, 1 - existing))
		breath_gases[/datum/gas/stimulum][MOLES]-=gas_breathed

	// Hyper-Nob
		gas_breathed = breath_gases[/datum/gas/hypernoblium][MOLES]
		if (gas_breathed > gas_stimulation_min)
			var/existing = reagents.get_reagent_amount(/datum/reagent/hypernoblium)
			reagents.add_reagent(/datum/reagent/hypernoblium,max(0, 1 - existing))
		breath_gases[/datum/gas/hypernoblium][MOLES]-=gas_breathed

	// Miasma
		if (breath_gases[/datum/gas/miasma] && suffers_miasma)
			var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma][MOLES])

			//Miasma sickness
			if(prob(0.5 * miasma_pp))
				var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(min(round(max(miasma_pp/2, 1), 1), 6), min(round(max(miasma_pp, 1), 1), 8))
				//tl;dr the first argument chooses the smaller of miasma_pp/2 or 6(typical max virus symptoms), the second chooses the smaller of miasma_pp or 8(max virus symptom level) //
				miasma_disease.name = "Unknown"//^each argument has a minimum of 1 and rounds to the nearest value. Feel free to change the pp scaling I couldn't decide on good numbers for it.
				miasma_disease.try_infect(src)

			// Miasma side effects
			switch(miasma_pp)
				if(0.25 to 5)
					// At lower pp, give out a little warning
					SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")
					if(prob(5))
						to_chat(src, span_notice("There is an unpleasant smell in the air."))
				if(5 to 15)
					//At somewhat higher pp, warning becomes more obvious
					if(prob(15))
						to_chat(src, span_warning("You smell something horribly decayed inside this room."))
						SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/bad_smell)
				if(15 to 30)
					//Small chance to vomit. By now, people have internals on anyway
					if(prob(5))
						to_chat(src, span_warning("The stench of rotting carcasses is unbearable!"))
						SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
						vomit()
				if(30 to INFINITY)
					//Higher chance to vomit. Let the horror start
					if(prob(15))
						to_chat(src, span_warning("The stench of rotting carcasses is unbearable!"))
						SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
						vomit()
				else
					SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")

			// In a full miasma atmosphere with 101.34 pKa, about 10 disgust per breath, is pretty low compared to threshholds
			// Then again, this is a purely hypothetical scenario and hardly reachable
			adjust_disgust(0.1 * miasma_pp)

			breath_gases[/datum/gas/miasma][MOLES]-=gas_breathed

		// Clear out moods when no miasma at all
		else
			SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")

		if (n2o_euphoria == EUPHORIA_ACTIVE || healium_euphoria == EUPHORIA_ACTIVE)
			SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "chemical_euphoria", /datum/mood_event/chemical_euphoria)
		else if (n2o_euphoria == EUPHORIA_INACTIVE && healium_euphoria == EUPHORIA_INACTIVE)
			SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria")
		// Activate mood on first flag, remove on second, do nothing on third.
		if(!failed_last_breath)
			adjustOxyLoss(-5)
			update_hud_breath(failed_last_breath, lung_efficiency, lung_process.bruised_threshold, lung_process.failing_threshold)

		check_breath_temperature(breath, lung_efficiency, lungs, lung_process)
		breath.garbage_collect()

	return TRUE

/mob/living/carbon/human/proc/check_too_little_breath(breath_pp = 0, safe_breath_min = 0, true_pp = 0, lung_efficiency = 100, list/lungs, datum/organ_process/lung_process)
	. = 0
	if(!safe_breath_min) //the other args are either: Ok being 0 or Specifically handled.
		return FALSE
	if(prob(20))
		agony_gasp()

	if(breath_pp > 0)
		var/ratio = safe_breath_min/breath_pp
		adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!
		. = true_pp*ratio/6
	else
		adjustOxyLoss(HUMAN_MAX_OXYLOSS)
	failed_last_breath = TRUE
	update_hud_breath(failed_last_breath, lung_efficiency, lung_process.bruised_threshold, lung_process.failing_threshold)

/mob/living/carbon/human/check_failed_breath(datum/gas_mixture/breath, lung_efficiency = 0, list/lungs, datum/organ_process/lung_process)
	for(var/thing in lungs)
		var/obj/item/organ/lungs/lung = thing
		if(reagents.has_reagent(lung.crit_stabilizing_reagent, needs_metabolizing = TRUE))
			return FALSE
	if(prob(20))
		agony_gasp()

	failed_last_breath = TRUE
	update_hud_breath(failed_last_breath, lung_efficiency, lung_process.bruised_threshold, lung_process.failing_threshold)

/mob/living/carbon/human/check_breath_temperature(datum/gas_mixture/breath, lung_efficiency = 0, list/lungs, datum/organ_process/lung_process)
	var/obj/item/organ/lungs/lung = LAZYACCESS(lungs, 1)
	if(!lung)
		return

	var/breath_temperature = breath.temperature
	var/cold_message = lung.cold_message
	var/cold_level_1_threshold = lung.cold_level_1_threshold
	var/cold_level_2_threshold = lung.cold_level_2_threshold
	var/cold_level_3_threshold = lung.cold_level_3_threshold
	var/cold_level_1_damage = lung.cold_level_1_damage
	var/cold_level_2_damage = lung.cold_level_2_damage
	var/cold_level_3_damage = lung.cold_level_3_damage
	var/cold_damage_type = lung.cold_damage_type
	var/hot_message = lung.hot_message
	var/heat_level_1_threshold = lung.heat_level_1_threshold
	var/heat_level_2_threshold = lung.heat_level_2_threshold
	var/heat_level_3_threshold = lung.heat_level_3_threshold
	var/heat_level_1_damage = lung.heat_level_1_damage
	var/heat_level_2_damage = lung.heat_level_2_damage
	var/heat_level_3_damage = lung.heat_level_3_damage
	var/heat_damage_type = lung.heat_damage_type
	// COLD DAMAGE
	if(!HAS_TRAIT(src, TRAIT_RESISTCOLD))
		var/cold_modifier = dna.species.coldmod
		if(breath_temperature < cold_level_3_threshold)
			apply_damage(cold_level_3_damage*cold_modifier, cold_damage_type, check_zone(BODY_ZONE_PRECISE_FACE))
		if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold)
			apply_damage(cold_level_2_damage*cold_modifier, cold_damage_type, check_zone(BODY_ZONE_PRECISE_FACE))
			lung.applyOrganDamage(heat_level_1_damage)
		if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold)
			apply_damage(cold_level_1_damage*cold_modifier, cold_damage_type, check_zone(BODY_ZONE_PRECISE_FACE))
			lung.applyOrganDamage(heat_level_2_damage)
		if((breath_temperature < cold_level_1_threshold) && prob(20))
			to_chat(src, span_warning("I feel [cold_message] in my [lung]!"))
	// HEAT DAMAGE
	if(!HAS_TRAIT(src, TRAIT_RESISTHEAT))
		var/heat_modifier = dna.species.heatmod
		if(breath_temperature >= heat_level_1_threshold && breath_temperature < heat_level_2_threshold)
			apply_damage(heat_level_1_damage*heat_modifier, heat_damage_type, check_zone(BODY_ZONE_PRECISE_FACE))
		if(breath_temperature >= heat_level_2_threshold && breath_temperature < heat_level_3_threshold)
			apply_damage(heat_level_2_damage*heat_modifier, heat_damage_type, check_zone(BODY_ZONE_PRECISE_FACE))
			lung.applyOrganDamage(heat_level_1_damage)
		if(breath_temperature >= heat_level_3_threshold)
			apply_damage(heat_level_3_damage*heat_modifier, heat_damage_type, check_zone(BODY_ZONE_PRECISE_FACE))
			lung.applyOrganDamage(heat_level_2_damage)
		if((breath_temperature >= heat_level_1_threshold) && prob(20))
			to_chat(src, span_warning("I feel [hot_message] in my [lung]!"))

	// The air you breathe out should match your body temperature
	breath.temperature = bodytemperature


code:
/mob/living/carbon/human/death(gibbed)
	. = ..()
	if(!QDELETED(src))
		update_hud_breath()

/mob/living/carbon/human/revive(full_heal, admin_revive, excess_healing)
	. = ..()
	update_hud_breath()
	if(.)
		if(dna?.species)
			dna.species.spec_revival(src)

repo_name: AnalWerewolf/sundown

license: mit


code:
/mob/living/carbon/human/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers)
	if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED))
		if(src == attack_target)
			check_self_for_injuries()
		return

	if(LAZYACCESS(modifiers, MIDDLE_CLICK))
		switch(special_attack)
			if(SPECIAL_ATK_BITE)
				UnarmedJaw(attack_target, proximity_flag, modifiers)
			if(SPECIAL_ATK_KICK)
				UnarmedFoot(attack_target, proximity_flag, modifiers)
	else
		UnarmedHand(attack_target, proximity_flag, modifiers)

/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user)
	if(!I || !user)
		return FALSE

	var/obj/item/bodypart/affecting
	if(user == src)
		affecting = get_bodypart(check_zone(user.zone_selected)) //stabbing yourself always hits the right target
	else
		affecting = get_bodypart(check_zone(user.zone_selected))
		var/hit_modifier = 0
		var/hit_zone_modifier = 0
		if(affecting)
			hit_modifier = affecting.hit_modifier
			hit_zone_modifier = affecting.hit_zone_modifier
			//very hard to miss when hidden by fov
			if(!(src in fov_viewers(2, user)))
				hit_modifier += 4
				hit_zone_modifier += 4
			//easy to kick people when they are down
			if(body_position == LYING_DOWN)
				hit_modifier += 6
				hit_zone_modifier += 6
		var/diceroll = DICE_FAILURE
		var/skill_modifier = 0
		var/attributes_used = 0
		if(I.stat_melee)
			skill_modifier += GET_MOB_ATTRIBUTE_VALUE(user, I.stat_melee)
			attributes_used += 1
		if(I.skill_melee)
			skill_modifier += GET_MOB_ATTRIBUTE_VALUE(user, I.skill_melee)
			attributes_used += 1
		if(I.specialty_melee)
			skill_modifier += GET_MOB_ATTRIBUTE_VALUE(user, I.specialty_melee)
		if(user.diceroll(skill_modifier+hit_modifier, 10*attributes_used, attributes_used, 20*attributes_used) <= DICE_FAILURE)
			affecting = null
		else
			diceroll = user.diceroll(skill_modifier+hit_zone_modifier, 10*attributes_used, attributes_used, 20*attributes_used)
			if(diceroll <= DICE_FAILURE)
				affecting = get_bodypart(ran_zone(user.zone_selected, 0))
			else
				affecting = get_bodypart(check_zone(user.zone_selected))
	var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target

	SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting)

	SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[I.force]", "[I.type]"))
	SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area)

	//No bodypart? That means we missed
	if(!affecting)
		var/attack_message = "attack"
		if(LAZYLEN(I.attack_verb_simple))
			attack_message = pick(I.attack_verb_simple)
		visible_message(span_danger("[user] tries to [attack_message] [src]'s [target_area] with [I], but misses!"), \
			span_userdanger("[user] tries to [attack_message] my [target_area] with [I], but misses!"), \
			span_hear("I hear a swoosh!"), \
			vision_distance = COMBAT_MESSAGE_RANGE, \
			ignored_mobs = user)
		if(user != src)
			to_chat(user, span_userdanger("I try to [attack_message] [src]'s [target_area] with my [I], but miss!"))
		playsound(user, 'modular_septic/sound/effects/punchmiss.ogg', I.get_clamped_volume(), extrarange = I.stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0)
		return FALSE

	if(!(I.item_flags & NOBLUDGEON))
		playsound(user, I.hitsound, I.get_clamped_volume(), TRUE, extrarange = I.stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0)
	else
		playsound(user, 'sound/weapons/tap.ogg', I.get_clamped_volume(), TRUE, -1)
	// the attacked_by code varies among species
	return dna.species.spec_attacked_by(I, user, affecting, src)

/mob/living/carbon/human/check_shields(atom/AM, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0)
	var/block_chance_modifier = FLOOR(damage / -3, 1)
	var/attribute_multiplier = 1
	if(attributes)
		//attribute scaling
		attribute_multiplier *= (GET_MOB_ATTRIBUTE_VALUE(src, SKILL_MELEE)+GET_MOB_ATTRIBUTE_VALUE(src, STAT_INTELLIGENCE))/(SKILL_MIDDLING+ATTRIBUTE_MIDDLING)
	for(var/obj/item/held_item in held_items)
		if(!istype(held_item, /obj/item/clothing))
			//So armour piercing blades can still be parried by other armor piercing blades, for example
			var/final_block_chance = held_item.block_chance - (clamp((armour_penetration-held_item.armour_penetration)/2,0,100)) + block_chance_modifier
			final_block_chance *= attribute_multiplier
			final_block_chance = CEILING(final_block_chance, 1)
			if(held_item.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
				return TRUE
	if(wear_suit)
		var/final_block_chance = wear_suit.block_chance - (clamp((armour_penetration-wear_suit.armour_penetration)/2,0,100)) + block_chance_modifier
		if(wear_suit.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
			return TRUE
	if(w_uniform)
		var/final_block_chance = w_uniform.block_chance - (clamp((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier
		if(w_uniform.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
			return TRUE
	if(wear_neck)
		var/final_block_chance = wear_neck.block_chance - (clamp((armour_penetration-wear_neck.armour_penetration)/2,0,100)) + block_chance_modifier
		if(wear_neck.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
			return TRUE
	if(head)
		var/final_block_chance = head.block_chance - (clamp((armour_penetration-head.armour_penetration)/2,0,100)) + block_chance_modifier
		if(head.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
			return TRUE
	return FALSE

/mob/living/carbon/human/do_cpr(mob/living/carbon/target, cpr_type = CPR_CHEST)
	if(target == src)
		return

	CHECK_DNA_AND_SPECIES(target)

	var/obj/item/bodypart/mouth/jaw = target.get_bodypart_nostump(BODY_ZONE_PRECISE_MOUTH)
	var/obj/item/bodypart/chest/chest = target.get_bodypart(BODY_ZONE_CHEST)
	var/medical_skill = GET_MOB_ATTRIBUTE_VALUE(src, SKILL_MEDICINE)
	switch(cpr_type)
		if(CPR_CHEST)
			if(chest?.is_robotic_limb())
				medical_skill = GET_MOB_ATTRIBUTE_VALUE(src, SKILL_ELECTRONICS)
		if(CPR_MOUTH)
			if(jaw?.is_robotic_limb())
				medical_skill = GET_MOB_ATTRIBUTE_VALUE(src, SKILL_ELECTRONICS)

	if(DOING_INTERACTION_WITH_TARGET(src, target))
		return FALSE

	switch(cpr_type)
		if(CPR_MOUTH)
			if(is_mouth_covered())
				to_chat(src, span_warning("I need to remove my mask first!"))
				return FALSE

			if(target.is_mouth_covered())
				to_chat(src, span_warning("I need to remove [p_their()] mask first!"))
				return FALSE

			if(!jaw)
				to_chat(src, span_warning("I have no mouth!"))
				return FALSE

			if(HAS_TRAIT(src, TRAIT_NOBREATH))
				to_chat(src, span_warning("I can't breathe!"))
				return FALSE

			if(!getorganslot(ORGAN_SLOT_LUNGS))
				to_chat(src, span_warning("I have no lungs!"))
				return FALSE

			if(world.time >= target.last_mtom + M2M_COOLDOWN)
				var/they_breathe = !HAS_TRAIT(target, TRAIT_NOBREATH)
				var/obj/item/organ/lungs/they_lung = target.getorganslot(ORGAN_SLOT_LUNGS)
				visible_message(span_notice("[src] performs mouth to mouth on [target]!"), \
								span_notice("I perform mouth to mouth on [target]."),
								span_hear("I hear loud breathing."),
								vision_distance = COMBAT_MESSAGE_RANGE,
								ignored_mobs = target)
				if(target.stat >= DEAD || target.undergoing_cardiac_arrest())
					SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "saved_life", /datum/mood_event/saved_life)
				target.last_mtom = world.time
				log_combat(src, target, "M2Med")
				if(they_breathe && they_lung)
					var/epinephrine_mod = 0
					if(target.reagents?.get_reagent_amount(/datum/reagent/medicine/epinephrine) >= 1)
						epinephrine_mod += 5
					target.adjustOxyLoss(-(medical_skill + epinephrine_mod))
					target.updatehealth()
					to_chat(target, span_unconscious("I feel a breath of fresh air enter my lungs... It feels good..."))
				else if(they_breathe && !they_lung)
					to_chat(target, span_unconscious("I feel a breath of fresh air... But i don't feel any better..."))
				else
					to_chat(target, span_unconscious("I feel a breath of fresh air... Which is a sensation i don't recognise..."))
		if(CPR_CHEST)
			var/mob/living/carbon/human/humie = target
			if(istype(humie))
				var/obj/item/clothing/suit = humie.wear_suit
				var/obj/item/clothing/under = humie.w_uniform
				if(istype(under) && CHECK_BITFIELD(under.clothing_flags, THICKMATERIAL))
					to_chat(src, span_warning("I need to take [humie.p_their()] [under] off!"))
					return
				else if(istype(suit) && CHECK_BITFIELD(suit.clothing_flags, THICKMATERIAL))
					to_chat(src, span_warning("I need to take [humie.p_their()] [suit] off!"))
					return

			if(world.time >= target.last_cpr + CPR_COOLDOWN)
				var/they_beat = !HAS_TRAIT(target, TRAIT_STABLEHEART)
				var/obj/item/organ/heart/they_heart = target.getorganslot(ORGAN_SLOT_HEART)
				var/heart_exposed_mod = 0
				if(CHECK_MULTIPLE_BITFIELDS(chest.how_open(), SURGERY_INCISED|SURGERY_RETRACTED|SURGERY_BROKEN) && istype(they_heart))
					heart_exposed_mod += 6
					visible_message(span_notice("[src] massages [target]'s [they_heart]!"), \
								span_notice("I massage [target]'s [they_heart]."), \
								vision_distance = COMBAT_MESSAGE_RANGE, \
								ignored_mobs = target)
				else
					visible_message(span_notice("[src] performs CPR on [target]!"), \
								span_notice("I perform CPR on [target]."), \
								vision_distance = COMBAT_MESSAGE_RANGE, \
								ignored_mobs = target)
				if(target.stat >= DEAD || target.undergoing_cardiac_arrest())
					SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "saved_lif", /datum/mood_event/saved_life)
				target.last_cpr = world.time
				log_combat(src, target, "CPRed")
				if(they_beat && they_heart)
					to_chat(target, span_unconscious("I feel my heart being pumped..."))
				else if(they_beat && !they_heart)
					to_chat(target, span_unconscious("I feel my chest being pumped... But i don't feel any better..."))
				else
					to_chat(target, span_unconscious("I feel my chest being pushed on..."))
				var/epinephrine_mod = 0
				if(target.reagents?.get_reagent_amount(/datum/reagent/medicine/epinephrine) >= 1)
					epinephrine_mod +=  4

				var/diceroll = diceroll(medical_skill+heart_exposed_mod+epinephrine_mod)
				if((diceroll >= DICE_SUCCESS) || !attributes)
					if(prob(35) || (diceroll >= DICE_CRIT_SUCCESS))
						target?.pump_heart(src)
						target.set_heartattack(FALSE)
						if(GETBRAINLOSS(target) >= 100)
							SETBRAINLOSS(target, 99)
						if(target.revive())
							target.grab_ghost(TRUE)
							target.visible_message(span_warning("[target] limply spasms their muscles."), \
											span_userdanger("My muscles spasm as i am brought back to life!"))
				else
					if(diceroll <= DICE_CRIT_FAILURE)
						var/obj/item/organ/bone/ribs = chest.getorganslot(ORGAN_SLOT_BONE)
						if(ribs)
							if(!ribs.dislocate() && !ribs.fracture())
								ribs.compound_fracture()
							visible_message(span_danger("[src] botches the CPR, cracking [target]'s [ribs]!"), \
										span_danger("I botch the CPR, cracking [target]'s [ribs]!"),
										span_hear("I hear a loud crack!"),
										ignored_mobs = target)
							to_chat(target, span_userdanger("[src] botches the CPR and cracks my [ribs]!"))
							SEND_SIGNAL(target, COMSIG_CARBON_CLEAR_WOUND_MESSAGE)

/mob/living/carbon/human/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone)
	if(damage_type != BRUTE && damage_type != BURN)
		return

	damage_amount *= 0.5 //0.5 multiplier for balance reason, we don't want clothes to be too easily destroyed
	var/list/torn_items = list()

	//HEAD//
	if(!def_zone || (def_zone in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_FACE, BODY_ZONE_PRECISE_MOUTH)))
		var/obj/item/clothing/head_clothes = null
		if(wear_neck && (wear_neck.body_parts_covered & HEAD))
			head_clothes = wear_neck
		if(wear_mask && (wear_mask.body_parts_covered & HEAD))
			head_clothes = wear_mask
		if(head && (head.body_parts_covered & HEAD))
			head_clothes = head
		if(head_clothes)
			torn_items |= head_clothes
		else if(ears && (ears.body_parts_covered & HEAD))
			torn_items |= ears

	//NECK//
	if(!def_zone || (def_zone == BODY_ZONE_PRECISE_NECK))
		if(wear_neck && (wear_neck.body_parts_covered & NECK))
			torn_items |= wear_neck

	//EYES//
	if(!def_zone || (def_zone in list(BODY_ZONE_PRECISE_R_EYE, BODY_ZONE_PRECISE_L_EYE)))
		if(wear_mask && (wear_mask.body_parts_covered & EYES))
			torn_items |= wear_mask
		else if(glasses)
			torn_items |= glasses

	//CHEST//
	if(!def_zone || (def_zone == BODY_ZONE_CHEST))
		var/obj/item/clothing/chest_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & CHEST))
			chest_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & CHEST))
			chest_clothes = wear_suit
		if(chest_clothes)
			torn_items |= chest_clothes

	//GROIN//
	if(!def_zone || (def_zone == BODY_ZONE_PRECISE_GROIN))
		var/obj/item/clothing/groin_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & GROIN))
			groin_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & GROIN))
			groin_clothes = wear_suit
		if(groin_clothes)
			torn_items |= groin_clothes

	//ARMS//
	if(!def_zone || (def_zone in list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM)))
		var/obj/item/clothing/arm_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & ARMS))
			arm_clothes = w_uniform
		if(gloves && (gloves.body_parts_covered & ARMS))
			arm_clothes = gloves
		if(wear_suit && (wear_suit.body_parts_covered & ARMS))
			arm_clothes = wear_suit
		if(arm_clothes)
			torn_items |= arm_clothes

	//HANDS//
	if(!def_zone || (def_zone in list(BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_PRECISE_L_HAND)))
		var/obj/item/clothing/hand_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & HANDS))
			hand_clothes = w_uniform
		if(gloves && (gloves.body_parts_covered & HANDS))
			hand_clothes = gloves
		if(wear_suit && (wear_suit.body_parts_covered & HANDS))
			hand_clothes = wear_suit
		if(hand_clothes)
			torn_items |= hand_clothes

	//LEGS//
	if(!def_zone || (def_zone in list(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)))
		var/obj/item/clothing/leg_clothes = null
		if(shoes && (shoes.body_parts_covered & LEGS))
			leg_clothes = shoes
		if(w_uniform && (w_uniform.body_parts_covered & LEGS))
			leg_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & LEGS))
			leg_clothes = wear_suit
		if(leg_clothes)
			torn_items |= leg_clothes

	//FEET//
	if(!def_zone || (def_zone in list(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)))
		var/obj/item/clothing/feet_clothes = null
		if(shoes && (shoes.body_parts_covered & FEET))
			feet_clothes = shoes
		if(w_uniform && (w_uniform.body_parts_covered & FEET))
			feet_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & FEET))
			feet_clothes = wear_suit
		if(feet_clothes)
			torn_items |= feet_clothes

	for(var/thing in torn_items)
		var/obj/item/item = thing
		item.take_damage(damage_amount, damage_type, damage_flag, 0)

/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) //todo: update this to utilize check_obscured_slots() //and make sure it's check_obscured_slots(TRUE) to stop aciding through visors etc
	var/list/damaged_bodyparts = list()
	var/list/inventory_items_to_kill = list()
	var/acidity = acidpwr * min(acid_volume*0.005, 0.1)

	//HEAD//
	if(!bodyzone_hit || (bodyzone_hit in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_FACE, BODY_ZONE_PRECISE_MOUTH)))
		var/obj/item/clothing/head_clothes = null
		if(wear_neck && (wear_neck.body_parts_covered & HEAD))
			head_clothes = wear_neck
		if(wear_mask && (wear_mask.body_parts_covered & HEAD))
			head_clothes = wear_mask
		if(head && (head.body_parts_covered & HEAD))
			head_clothes = head
		if(head_clothes)
			inventory_items_to_kill |= head_clothes
		else
			var/obj/item/bodypart/shoeonhead = get_bodypart(BODY_ZONE_PRECISE_FACE)
			if(!shoeonhead)
				shoeonhead = get_bodypart(BODY_ZONE_HEAD)
			if(shoeonhead)
				damaged_bodyparts |= shoeonhead
			if(ears && (ears.body_parts_covered & HEAD))
				inventory_items_to_kill |= ears

	//NECK//
	if(!bodyzone_hit || (bodyzone_hit == BODY_ZONE_PRECISE_NECK))
		if(wear_neck && (wear_neck.body_parts_covered & NECK))
			inventory_items_to_kill |= wear_neck
		else
			var/obj/item/bodypart/shoeonneck = get_bodypart(BODY_ZONE_PRECISE_NECK)
			if(shoeonneck)
				damaged_bodyparts |= shoeonneck

	//EYES//
	if(!bodyzone_hit || (bodyzone_hit in list(BODY_ZONE_PRECISE_R_EYE, BODY_ZONE_PRECISE_L_EYE)))
		if(wear_mask && (wear_mask.body_parts_covered & EYES))
			inventory_items_to_kill |= wear_mask
		else if(glasses)
			inventory_items_to_kill |= glasses
		else
			var/obj/item/bodypart/sightless = get_bodypart(BODY_ZONE_PRECISE_R_EYE)
			if(sightless)
				damaged_bodyparts |= sightless
			sightless = get_bodypart(BODY_ZONE_PRECISE_L_EYE)
			if(sightless)
				damaged_bodyparts |= sightless

	//CHEST//
	if(!bodyzone_hit || (bodyzone_hit == BODY_ZONE_CHEST))
		var/obj/item/clothing/chest_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & CHEST))
			chest_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & CHEST))
			chest_clothes = wear_suit
		if(chest_clothes)
			inventory_items_to_kill |= chest_clothes
		else
			var/obj/item/bodypart/chest = get_bodypart(BODY_ZONE_CHEST)
			if(chest)
				damaged_bodyparts |= chest

	//GROIN//
	if(!bodyzone_hit || (bodyzone_hit == BODY_ZONE_PRECISE_GROIN))
		var/obj/item/clothing/groin_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & GROIN))
			groin_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & GROIN))
			groin_clothes = wear_suit
		if(groin_clothes)
			inventory_items_to_kill |= groin_clothes
		else
			var/obj/item/bodypart/groin = get_bodypart(BODY_ZONE_PRECISE_GROIN)
			if(groin)
				damaged_bodyparts |= groin

	//ARMS//
	if(!bodyzone_hit || (bodyzone_hit in list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM)))
		var/obj/item/clothing/arm_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & ARMS))
			arm_clothes = w_uniform
		if(gloves && (gloves.body_parts_covered & ARMS))
			arm_clothes = gloves
		if(wear_suit && (wear_suit.body_parts_covered & ARMS))
			arm_clothes = wear_suit
		if(arm_clothes)
			inventory_items_to_kill |= arm_clothes
		else
			var/obj/item/bodypart/arm = get_bodypart(BODY_ZONE_R_ARM)
			if(arm)
				damaged_bodyparts |= arm
			arm = get_bodypart(BODY_ZONE_L_ARM)
			if(arm)
				damaged_bodyparts |= arm

	//HANDS//
	if(!bodyzone_hit || (bodyzone_hit in list(BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_PRECISE_L_HAND)))
		var/obj/item/clothing/hand_clothes = null
		if(w_uniform && (w_uniform.body_parts_covered & HANDS))
			hand_clothes = w_uniform
		if(gloves && (gloves.body_parts_covered & HANDS))
			hand_clothes = gloves
		if(wear_suit && (wear_suit.body_parts_covered & HANDS))
			hand_clothes = wear_suit
		if(hand_clothes)
			inventory_items_to_kill |= hand_clothes
		else
			var/obj/item/bodypart/hand = get_bodypart(BODY_ZONE_PRECISE_R_HAND)
			if(hand)
				damaged_bodyparts |= hand
			hand = get_bodypart(BODY_ZONE_PRECISE_L_HAND)
			if(hand)
				damaged_bodyparts |= hand

	//LEGS//
	if(!bodyzone_hit || (bodyzone_hit in list(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)))
		var/obj/item/clothing/leg_clothes = null
		if(shoes && (shoes.body_parts_covered & LEGS))
			leg_clothes = shoes
		if(w_uniform && (w_uniform.body_parts_covered & LEGS))
			leg_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & LEGS))
			leg_clothes = wear_suit
		if(leg_clothes)
			inventory_items_to_kill |= leg_clothes
		else
			var/obj/item/bodypart/leg = get_bodypart(BODY_ZONE_R_LEG)
			if(leg)
				damaged_bodyparts |= leg
			leg = get_bodypart(BODY_ZONE_L_LEG)
			if(leg)
				damaged_bodyparts |= leg

	//FEET//
	if(!bodyzone_hit || (bodyzone_hit in list(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)))
		var/obj/item/clothing/feet_clothes = null
		if(shoes && (shoes.body_parts_covered & FEET))
			feet_clothes = shoes
		if(w_uniform && (w_uniform.body_parts_covered & FEET))
			feet_clothes = w_uniform
		if(wear_suit && (wear_suit.body_parts_covered & FEET))
			feet_clothes = wear_suit
		if(feet_clothes)
			inventory_items_to_kill |= feet_clothes
		else
			var/obj/item/bodypart/foot = get_bodypart(BODY_ZONE_PRECISE_R_EYE)
			if(foot)
				damaged_bodyparts |= foot
			foot = get_bodypart(BODY_ZONE_PRECISE_L_FOOT)
			if(foot)
				damaged_bodyparts |= foot

	//DAMAGE//
	for(var/obj/item/bodypart/affecting as anything in damaged_bodyparts)
		affecting.receive_damage(burn = 2*acidity)
		if(affecting.body_zone in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH))
			if(prob(min(acidpwr*acid_volume/10, 90))) //Applies disfigurement
				affecting.receive_damage(burn = 2*acidity)
				death_scream()
				facial_hairstyle = "Shaved"
				hairstyle = "Bald"
				update_hair()
				ADD_TRAIT(src, TRAIT_DISFIGURED, ACID)

		update_damage_overlays()

	//MELTING INVENTORY ITEMS//
	//these items are all outside of armour visually, so melt regardless.
	if(!bodyzone_hit)
		if(back)
			inventory_items_to_kill |= back
		if(belt)
			inventory_items_to_kill |= belt

		for(var/thing in held_items)
			if(!thing)
				continue
			inventory_items_to_kill |= held_items
	for(var/obj/item/inventory_item in inventory_items_to_kill)
		inventory_item.acid_act(acidpwr, acid_volume)
	return TRUE

/mob/living/carbon/human/attack_hand(mob/user, list/modifiers)
	. = ..()
	if(.) //to allow surgery to return properly.
		return
	if(ishuman(user))
		var/mob/living/carbon/human/H = user
		dna.species.spec_attack_hand(H, src, null, modifiers)

/mob/living/carbon/human/attack_foot(mob/user, list/modifiers)
	. = ..()
	if(.) //to allow surgery to return properly.
		return
	if(ishuman(user))
		var/mob/living/carbon/human/H = user
		dna.species.spec_attack_foot(H, src, null, modifiers)

/mob/living/carbon/human/attack_jaw(mob/user, list/modifiers)
	. = ..()
	if(.) //to allow surgery to return properly.
		return
	if(ishuman(user))
		var/mob/living/carbon/human/H = user
		dna.species.spec_attack_jaw(H, src, null, modifiers)

/mob/living/carbon/human/UnarmedHand(atom/attack_target, proximity_flag, list/modifiers)
	var/obj/item/bodypart/check_hand = get_active_hand()
	if(!check_hand)
		to_chat(src, span_notice("I look at my phantom hand and sigh."))
		return
	else if(check_hand?.bodypart_disabled)
		to_chat(src, span_warning("My [check_hand.name] is in no condition to be used."))
		return
	else if(proximity_flag)
		for(var/thing in check_hand.getorganslot(ORGAN_SLOT_BONE))
			var/obj/item/organ/bone/bone = thing
			if(bone.attack_with_hurt_hand(src, check_hand, attack_target) & COMPONENT_CANCEL_ATTACK_CHAIN)
				return

	// Special glove functions:
	// If the gloves do anything, have them return 1 to stop
	// normal attack_hand() here.
	var/obj/item/clothing/gloves/our_gloves = gloves // not typecast specifically enough in defines
	if(proximity_flag && istype(our_gloves) && our_gloves.Touch(attack_target, proximity_flag, modifiers))
		return

	//This signal is needed to prevent gloves of the north star + hulk.
	if(SEND_SIGNAL(src, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, attack_target, proximity_flag, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN)
		return
	SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, attack_target, proximity_flag, modifiers)
	if(dna?.species?.spec_unarmedattack(src, attack_target, modifiers)) //Because species like monkeys dont use attack hand
		return

	if(!right_click_attack_chain(attack_target, modifiers))
		attack_target.attack_hand(src, modifiers)

/mob/living/carbon/human/UnarmedFoot(atom/attack_target, proximity_flag, list/modifiers)
	var/obj/item/bodypart/check_foot = get_active_foot()
	if(!check_foot)
		to_chat(src, span_notice("I look at my phantom foot and sigh."))
		return
	else if(check_foot?.bodypart_disabled)
		to_chat(src, span_warning("My [check_foot.name] is in no condition to be used."))
		return
	else if(attack_target == src)
		to_chat(src, span_warning("I can't kick myself."))
		return
	else if(proximity_flag)
		for(var/thing in check_foot.getorganslot(ORGAN_SLOT_BONE))
			var/obj/item/organ/bone/bone = thing
			if(bone.attack_with_hurt_foot(src, check_foot, attack_target) & COMPONENT_CANCEL_ATTACK_CHAIN)
				return

	//This signal is needed to prevent gloves of the north star + hulk
	if(SEND_SIGNAL(src, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, attack_target, proximity_flag, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN)
		return
	SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, attack_target, proximity_flag, modifiers)
	//Because species like monkeys dont use attack hand
	if(dna?.species?.spec_unarmedattack(src, attack_target, modifiers))
		return

	attack_target.attack_foot(src, modifiers)

/mob/living/carbon/human/UnarmedJaw(atom/attack_target, proximity_flag, list/modifiers)
	var/obj/item/bodypart/check_jaw = get_bodypart(BODY_ZONE_PRECISE_MOUTH)
	if(!check_jaw)
		to_chat(src, span_notice("I look at my phantom jaw and sigh."))
		return
	else if(check_jaw?.bodypart_disabled)
		to_chat(src, span_warning("My [check_jaw.name] is in no condition to be used."))
		return
	else if(proximity_flag)
		for(var/thing in check_jaw.getorganslot(ORGAN_SLOT_BONE))
			var/obj/item/organ/bone/bone = thing
			if(bone.attack_with_hurt_jaw(src, check_jaw, attack_target) & COMPONENT_CANCEL_ATTACK_CHAIN)
				return

	if(is_mouth_covered())
		to_chat(src, span_warning("My mouth is covered."))
		return
	if(attack_target == src)
		var/list/unacceptable_limbs = list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_L_EYE, BODY_ZONE_PRECISE_R_EYE, \
										BODY_ZONE_PRECISE_NECK, BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN)
		if(check_zone(zone_selected) in unacceptable_limbs)
			to_chat(src, span_warning("I can't bite myself there."))
			return

	//This signal is needed to prevent gloves of the north star + hulk
	if(SEND_SIGNAL(src, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, attack_target, proximity_flag, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN)
		return
	SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, attack_target, proximity_flag, modifiers)
	//Because species like monkeys dont use attack hand
	if(dna?.species?.spec_unarmedattack(src, attack_target, modifiers))
		return

	attack_target.attack_jaw(src, modifiers)

/mob/living/carbon/human/bullet_act(obj/projectile/P, def_zone, piercing_hit = FALSE)
	//SPECIES STUFF
	if(dna?.species)
		var/spec_return = dna.species.bullet_act(P, src)
		if(spec_return)
			return spec_return

	//MARTIAL ART STUFF
	if(mind)
		if(mind.martial_art && mind.martial_art.can_use(src)) //Some martial arts users can deflect projectiles!
			var/martial_art_result = mind.martial_art.on_projectile_hit(src, P, def_zone)
			if(!(martial_art_result == BULLET_ACT_HIT))
				return martial_art_result

	//Can't shoot missing limbs or stumps
	var/obj/item/bodypart/affecting = get_bodypart_nostump(check_zone(def_zone))
	if(!affecting)
		return BULLET_ACT_FORCE_PIERCE

	//Can't block or reflect when shooting yourself
	if(!(P.original == src && P.firer == src))
		if(P.reflectable & REFLECT_NORMAL)
			if(check_reflect(def_zone)) // Checks if you've passed a reflection% check
				visible_message(span_danger("The [P.name] gets reflected by [src]!"), \
								span_userdanger("I deflect \the [P.name]!"))
				// Find a turf near or on the original location to bounce to
				if(!isturf(loc)) //Open canopy mech (ripley) check. if we're inside something and still got hit
					P.force_hit = TRUE //The thing we're in passed the bullet to us. Pass it back, and tell it to take the damage.
					loc.bullet_act(P, def_zone, piercing_hit)
					return BULLET_ACT_HIT
				if(P.starting)
					var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
					var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
					var/turf/curloc = get_turf(src)

					// redirect the projectile
					P.original = locate(new_x, new_y, P.z)
					P.starting = curloc
					P.firer = src
					P.yo = new_y - curloc.y
					P.xo = new_x - curloc.x
					var/new_angle_s = P.Angle + rand(120,240)
					while(new_angle_s > 180) // Translate to regular projectile degrees
						new_angle_s -= 360
					P.set_angle(new_angle_s)
				//Complete projectile permutation
				return BULLET_ACT_FORCE_PIERCE
		//Skill issue
		if(!QDELETED(P.firer) && iscarbon(P.firer))
			var/mob/living/carbon/firer = P.firer
			var/dist = get_dist(P.starting, src)
			var/modifier = 0
			var/attributes_used = 0
			if(P.stat_ranged)
				modifier += GET_MOB_ATTRIBUTE_VALUE(firer, P.stat_ranged)
				attributes_used += 1
			if(P.skill_ranged)
				modifier += GET_MOB_ATTRIBUTE_VALUE(firer, P.skill_ranged)
				attributes_used += 1
			if(P.specialty_ranged)
				modifier += GET_MOB_ATTRIBUTE_VALUE(firer, P.specialty_ranged)
			//I want basically a 75% hit chance under 5 tiles
			modifier *= PROJECTILE_DICEROLL_ATTRIBUTE_MULTIPLIER
			//Point blank, very hard to miss
			if(dist <= 1)
				modifier += (10 * attributes_used)
			//There is some distance between us
			else
				modifier -= (FLOOR(max(0, dist-5) ** PROJECTILE_DICEROLL_DISTANCE_EXPONENT, 1) * attributes_used)
			modifier = FLOOR(modifier, 1)
			if(firer.diceroll(modifier, 10*attributes_used, attributes_used, 20) <= DICE_FAILURE)
				return BULLET_ACT_FORCE_PIERCE
		if(check_shields(P, P.damage, "\the [P]", PROJECTILE_ATTACK, P.armour_penetration))
			P.on_hit(src, 100, def_zone, piercing_hit)
			return BULLET_ACT_HIT

	return ..()


code:
/mob/living/carbon/human
	has_field_of_vision = TRUE
	hair_color = "000000"
	facial_hair_color = "000000"
	grad_color = "000000"
	underwear_color = "000000"
	// Eye colors
	var/left_eye_color = "000000"
	var/right_eye_color = "000000"
	///Color of the undershirt
	var/undershirt_color = "FFFFFF"
	///Color of the socks
	var/socks_color = "FFFFFF"
	///Flags for showing/hiding underwear, toggleabley by a verb
	var/underwear_visibility = NONE
	///Render key for mutant bodyparts, utilized to reduce the amount of re-rendering
	var/mutant_renderkey = ""
	///How horny we are
	var/arousal = AROUSAL_LEVEL_START_MIN
	///How close we are to cooming
	var/lust = 0


code:
// scream for more
/mob/living/carbon/human/agony_scream()
	return dna?.species?.agony_scream(src)

// i have fallen and i cant get up
/mob/living/carbon/human/fall_scream()
	return dna?.species?.fall_scream(src)

// death scream
/mob/living/carbon/human/death_scream()
	return dna?.species?.death_scream(src)

// gargle
/mob/living/carbon/human/agony_gargle()
	return dna?.species?.agony_gargle(src)

// gasp
/mob/living/carbon/human/agony_gasp()
	return dna?.species?.agony_gasp(src)

// death rattle
/mob/living/carbon/human/death_rattle()
	return dna?.species?.death_rattle(src)

// sexy moan
/mob/living/carbon/human/sexy_moan()
	return dna?.species?.sexy_moan(src)

// jump grunt
/mob/living/carbon/human/jump_grunt()
	return dna?.species?.jump_grunt(src)

// fatigue grunt
/mob/living/carbon/human/fatigue_grunt()
	return dna?.species?.fatigue_grunt(src)


code:
/mob/living/carbon/human/examine(mob/user)
	//hehe
	if(user.zone_selected in list(BODY_ZONE_PRECISE_L_EYE, BODY_ZONE_PRECISE_R_EYE))
		user.handle_eye_contact(src)
	var/mob/living/carbon/human/human_user = user
	var/get_aroused = FALSE
	if(user.zone_selected == BODY_ZONE_PRECISE_GROIN)
		get_aroused = TRUE

	var/t_He = p_they(TRUE)
	var/t_he = p_they()
	var/t_His = p_their(TRUE)
	var/t_his = p_their()
	var/t_him = p_them()
	var/t_has = p_have()
	var/t_is = p_are()
	var/t_es = p_es()
	var/fancy_name = "[name]"
	var/obscure_name = FALSE
	var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
	var/obscure_species = (skipface || obscure_name || (name == "Unknown"))
	var/obscured = check_obscured_slots()
	var/distance = get_dist(user, src)
	var/distant = (!user.DirectAccess(src) && distance > EYE_CONTACT_RANGE)

	if(isliving(user))
		var/mob/living/living_user = user
		if(HAS_TRAIT(living_user, TRAIT_PROSOPAGNOSIA))
			obscure_name = TRUE
			obscure_species = TRUE
		else if(distant)
			obscure_species = TRUE

	. = list()
	if(obscure_species)
		. += "[icon2html('modular_septic/icons/mob/human/fullhuman.dmi', user, "human")] Oh, this is [obscure_name ? "Unknown" : fancy_name], a Human?"
	else
		. += "[icon2html('modular_septic/icons/mob/human/fullhuman.dmi', user, dna.species.examine_icon_state)] Oh, this is [obscure_name ? "Unknown" : fancy_name], [prefix_a_or_an(dna.species.name)] [dna.species.name]!"
	if(!isobserver(user) && distant)
		. += "[t_He] [t_is] too far away to see clearly."
		return
	. += "

"

	//TODO: Add a social recordkeeping mechanic and datum to keep tracker of who the viewer knows
	//This will do it for now, i guess
	var/visible_job = get_assignment(if_no_id = "", if_no_job = "", hand_first = FALSE)
	if(visible_job)
		. += "I'm pretty sure [t_he] is a [visible_job]."
	else
		. += "I don't know [t_his] occupation."

	var/visible_gender = t_he
	switch(visible_gender)
		if("he", "she")
			visible_gender = "[t_He] is [get_aged_gender(TRUE, TRUE)]."
		else
			visible_gender = "I don't know their gender."
	. += visible_gender

	//lips
	var/obj/item/bodypart/mouth = get_bodypart(BODY_ZONE_PRECISE_MOUTH)
	if(mouth)
		var/list/covered_lips = list()
		for(var/component_type in GLOB.creamed_types)
			var/datum/component/creamed/creampie = GetComponent(component_type)
			if(creampie?.cover_lips)
				covered_lips += creampie.cover_lips
		if(HAS_TRAIT(src, TRAIT_SSDINDICATOR))
			covered_lips += "drool"
		if(LAZYLEN(covered_lips))
			. += "Mmm, [t_his] lips are covered with [english_list(covered_lips)]!"

	//head
	if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP) && !(head.item_flags & ABSTRACT))
		. += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head."

	//uniform
	if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP) && !(w_uniform.item_flags & ABSTRACT))
		//accessory
		var/accessory_msg
		if(istype(w_uniform, /obj/item/clothing/under))
			var/obj/item/clothing/under/U = w_uniform
			if(U.attached_accessory && !(U.attached_accessory.item_flags & EXAMINE_SKIP) && !(U.attached_accessory.item_flags & ABSTRACT))
				accessory_msg += " with \a [U.attached_accessory.get_examine_string(user, FALSE)]"

		. += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]."

	//suit/armor
	if(wear_suit && !(obscured & ITEM_SLOT_OCLOTHING) && !(wear_suit.item_flags & EXAMINE_SKIP) && !(wear_suit.item_flags & ABSTRACT))
		. += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]."

	//back
	if(back && !(obscured & ITEM_SLOT_BACKPACK) && !(back.item_flags & EXAMINE_SKIP) && !(back.item_flags & ABSTRACT))
		. += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back."

	//back 2 storage boogaloo
	if(s_store && !(obscured & ITEM_SLOT_SUITSTORE) && !(s_store.item_flags & EXAMINE_SKIP) && !(s_store.item_flags & ABSTRACT))
		. += "[t_He] [t_has] [s_store.get_examine_string(user)] on [t_his] back."

	//hands
	for(var/obj/item/I in held_items)
		if(!(I.item_flags & ABSTRACT) && !(I.item_flags & EXAMINE_SKIP))
			. += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]."

	//gloves
	var/datum/component/forensics/FR = GetComponent(/datum/component/forensics)
	if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !(gloves.item_flags & EXAMINE_SKIP) && !(gloves.item_flags & ABSTRACT))
		. += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands."
	else if(FR && length(FR.blood_DNA))
		if(num_hands)
			. += "[t_He] [t_has][num_hands > 1 ? "" : " a"] blood-stained hand[num_hands > 1 ? "s" : ""]!"

	//handcuffed
	if(handcuffed && !(obscured & ITEM_SLOT_HANDCUFFED) && !(handcuffed.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_is] handcuffed with [handcuffed.get_examine_string(user)]!"

	//belt
	if(belt && !(obscured & ITEM_SLOT_BELT) && !(belt.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist."

	//shoes
	if(shoes && !(obscured & ITEM_SLOT_FEET)  && !(shoes.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet."

	//mask
	if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face."

	if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !(wear_neck.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck."

	//eyes
	if(!(obscured & ITEM_SLOT_EYES))
		if(glasses && !(glasses.item_flags & EXAMINE_SKIP))
			. += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes."
		if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES))
			. += "[t_His] eyes are glowing an unnatural red!"
		if(HAS_TRAIT(src, TRAIT_FLUORIDE_STARE))
			. += "He has a vacant, fluoridated stare."

	//left ear
	if(ears && !(obscured & ITEM_SLOT_LEAR) && !(ears.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] left ear."

	//right ear
	if(ears_extra && !(obscured & ITEM_SLOT_REAR) && !(ears_extra.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_has] [ears_extra.get_examine_string(user)] on [t_his] right ear."

	//ID
	if(wear_id && !(wear_id.item_flags & EXAMINE_SKIP))
		. += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)]."

		. += wear_id.get_id_examine_strings(user)

	//Status effects
	var/list/status_examines = status_effect_examines()
	if (length(status_examines))
		. += status_examines

	//Jitters
	switch(jitteriness)
		if(300 to INFINITY)
			. += "[t_He] [t_is] convulsing violently!"
		if(200 to 300)
			. += "[t_He] [t_is] extremely jittery."
		if(100 to 200)
			. += "[t_He] [t_is] twitching ever so slightly."

	if(pulling)
		switch(grab_state)
			if(GRAB_PASSIVE)
				. += "[t_He] is pulling \the [pulling]."
			if(GRAB_AGGRESSIVE)
				. += "[t_He] is grabbing \the [pulling]."
			if(GRAB_NECK)
				. += "[t_He] is grabbing \the [pulling] by [pulling.p_their()] neck!"
			if(GRAB_KILL)
				. += "[t_He] is strangling \the [pulling]!"

	var/list/msg = list()
	for(var/X in bodyparts)
		var/obj/item/bodypart/bodypart = X
		if(bodypart.is_stump())
			msg += "[t_His] [parse_zone(bodypart.body_zone)] is a stump!"
		if(bodypart.max_teeth)
			var/teeth = bodypart.get_teeth_amount()
			if(teeth < bodypart.max_teeth)
				msg += "[t_His] [bodypart.name] is missing [bodypart.max_teeth-teeth] teeth!"
	//stores missing limbs
	var/list/missing = get_missing_limbs()
	for(var/zone in missing)
		//redundancy checks
		if(GLOB.bodyzone_to_children[zone])
			missing -= GLOB.bodyzone_to_children[zone]
			continue
		if(GLOB.bodyzone_to_parent[zone] && (GLOB.bodyzone_to_parent[zone] in missing))
			missing -= zone
			continue
		msg += "[capitalize(t_his)] [parse_zone(zone)] is missing!"
	var/damage_value = 0
	if(!(user == src && src.hal_screwyhud == SCREWYHUD_HEALTHY)) //fake healthy
		var/hyperbole = ((user == src) && (hal_screwyhud == SCREWYHUD_CRIT) ? 50 : 0)
		var/wound_injured = 0
		for(var/thing in all_wounds)
			var/datum/wound/wound = thing
			wound_injured += (wound.severity - WOUND_SEVERITY_TRIVIAL) * 20
		damage_value = getBruteLoss() + getFireLoss() + getCloneLoss() + hyperbole + wound_injured
		switch(damage_value)
			if(5 to 25)
				msg += "[t_He] [t_is] barely injured."
			if(25 to 50)
				msg += "[t_He] [t_is] moderately injured!"
				get_aroused = FALSE
			if(50 to INFINITY)
				msg += "[t_He] [t_is] severely injured!"
				get_aroused = FALSE
	if(fire_stacks > 0)
		msg += "[t_He] [t_is] covered in something flammable."
	if(fire_stacks < 0)
		msg += "[t_He] look[p_s()] a little soaked."
	if(nutrition < NUTRITION_LEVEL_STARVING - 50)
		msg += "[t_He] [t_is] severely malnourished."
	else if(nutrition >= NUTRITION_LEVEL_FAT)
		if(user.nutrition < NUTRITION_LEVEL_STARVING - 50)
			msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy."
		else
			msg += "[t_He] [t_is] quite chubby."
	switch(disgust)
		if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS)
			msg += "[t_He] look[p_s()] a bit grossed out."
		if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED)
			msg += "[t_He] look[p_s()] really grossed out."
		if(DISGUST_LEVEL_DISGUSTED to INFINITY)
			msg += "[t_He] look[p_s()] extremely disgusted."

	var/apparent_blood_volume = get_blood_circulation()
	if(dna.species.use_skintones && skin_tone == "albino")
		apparent_blood_volume -= ALBINO_BLOOD_REDUCTION // enough to knock you down one tier
	switch(apparent_blood_volume)
		if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
			msg += "[t_His] skin is pale."
		if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
			msg += "[t_His] skin is very pale."
		if(-INFINITY to BLOOD_VOLUME_BAD)
			msg += "[t_His] skin is extremely pale and sickly."

	if(reagents.has_reagent(/datum/reagent/teslium, needs_metabolizing = TRUE))
		msg += "[t_He] [t_is] emitting a gentle blue glow!"

	if(islist(stun_absorption))
		for(var/i in stun_absorption)
			if(stun_absorption[i]["end_time"] > world.time && stun_absorption[i]["examine_message"])
				msg += "[t_He] [t_is][stun_absorption[i]["examine_message"]]"
	//dirtiness
	switch(germ_level)
		if(GERM_LEVEL_FILTHY to GERM_LEVEL_SMASHPLAYER)
			msg += "[t_He] looks filthy!"
		if(GERM_LEVEL_SMASHPLAYER to INFINITY)
			msg += "Good lord, [t_he] stinks!"
	//strength diff
	if(user.attributes && (user != src))
		switch(GET_MOB_ATTRIBUTE_VALUE(user, STAT_STRENGTH)-GET_MOB_ATTRIBUTE_VALUE(src, STAT_STRENGTH))
			if(-INFINITY to -3)
				msg += span_danger("[t_He] [t_is] much stronger than me.")
			if(-2, -1)
				msg += "[t_He] [t_is] stronger than me."
			if(0)
				msg += span_notice("[t_He] [t_is] about as strong as me.")
			if(1, 2)
				msg += span_notice("[t_He] [t_is] weaker than me.")
			if(3 to INFINITY)
				msg += span_boldnotice("[t_He] [t_is] much weaker than me.")
	if(stat < DEAD)
		if(src != user)
			if(drunkenness && !skipface) //Drunkenness
				switch(drunkenness)
					if(11 to 21)
						msg += "[t_He] [t_is] slightly flushed."
					if(21.01 to 41) //.01s are used in case drunkenness ends up to be a small decimal
						msg += "[t_He] [t_is] flushed."
					if(41.01 to 51)
						msg += "[t_He] [t_is] quite flushed and [t_his] breath smells of alcohol."
					if(51.01 to 61)
						msg += "[t_He] [t_is] very flushed and [t_his] movements are jerky, with breath reeking of alcohol."
					if(61.01 to 91)
						msg += "[t_He] look[p_s()] like a drunken mess."
					if(91.01 to INFINITY)
						msg += "[t_He] [t_is] a shitfaced, slobbering wreck."
			var/datum/component/mood/mood = src.GetComponent(/datum/component/mood)
			if(mood)
				switch(mood.shown_mood)
					if(-INFINITY to MOOD_LEVEL_SAD4)
						msg += "[t_He] look[p_s()] miserable."
					if(MOOD_LEVEL_SAD4 to MOOD_LEVEL_SAD3)
						msg += "[t_He] look[p_s()] very sad."
					if(MOOD_LEVEL_SAD3 to MOOD_LEVEL_SAD2)
						msg += "[t_He] look[p_s()] a bit upset."
					if(MOOD_LEVEL_SAD2 to MOOD_LEVEL_HAPPY2)
						msg += "[t_He] do[t_es]n't seem one way or the other."
					if(MOOD_LEVEL_HAPPY2 to MOOD_LEVEL_HAPPY3)
						msg += "[t_He] look[p_s()] quite content."
					if(MOOD_LEVEL_HAPPY3 to MOOD_LEVEL_HAPPY4)
						msg += "[t_He] look[p_s()] very happy."
					if(MOOD_LEVEL_HAPPY4 to INFINITY)
						msg += "[t_He] look[p_s()] ecstatic!"
			if(HAS_TRAIT(user, TRAIT_EMPATH))
				if(combat_mode)
					msg += "[t_He] seem[p_s()] to be on guard."
				if(getOxyLoss() >= 10)
					msg += "[t_He] seem[p_s()] winded."
				if(getToxLoss() >= 10)
					msg += "[t_He] seem[p_s()] sickly."
				if(mood.sanity <= SANITY_DISTURBED)
					msg += "[t_He] seem[p_s()] significantly distressed."
					SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "empath", /datum/mood_event/sad_empath, src)
				if(is_blind())
					msg += "[t_He] appear[p_s()] to be staring off into space."
				if(HAS_TRAIT(src, TRAIT_DEAF))
					msg += "[t_He] appear[p_s()] to not be responding to noises."
				if(bodytemperature > dna.species.bodytemp_heat_damage_limit)
					msg += "[t_He] [t_is] flushed and wheezing."
				if(bodytemperature < dna.species.bodytemp_cold_damage_limit)
					msg += "[t_He] [t_is] shivering."
			if(HAS_TRAIT(user, TRAIT_SPIRITUAL))
				msg += "[t_He] [t_has] a holy aura about [t_him]."
				SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "religious_comfort", /datum/mood_event/religiously_comforted)
		switch(stat)
			if(DEAD, UNCONSCIOUS, HARD_CRIT)
				msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be unconscious."
			if(SOFT_CRIT)
				msg += "[t_He] [t_is] barely conscious."
			if(CONSCIOUS)
				if(HAS_TRAIT(src, TRAIT_DUMB))
					msg += "[t_He] [t_has] a stupid expression on [t_his] face."
		if(needs_lungs() && (distance <= 2) && (losebreath || (stat >= DEAD) || undergoing_cardiac_arrest()) )
			msg += "[t_He] do[t_es]n't appear to be breathing."
		if(getorganslot(ORGAN_SLOT_BRAIN))
			if(!key && !ai_controller)
				msg += "[t_He] [t_is] totally catatonic. Any recovery is unlikely."
			else if(!client)
				msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon."
	else
		msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be unconscious."

	var/scar_severity = 0
	for(var/i in all_scars)
		var/datum/scar/S = i
		if(S.is_visible(user))
			scar_severity += S.severity

	switch(scar_severity)
		if(1 to 4)
			msg += "[t_He] [t_has] visible scarring, you can look again to take a closer look..."
		if(5 to 8)
			msg += "[t_He] [t_has] several bad scars, you can look again to take a closer look..."
		if(9 to 11)
			msg += "[t_He] [t_has] significantly disfiguring scarring, you can look again to take a closer look..."
		if(12 to INFINITY)
			msg += "[t_He] [t_is] just absolutely fucked up, you can look again to take a closer look..."

	if(LAZYLEN(msg))
		. += "[msg.Join("\n")]"

	var/trait_exam = common_trait_examine()
	if(!isnull(trait_exam))
		. += trait_exam
	//NOOOOO AHHHHHHHH
	var/list/slot_to_name = list(ORGAN_SLOT_PENIS = "knob",\
								ORGAN_SLOT_TESTICLES = "gonads",\
								ORGAN_SLOT_VAGINA = "cunt",\
								ORGAN_SLOT_BREASTS = "jugs",\
								ORGAN_SLOT_WOMB = "womb",\
								)
	for(var/genital_slot in slot_to_name)
		var/list/genitals = getorganslotlist(genital_slot)
		if(!length(genitals) && should_have_genital(genital_slot) && genital_visible(genital_slot))
			. += "[t_He] [t_has] no [slot_to_name[genital_slot]]!"
		else
			for(var/thing in genitals)
				var/obj/item/organ/genital/genital = thing
				var/examine_message = genital.get_genital_examine()
				if(examine_message)
					. += genital.get_genital_examine()
				if(genital.is_visible() && damage_value < 50)
					get_aroused = TRUE
	if((user != src) && get_aroused && istype(human_user) && (stat < DEAD) && (human_user.stat == CONSCIOUS))
		//OwO what's this
		human_user.adjust_arousal(20)
	var/perpname = get_face_name(get_id_name(""))
	if(perpname && (HAS_TRAIT(user, TRAIT_SECURITY_HUD) || HAS_TRAIT(user, TRAIT_MEDICAL_HUD)))
		var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general)
		if(R)
			. += "Rank: [R.fields["rank"]]\n\[Front photo\]\[Side photo\]"
		if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD))
			var/cyberimp_detect
			for(var/obj/item/organ/cyberimp/CI in internal_organs)
				if(CI.status == ORGAN_ROBOTIC && !CI.scanner_hidden)
					cyberimp_detect += "[!cyberimp_detect ? "[CI.get_examine_string(user)]" : ", [CI.get_examine_string(user)]"]"
			if(cyberimp_detect)
				. += "Detected cybernetic modifications:"
				. += "[cyberimp_detect]"
			if(R)
				var/health_r = R.fields["p_stat"]
				. += "\[[health_r]\]"
				health_r = R.fields["m_stat"]
				. += "\[[health_r]\]"
			R = find_record("name", perpname, GLOB.data_core.medical)
			if(R)
				. += "\[Medical evaluation\]
"
			. += "\[See quirks\]"

		if(HAS_TRAIT(user, TRAIT_SECURITY_HUD))
			if(user.stat < UNCONSCIOUS && !HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
				var/criminal = "None"

				R = find_record("name", perpname, GLOB.data_core.security)
				if(R)
					criminal = R.fields["criminal"]

				. += "Criminal status: \[[criminal]\]"
				. += jointext(list("Security record: \[View\]",
					"\[Add citation\]",
					"\[Add crime\]",
					"\[View comment log\]",
					"\[Add comment\]"), "")
	if(isobserver(user))
		. += "Quirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)]"
	. += ""

	SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
	if(on_examined_check(user, FALSE))
		user.on_examine_atom(src, FALSE)

/mob/living/carbon/human/examine_more(mob/user)
	. = list(span_notice("I examine [src] closer, and note the following..."), "

")

	var/box = ""
	var/t_He = p_they(TRUE)
	var/t_is = p_are()
	var/distance = get_dist(user, src)
	if(!user.DirectAccess(src) && distance > EYE_CONTACT_RANGE)
		box += "[t_He] [t_is] too far away to see clearly."
		. += box
		return

	var/t_His = p_their(TRUE)
	var/t_his = p_their()
	var/t_has = p_have()

	var/list/damaged_bodypart_text = list()
	var/list/clothing = list(head, wear_mask, wear_neck, wear_suit, w_uniform, wear_id, belt, back, s_store, ears, ears_extra, gloves, shoes)
	for(var/thingprequel in bodyparts)
		var/obj/item/bodypart/limb = thingprequel
		var/obj/item/hidden
		//yes the splint will cover gauze up
		if(limb.current_splint)
			hidden = limb.current_splint
			damaged_bodypart_text += "[t_His] [limb.name] is splinted with [limb.current_splint]."
		else if(limb.current_gauze)
			hidden = limb.current_gauze
			damaged_bodypart_text += "[t_His] [limb.name] is gauzed with [limb.current_gauze]."

		if(!hidden)
			for(var/thing in clothing)
				var/obj/item/clothing/clothes = thing
				if(istype(clothes) && CHECK_BITFIELD(clothes.body_parts_covered, limb.body_part))
					hidden = clothes
					break
			if(hidden)
				damaged_bodypart_text += "[t_His] [limb.name] is covered up by [hidden.name]."

		if(limb.etching && !hidden)
			damaged_bodypart_text += "[t_His] [limb.name] has \"[limb.etching]\" etched on it!"

		for(var/thing in limb.embedded_objects)
			var/obj/item/embedded = thing
			if(embedded.isEmbedHarmless())
				damaged_bodypart_text += "[t_He] [t_has] [icon2html(embedded, user)] \a [embedded] stuck to [t_his] [limb.name]!"

		for(var/i in limb.wounds)
			var/datum/wound/iter_wound = i
			if(hidden && !CHECK_BITFIELD(iter_wound.wound_flags, WOUND_VISIBLE_THROUGH_CLOTHING))
				continue
			damaged_bodypart_text += "[iter_wound.get_examine_description(user)]"

		if(hidden)
			var/thicc = FALSE
			var/obj/item/clothing/clothing_thing = hidden
			if(istype(clothing_thing) && (clothing_thing.clothing_flags & THICKMATERIAL))
				thicc = TRUE
			if(limb.get_bleed_rate() && !thicc)
				damaged_bodypart_text += "[t_He] [t_has] blood soaking through [t_his] [hidden.name] around [t_his] [limb.name]!"
		else
			var/hurted = limb.get_injuries_desc()
			if(hurted)
				damaged_bodypart_text += "[t_He] [t_has] [hurted] on [t_his] [limb.name]."

		if(distance <= 1)
			if(HAS_TRAIT(limb, TRAIT_ROTTEN))
				damaged_bodypart_text += "[t_His] [limb.name] is gangrenous!"
			if(HAS_TRAIT(limb, TRAIT_DEFORMED))
				damaged_bodypart_text += "[t_His] [limb.name] is gruesomely deformed!"
			if(limb.is_fractured())
				damaged_bodypart_text += "[t_His] [limb.name] is dented and swollen!"
			else if(limb.is_dislocated())
				damaged_bodypart_text += "[t_His] [limb.name] is dislocated!"
		else if(HAS_TRAIT(limb, TRAIT_ROTTEN) || HAS_TRAIT(limb, TRAIT_DEFORMED) || limb.is_fractured() || limb.is_dislocated())
			damaged_bodypart_text += "[t_His] [limb.name] seems to be in poor condition."
	if(length(damaged_bodypart_text))
		box += jointext(damaged_bodypart_text, "\n")
	else
		box += "[t_He] [t_has] no visibly damaged bodyparts."
	. += box
	if(on_examined_check(user, TRUE))
		user.on_examine_atom(src, TRUE)


code:
/mob/living/carbon/human/proc/update_hud_nutrition(new_value = 3)
	if(!client || !hud_used?.nutrition)
		return
	hud_used.nutrition.update_nutrition(new_value)

/mob/living/carbon/human/proc/update_hud_hydration(new_value = 3)
	if(!client || !hud_used?.hydration)
		return
	hud_used.hydration.update_hydration(new_value)

/mob/living/carbon/human/proc/update_hud_pressure(new_value = 2)
	if(!client || !hud_used?.pressure)
		return
	hud_used.pressure.update_pressure(new_value)

/mob/living/carbon/human/proc/update_hud_temperature(new_value = 3)
	if(!client || !hud_used?.temperature)
		return
	hud_used.temperature.update_temperature(new_value)

/mob/living/carbon/human/proc/update_hud_bodytemperature(new_value = 3)
	if(!client || !hud_used?.bodytemperature)
		return
	hud_used.bodytemperature.update_temperature(new_value)

/mob/living/carbon/human/proc/update_hud_breath(failed_last_breath = FALSE, lung_efficiency = 100, bruised_threshold = ORGAN_BRUISED_EFFICIENCY, failing_threshold = ORGAN_FAILING_EFFICIENCY)
	if(!client || !hud_used?.breath)
		return
	var/resulting_breath = 3
	if((lung_efficiency <= 0) || (stat >= DEAD))
		resulting_breath = 0
	else if(lung_efficiency < failing_threshold)
		resulting_breath = 1
	else if((lung_efficiency < bruised_threshold) || failed_last_breath)
		resulting_breath = 2
	hud_used.breath.update_breath(resulting_breath)


code:
/mob/living/carbon/human/get_item_by_slot(slot_id)
	switch(slot_id)
		if(ITEM_SLOT_BACK)
			return back
		if(ITEM_SLOT_MASK)
			return wear_mask
		if(ITEM_SLOT_NECK)
			return wear_neck
		if(ITEM_SLOT_HANDCUFFED)
			return handcuffed
		if(ITEM_SLOT_LEGCUFFED)
			return legcuffed
		if(ITEM_SLOT_BELT)
			return belt
		if(ITEM_SLOT_ID)
			return wear_id
		if(ITEM_SLOT_EARS, ITEM_SLOT_LEAR)
			return ears
		if(ITEM_SLOT_REAR)
			return ears_extra
		if(ITEM_SLOT_EYES)
			return glasses
		if(ITEM_SLOT_GLOVES)
			return gloves
		if(ITEM_SLOT_HEAD)
			return head
		if(ITEM_SLOT_FEET)
			return shoes
		if(ITEM_SLOT_OCLOTHING)
			return wear_suit
		if(ITEM_SLOT_ICLOTHING)
			return w_uniform
		if(ITEM_SLOT_LPOCKET)
			return l_store
		if(ITEM_SLOT_RPOCKET)
			return r_store
		if(ITEM_SLOT_SUITSTORE)
			return s_store
	return null

//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible()
// Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it
/mob/living/carbon/human/equip_to_slot(obj/item/I, slot, initial = FALSE, redraw_mob = FALSE)
	if(!..()) //a check failed or the item has already found its slot
		return

	var/not_handled = FALSE //Added in case we make this type path deeper one day
	switch(slot)
		if(ITEM_SLOT_BELT)
			if(belt)
				return
			belt = I
			update_inv_belt()
		if(ITEM_SLOT_ID)
			if(wear_id)
				return
			wear_id = I
			sec_hud_set_ID()
			update_inv_wear_id()
		if(ITEM_SLOT_EARS, ITEM_SLOT_LEAR)
			if(ears)
				return
			ears = I
			update_inv_ears()
		if(ITEM_SLOT_REAR)
			if(ears_extra)
				return
			ears_extra = I
			update_inv_ears()
		if(ITEM_SLOT_EYES)
			if(glasses)
				return
			glasses = I
			var/obj/item/clothing/glasses/G = I
			if(G.glass_colour_type)
				update_glasses_color(G, 1)
			if(G.tint)
				update_tint()
			if(G.vision_correction)
				clear_fullscreen("nearsighted")
			if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
				update_sight()
			update_inv_glasses()
		if(ITEM_SLOT_GLOVES)
			if(gloves)
				return
			gloves = I
			update_inv_gloves()
		if(ITEM_SLOT_FEET)
			if(shoes)
				return
			shoes = I
			update_inv_shoes()
		if(ITEM_SLOT_OCLOTHING)
			if(wear_suit)
				return

			wear_suit = I

			if(I.flags_inv & HIDEJUMPSUIT)
				update_inv_w_uniform()
			if(wear_suit.breakouttime) //when equipping a straightjacket
				ADD_TRAIT(src, TRAIT_RESTRAINED, SUIT_TRAIT)
				stop_pulling() //can't pull if restrained
				update_action_buttons_icon() //certain action buttons will no longer be usable.
			update_inv_wear_suit()
		if(ITEM_SLOT_ICLOTHING)
			if(w_uniform)
				return
			w_uniform = I
			update_suit_sensors()
			update_inv_w_uniform()
		if(ITEM_SLOT_LPOCKET)
			l_store = I
			update_inv_pockets()
		if(ITEM_SLOT_RPOCKET)
			r_store = I
			update_inv_pockets()
		if(ITEM_SLOT_SUITSTORE)
			if(s_store)
				return
			s_store = I
			update_inv_s_store()
		else
			to_chat(src, span_danger("You are trying to equip this item to an unsupported inventory slot. Report this to a coder!"))

	//Item is handled and in slot, valid to call callback, for this proc should always be true
	if(!not_handled)
		has_equipped(I, slot, initial)

		// Send a signal for when we equip an item that used to cover our feet/shoes. Used for bloody feet
		if((I.body_parts_covered & FEET) || (I.flags_inv | I.transparent_protection) & HIDESHOES)
			SEND_SIGNAL(src, COMSIG_CARBON_EQUIP_SHOECOVER, I, slot, initial, redraw_mob)

	return not_handled //For future deeper overrides


code:
/mob/living/carbon/human/GetVoice()
	if(istype(wear_mask, /obj/item/clothing/mask/chameleon))
		var/obj/item/clothing/mask/chameleon/V = wear_mask
		if(V.voice_change && wear_id)
			var/obj/item/card/id/idcard = wear_id.GetID()
			if(istype(idcard))
				return idcard.registered_name
			else
				return real_name
		else
			return real_name
	if(istype(wear_mask, /obj/item/clothing/mask/infiltrator))
		var/obj/item/clothing/mask/infiltrator/infiltrator_mask = wear_mask
		if(infiltrator_mask.voice_unknown)
			return "Unknown"
		else
			return real_name
	if(mind)
		var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
		if(changeling?.mimicing )
			return changeling.mimicing
	if(GetSpecialVoice())
		return GetSpecialVoice()
	return real_name

/mob/living/carbon/human/get_visible_name()
	var/face_name = get_face_name("")
	var/id_name = get_id_name("")
	if(name_override)
		return name_override
	if(face_name)
		if(id_name && (id_name != face_name))
			return "[face_name] (as [id_name])"
		return face_name
	if(id_name)
		return id_name
	return "Unknown"

/mob/living/carbon/human/get_face_name(if_no_face = "[get_aged_gender()][get_assignment("", "", FALSE) ? " [get_assignment()]" : null]")
	if(wear_mask)
		if(istype(wear_mask, /obj/item/bodypart/face))
			var/obj/item/bodypart/face/face_mask = wear_mask
			if(face_mask)
				return face_mask.real_name
		//Wearing a mask which hides our face, use id-name if possible
		else if(wear_mask.flags_inv & HIDEFACE)
			return if_no_face
	if( head && (head.flags_inv & HIDEFACE) )
		return if_no_face //Likewise for hats
	var/obj/item/bodypart/face = get_bodypart_nostump(BODY_ZONE_PRECISE_FACE)
	//Disfigured, use id-name if possible
	if( !face || HAS_TRAIT(src, TRAIT_DISFIGURED) || HAS_TRAIT(src, TRAIT_HUSK) || (cloneloss > 50) || !real_name )
		return if_no_face
	return real_name

/mob/living/carbon/human/get_alt_name()
	return

/mob/living/carbon/human/proc/get_gender()
	var/visible_gender = p_they()
	switch(visible_gender)
		if("he")
			visible_gender = "Man"
		if("she")
			visible_gender = "Woman"
		if("they")
			visible_gender = "Creature"
		else
			visible_gender = "Thing"
	return visible_gender

/mob/living/carbon/human/proc/get_age()
	switch(age)
		if(80 to INFINITY)
			return "Geriatric"
		if(65 to 80)
			return "Elderly"
		if(50 to 65)
			return "Old"
		if(18 to 22)
			return "Young Adult"
		else
			return ""

/mob/living/carbon/human/proc/get_aged_gender(prefixed = FALSE, lowercase = FALSE)
	var/visible_gender = get_gender()
	switch(age)
		if(80 to INFINITY)
			visible_gender = "[prefixed ? "A " : null]Geriatric [visible_gender]"
		if(65 to 80)
			visible_gender = "[prefixed ? "An " : null]Elderly [visible_gender]"
		if(50 to 65)
			visible_gender = "[prefixed ? "An " : null]Old [visible_gender]"
		if(18 to 22)
			visible_gender = "[prefixed ? "A " : null]Young Adult [visible_gender]"
		else
			visible_gender = "[prefixed ? "A ": null][visible_gender]"
	return lowercase ? lowertext(visible_gender) : visible_gender


code:
/mob/living/carbon/human/check_self_for_injuries()
	if(stat < UNCONSCIOUS)
		visible_message("[src] examines [p_themselves()].", \
						"I check myself.")

	var/list/return_text = list("
")
	return_text += "Let's see how I am doing."
	if(stat < DEAD)
		return_text += "\nI'm still alive."
		return_text += "\nI can carry up to [CEILING(maximum_carry_weight, 1)]kg."
		return_text += "\nEncumbrance: [encumbrance_text()] ([CEILING(carry_weight, 1)]kg)"
		if(stat >= UNCONSCIOUS)
			return_text += "\nI'm [HAS_TRAIT(src, TRAIT_TRYINGTOSLEEP) ? "sleeping" : "unconscious"]."
		if(get_blood_circulation() < BLOOD_VOLUME_OKAY)
			return_text += "\nI'm pale!"
		if(HAS_TRAIT(src, TRAIT_PARALYSIS_L_LEG) && HAS_TRAIT(src, TRAIT_PARALYSIS_R_LEG))
			return_text += "\nI'm paraplegic!"
		if(undergoing_septic_shock())
			return_text += "\nI'm undergoing septic shock!"
		if(undergoing_cardiac_arrest())
			return_text += "\nI'm knocking on death's door!"
	else
		return_text += "\nI'm dead."
	return_text += "

"
	var/list/all_bodyparts = ALL_BODYPARTS
	for(var/X in all_bodyparts)
		var/obj/item/bodypart/LB = get_bodypart(X)
		if(!LB)
			return_text += "\n☼ [capitalize(parse_zone(X))]: MISSING "
			continue

		if(LB.is_stump())
			return_text += "\n☼ [capitalize(parse_zone(X))]: STUMP "
			continue

		var/limb_max_damage = LB.max_damage
		var/list/status = list()
		var/brutedamage = LB.brute_dam
		var/burndamage = LB.burn_dam
		var/paindamage = LB.get_shock(TRUE, TRUE)
		if(hallucination)
			if(prob(30))
				brutedamage += rand(30,40)
			if(prob(30))
				burndamage += rand(30,40)
			if(prob(30))
				paindamage += rand(30,40)

		if(HAS_TRAIT(src, TRAIT_SELF_AWARE))
			if(brutedamage)
				status += "= 5 ? "danger" : "notice"]'>[brutedamage] BRUTE"
			if(burndamage)
				status += "= 5 ? "danger" : "notice"]'>[burndamage] BURN"
			if(paindamage)
				status += "= 10 ? "danger" : "notice"]'>[paindamage] PAIN"
		else
			if(brutedamage >= (limb_max_damage*0.75))
				status += "[LB.heavy_brute_msg]"
			else if(brutedamage >= (limb_max_damage*0.5))
				status += "[LB.heavy_brute_msg]"
			else if(brutedamage >= (limb_max_damage*0.25))
				status += "[LB.medium_brute_msg]"
			else if(brutedamage > 0)
				status += "[LB.light_brute_msg]"

			if(burndamage >= (limb_max_damage*0.75))
				status += "[LB.heavy_burn_msg]"
			else if(burndamage >= (limb_max_damage*0.5))
				status += "[LB.medium_burn_msg]"
			else if(burndamage >= (limb_max_damage*0.25))
				status += "[LB.medium_burn_msg]"
			else if(burndamage > 0)
				status += "[LB.light_burn_msg]"

			if(paindamage >= (limb_max_damage*0.75))
				status += "[LB.heavy_pain_msg]"
			else if(paindamage >= (limb_max_damage*0.5))
				status += "[LB.medium_pain_msg]"
			else if(paindamage >= (limb_max_damage*0.25))
				status += "[LB.medium_pain_msg]"
			else if(paindamage > 0)
				status += "[LB.light_pain_msg]"

		for(var/thing in LB.wounds)
			var/datum/wound/hurted = thing
			var/woundmsg
			woundmsg = "[uppertext(hurted.name)]"
			switch(hurted.severity)
				if(WOUND_SEVERITY_TRIVIAL)
					status += "[woundmsg]"
				if(WOUND_SEVERITY_MODERATE)
					status += "[woundmsg]"
				if(WOUND_SEVERITY_SEVERE)
					status += "[woundmsg]"
				if(WOUND_SEVERITY_CRITICAL)
					status += "[woundmsg]"
			if(hurted.show_wound_topic(src))
				status = "[woundmsg]"

		if(LB.embedded_objects)
			for(var/obj/item/I in LB.embedded_objects)
				status += "[I.isEmbedHarmless() ? "STUCK" : "EMBEDDED"] [uppertext(I.name)]"

		if(LB.get_bleed_rate())
			if(LB.get_bleed_rate() >= 3) //Totally arbitrary value
				status += "BLEEDING"
			else
				status += "BLEEDING"

		if(LB.get_incision(TRUE))
			status += "INCISION"

		if(LB.is_artery_torn())
			status += "ARTERY"

		if(LB.is_fractured())
			status += "FRACTURE"
		else if(LB.is_dislocated())
			status += "DISLOCATION"

		if(LB.is_tendon_torn())
			status += "TENDON"

		if(LB.is_nerve_torn())
			status += "NERVE"

		if(LB.is_dead())
			status += "GANGRENE"
		else if(LB.germ_level >= INFECTION_LEVEL_ONE)
			status += "FESTERING"

		if(LB.body_zone == BODY_ZONE_PRECISE_MOUTH)
			var/obj/item/bodypart/mouth/jaw = LB
			if(jaw.tapered)
				if(!wear_mask)
					status += "TAPE"

		if(LB.current_gauze)
			status += "GAUZE"

		if(LB.current_splint)
			status += "SPLINT"

		if(LB.bodypart_disabled)
			status += "CRIPPLED"

		if(!length(status))
			status += "OK"

		if(x == all_bodyparts[1])
			return_text += "☼ [capitalize(LB.name)]: [jointext(status, " | ")]"
		else
			return_text += "\n☼ [capitalize(LB.name)]: [jointext(status, " | ")]"
	return_text += "
" //div infobox
	to_chat(src, jointext(return_text, ""))
	return TRUE


code:
/mob/living/carbon/human/get_total_tint()
	. = 0
	if(isclothing(head))
		. += head.tint
	if(isclothing(wear_mask))
		. += wear_mask.tint
	if(isclothing(glasses))
		. += glasses.tint

	var/obj/item/bodypart/left_eyesocket = LAZYACCESS(eye_bodyparts, 1)
	var/obj/item/bodypart/right_eyesocket = LAZYACCESS(eye_bodyparts, 2)
	var/obj/item/organ/eyes/LE
	var/obj/item/organ/eyes/RE
	for(var/obj/item/organ/eyes/eye in left_eyesocket?.get_organs())
		LE = eye
		break
	for(var/obj/item/organ/eyes/eye in right_eyesocket?.get_organs())
		RE = eye
		break

	if(!RE && !LE)
		return INFINITY //we blind


code:
/datum/strippable_item/mob_item_slot/ears
	key = STRIPPABLE_ITEM_EARS
	item_slot = ITEM_SLOT_LEAR

/datum/strippable_item/mob_item_slot/ears_extra
	key = STRIPPABLE_ITEM_EARS_EXTRA
	item_slot = ITEM_SLOT_REAR