<commit_before>/mob/living/carbon/human/say(var/message)

	var/verb = "says"
	var/alt_name = ""
	var/message_range = world.view
	var/italics = 0

	if(client)
		if(client.prefs.muted & MUTE_IC)
			src << "\red You cannot speak in IC (Muted)."
			return

	message = trim_strip_html_properly(message)

	if(stat)
		if(stat == 2)
			return say_dead(message)
		return

	if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
		src << "<span class='danger'>You're muzzled and cannot speak!</span>"
		return

	var/message_mode = parse_message_mode(message, "headset")

	if(copytext(message,1,2) == "*")
		return emote(copytext(message,2))

	if(name != GetVoice())
		alt_name = "(as [get_id_name("Unknown")])"

	//parse the radio code and consume it
	if (message_mode)
		if (message_mode == "headset")
			message = copytext(message,2)	//it would be really nice if the parse procs could do this for us.
		else
			message = copytext(message,3)

	message = trim_left(message)

	//parse the language code and consume it
	var/datum/language/speaking = parse_language(message)
	if(speaking)
		if(speaking.flags & INNATE)
			message = copytext(message,2)
		else
			message = copytext(message,3)
	else if(species.default_language)
		speaking = all_languages[species.default_language]

	var/ending = copytext(message, length(message))
	if (speaking)
		// This is broadcast to all mobs with the language,
		// irrespective of distance or anything else.
		if(speaking.flags & HIVEMIND)
			speaking.broadcast(src,trim(message))
			return
		//If we've gotten this far, keep going!
		verb = speaking.get_spoken_verb(ending)
	else
		if(ending=="!")
			verb=pick("exclaims","shouts","yells")
		if(ending=="?")
			verb="asks"

	if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
		return

	if(speaking && !speaking.name == "Noise")
		message = capitalize(trim(message))

	if(speech_problem_flag)
		var/list/handle_r = handle_speech_problems(message)
		message = handle_r[1]
		verb = handle_r[2]
		speech_problem_flag = handle_r[3]

	if(!message || stat)
		return
	if(speaking && speaking.flags & SIGNLANG)
		message_mode = null<commit_msg>No sign language without hands<commit_after>/mob/living/carbon/human/say(var/message)

	var/verb = "says"
	var/alt_name = ""
	var/message_range = world.view
	var/italics = 0

	if(client)
		if(client.prefs.muted & MUTE_IC)
			src << "\red You cannot speak in IC (Muted)."
			return

	message = trim_strip_html_properly(message)

	if(stat)
		if(stat == 2)
			return say_dead(message)
		return

	if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
		src << "<span class='danger'>You're muzzled and cannot speak!</span>"
		return

	var/message_mode = parse_message_mode(message, "headset")

	if(copytext(message,1,2) == "*")
		return emote(copytext(message,2))

	if(name != GetVoice())
		alt_name = "(as [get_id_name("Unknown")])"

	//parse the radio code and consume it
	if (message_mode)
		if (message_mode == "headset")
			message = copytext(message,2)	//it would be really nice if the parse procs could do this for us.
		else
			message = copytext(message,3)

	message = trim_left(message)

	//parse the language code and consume it
	var/datum/language/speaking = parse_language(message)
	if(speaking)
		if(speaking.flags & INNATE)
			message = copytext(message,2)
		else
			message = copytext(message,3)
	else if(species.default_language)
		speaking = all_languages[species.default_language]

	var/ending = copytext(message, length(message))
	if (speaking)
		// This is broadcast to all mobs with the language,
		// irrespective of distance or anything else.
		if(speaking.flags & HIVEMIND)
			speaking.broadcast(src,trim(message))
			return
		//If we've gotten this far, keep going!
		verb = speaking.get_spoken_verb(ending)
	else
		if(ending=="!")
			verb=pick("exclaims","shouts","yells")
		if(ending=="?")
			verb="asks"

	if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
		return

	if(speaking && !speaking.name == "Noise")
		message = capitalize(trim(message))

	if(speech_problem_flag)
		var/list/handle_r = handle_speech_problems(message)
		message = handle_r[1]
		verb = handle_r[2]
		speech_problem_flag = handle_r[3]

	if(!message || stat)
		return
	if(speaking && speaking.flags & SIGNLANG)
		var/datum/organ/external/ORGAN
		var/signOK = 2
		ORGAN = organs_by_name["l_hand"]
		if(!ORGAN || ORGAN.status == ORGAN_DESTROYED)
			signOK -= 1
		ORGAN = organs_by_name["r_hand"]
		if(!ORGAN || ORGAN.status == ORGAN_DESTROYED)
			signOK -= 1
		if(!signOK)
			src << "You look at where your hands used to be and a glimmer of sadness strikes you as you relise you can't do sign language anymore"
			return

		message_mode = null
{'fraction_non_alphanumeric': 0.13067694944301628, 'fraction_numerical': 0.005784061696658098, 'mean_word_length': 4.305681818181818, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5990358', 'n_tokens_mistral': 1866, 'n_tokens_neox': 1627, 'n_words': 388}