diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 413fed1b..c6258d3f 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -198,3 +198,7 @@ GLOBAL_LIST_INIT(numbers_as_words, world.file2list("strings/numbers_as_words.txt
GLOBAL_LIST_INIT(station_numerals, greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings())
GLOBAL_LIST_INIT(admiral_messages, list("Do you know how expensive these stations are?","Stop wasting my time.","I was sleeping, thanks a lot.","Stand and fight you cowards!","You knew the risks coming in.","Stop being paranoid.","Whatever's broken just build a new one.","No.", "null","Error: No comment given.", "It's a good day to die!"))
+
+GLOBAL_LIST_INIT(speech_verbs, list("default", "says", "gibbers", "states", "chitters", "declares", "bellows", "buzzes" ,"beeps", "chirps" ,"hisses" ,"poofs" ,"rattles", "mewls", "barks", "blorbles", "squeaks", "squawks", "flutters"))
+
+GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc))
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 53581bfd..1c79a396 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -45,6 +45,7 @@
destination.dna.uni_identity = uni_identity
destination.dna.blood_type = blood_type
destination.set_species(species.type, icon_update=0)
+ destination.dna.species.say_mod = species.say_mod
destination.dna.features = features.Copy()
destination.dna.real_name = real_name
destination.dna.nameless = nameless
@@ -64,6 +65,7 @@
new_dna.blood_type = blood_type
new_dna.features = features.Copy()
new_dna.species = new species.type
+ new_dna.species.say_mod = species.say_mod
new_dna.real_name = real_name
new_dna.nameless = nameless
new_dna.custom_species = custom_species
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 1a3e4e0b..94905ff6 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -182,6 +182,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/// Medical record note section
var/medical_records
+ var/custom_speech_verb = "default" //if your say_mod is to be something other than your races
+ var/custom_tongue = "default" //if your tongue is to be something other than your races
+
var/list/custom_names = list()
var/preferred_ai_core_display = "Blue"
var/prefered_security_department = SEC_DEPT_RANDOM
@@ -453,6 +456,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else if(use_skintones || mutant_colors)
dat += ""
+ dat += APPEARANCE_CATEGORY_COLUMN
+ dat += "
Speech preferences
"
+ dat += "Custom Speech Verb:
"
+ dat += "[custom_speech_verb]
"
+ dat += "Custom Tongue:
"
+ dat += "[custom_tongue]
"
+
if(HAIR in pref_species.species_traits)
dat += APPEARANCE_CATEGORY_COLUMN
@@ -2300,7 +2310,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/desiredlength = input(user, "Choose the max character length of shown Runechat messages. Valid range is 1 to [CHAT_MESSAGE_MAX_LENGTH] (default: [initial(max_chat_length)]))", "Character Preference", max_chat_length) as null|num
if (!isnull(desiredlength))
max_chat_length = clamp(desiredlength, 1, CHAT_MESSAGE_MAX_LENGTH)
-
+ if("tongue")
+ var/selected_custom_tongue = input(user, "Choose your desired tongue (none means your species tongue)", "Character Preference") as null|anything in GLOB.roundstart_tongues
+ if(selected_custom_tongue)
+ custom_tongue = selected_custom_tongue
+ if("speech_verb")
+ var/selected_custom_speech_verb = input(user, "Choose your desired speech verb (none means your species speech verb)", "Character Preference") as null|anything in GLOB.speech_verbs
+ if(selected_custom_speech_verb)
+ custom_speech_verb = selected_custom_speech_verb
else
switch(href_list["preference"])
//CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj
@@ -2621,6 +2638,18 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else
character.Digitigrade_Leg_Swap(TRUE)
+ //speech stuff
+ if(custom_tongue != "default")
+ var/new_tongue = GLOB.roundstart_tongues[custom_tongue]
+ if(new_tongue)
+ var/obj/item/organ/tongue/T = character.getorganslot(ORGAN_SLOT_TONGUE)
+ if(T)
+ qdel(T)
+ var/obj/item/organ/tongue/new_custom_tongue = new new_tongue
+ new_custom_tongue.Insert(character)
+ if(custom_speech_verb != "default")
+ character.dna.species.say_mod = custom_speech_verb
+
//let's be sure the character updates
character.update_body()
character.update_hair()
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index cd21ba94..73ac3fc2 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -309,6 +309,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["backbag"] >> backbag
S["jumpsuit_style"] >> jumpsuit_style
S["uplink_loc"] >> uplink_spawn_loc
+ S["custom_speech_verb"] >> custom_speech_verb
+ S["custom_tongue"] >> custom_tongue
S["feature_mcolor"] >> features["mcolor"]
S["feature_lizard_tail"] >> features["tail_lizard"]
S["feature_lizard_snout"] >> features["snout"]
@@ -478,6 +480,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["moth_markings"] = sanitize_inlist(features["moth_markings"], GLOB.moth_markings_list, "None")
features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None")
+ custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default")
+ custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default")
+
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
job_civilian_med = sanitize_integer(job_civilian_med, 0, 65535, initial(job_civilian_med))
@@ -542,6 +547,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style)
WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
WRITE_FILE(S["species"] , pref_species.id)
+ WRITE_FILE(S["custom_speech_verb"] , custom_speech_verb)
+ WRITE_FILE(S["custom_tongue"] , custom_tongue)
WRITE_FILE(S["feature_mcolor"] , features["mcolor"])
WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"])
WRITE_FILE(S["feature_human_tail"] , features["tail_human"])