diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index a5991c9bcb9..bd90e0be9f0 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -88,6 +88,7 @@ CREATE TABLE `characters` (
`socks` mediumtext NOT NULL,
`body_accessory` mediumtext NOT NULL,
`gear` mediumtext NOT NULL,
+ `autohiss` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql
index 845b8702fcd..94010ad1b74 100644
--- a/SQL/paradise_schema_prefixed.sql
+++ b/SQL/paradise_schema_prefixed.sql
@@ -88,6 +88,7 @@ CREATE TABLE `SS13_characters` (
`socks` mediumtext NOT NULL,
`body_accessory` mediumtext NOT NULL,
`gear` mediumtext NOT NULL,
+ `autohiss` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm
index b1781de3314..87a8805ca7e 100644
--- a/code/__DEFINES/language.dm
+++ b/code/__DEFINES/language.dm
@@ -17,4 +17,9 @@
#define NONGLOBAL 32 // Do not add to general languages list
#define INNATE 64 // All mobs can be assumed to speak and understand this language (audible emotes)
#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
-#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
\ No newline at end of file
+#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
+
+//Auto-accent level defines.
+#define AUTOHISS_OFF 0
+#define AUTOHISS_BASIC 1
+#define AUTOHISS_FULL 2
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index 700b5e0f542..bf5eedb2075 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -147,6 +147,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/alt_head = "None" //Alt head style.
var/species = "Human"
var/language = "None" //Secondary language
+ var/autohiss_mode = AUTOHISS_OFF //Species autohiss level. OFF, BASIC, FULL.
var/body_accessory = null
@@ -289,6 +290,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(species == "Grey")
dat += "Voice: [speciesprefs ? "Wingdings" : "Normal"]
"
dat += "Secondary Language: [language]
"
+ if(species in list("Unathi", "Tajaran", "Plasmaman", "Kidan"))
+ dat += "Auto-accent: [autohiss_mode == 2 ? "Full" : (autohiss_mode == 1 ? "Basic" : "Off")]
"
dat += "Blood Type: [b_type]
"
if(species in list("Human", "Drask", "Vox"))
dat += "Skin Tone: [species == "Vox" ? "[s_tone]" : "[-s_tone + 35]/220"]
"
@@ -1342,6 +1345,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
//Reset prosthetics.
organ_data = list()
rlimb_data = list()
+
+ if(!(species in list("Unathi", "Tajaran", "Plasmaman", "Kidan")))
+ autohiss_mode = 0
if("speciesprefs")
speciesprefs = !speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0.
if("language")
@@ -1366,6 +1372,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
language = input("Please select a secondary language", "Character Generation", null) in new_languages
+ if("autohiss_mode")
+ if(species in list("Unathi", "Tajaran", "Plasmaman", "Kidan"))
+ var/list/autohiss_choice = list("Off" = 0, "Basic" = 1, "Full" = 2)
+ var/new_autohiss_pref = input(user, "Choose your character's auto-accent level:", "Character Preference") as null|anything in autohiss_choice
+ autohiss_mode = autohiss_choice[new_autohiss_pref]
+
if("metadata")
var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null
if(new_metadata)
diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm
index 02d246b4f70..579699a9414 100644
--- a/code/modules/client/preference/preferences_mysql.dm
+++ b/code/modules/client/preference/preferences_mysql.dm
@@ -175,7 +175,8 @@
speciesprefs,
socks,
body_accessory,
- gear
+ gear,
+ autohiss
FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' AND slot='[slot]'"})
if(!query.Execute())
var/err = query.ErrorMsg()
@@ -268,6 +269,7 @@
socks = query.item[63]
body_accessory = query.item[64]
gear = params2list(query.item[65])
+ autohiss_mode = text2num(query.item[66])
//Sanitize
var/datum/species/SP = all_species[species]
@@ -315,6 +317,7 @@
undershirt = sanitize_text(undershirt, initial(undershirt))
backbag = sanitize_text(backbag, initial(backbag))
b_type = sanitize_text(b_type, initial(b_type))
+ autohiss_mode = sanitize_integer(autohiss_mode, 0, 2, initial(autohiss_mode))
alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option))
job_support_high = sanitize_integer(job_support_high, 0, 65535, initial(job_support_high))
@@ -427,7 +430,8 @@
speciesprefs='[speciesprefs]',
socks='[socks]',
body_accessory='[body_accessory]',
- gear='[gearlist]'
+ gear='[gearlist]',
+ autohiss='[autohiss_mode]'
WHERE ckey='[C.ckey]'
AND slot='[default_slot]'"}
)
@@ -467,7 +471,7 @@
gen_record,
player_alt_titles,
disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs,
- socks, body_accessory, gear)
+ socks, body_accessory, gear, autohiss)
VALUES
('[C.ckey]', '[default_slot]', '[sanitizeSQL(metadata)]', '[sanitizeSQL(real_name)]', '[be_random_name]','[gender]',
@@ -497,7 +501,7 @@
'[sanitizeSQL(gen_record)]',
'[playertitlelist]',
'[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]',
- '[socks]', '[body_accessory]', '[gearlist]')
+ '[socks]', '[body_accessory]', '[gearlist]', '[autohiss_mode]')
"}
)
diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm
index 4506ce50cfb..0c2c6defeb8 100644
--- a/code/modules/mob/living/autohiss.dm
+++ b/code/modules/mob/living/autohiss.dm
@@ -1,8 +1,3 @@
-
-#define AUTOHISS_OFF 0
-#define AUTOHISS_BASIC 1
-#define AUTOHISS_FULL 2
-
#define AUTOHISS_NUM 3
@@ -10,20 +5,17 @@
return message // no autohiss at this level
/mob/living/carbon/human/handle_autohiss(message, datum/language/L)
- if(!client || client.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off
+ if(!client || client.prefs.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off
return message
- return species.handle_autohiss(message, L, client.autohiss_mode)
-
-/client
- var/autohiss_mode = AUTOHISS_OFF
+ return species.handle_autohiss(message, L, client.prefs.autohiss_mode)
/client/verb/toggle_autohiss()
set name = "Toggle Auto-Accent"
set desc = "Toggle automatic accents for your species"
set category = "OOC"
- autohiss_mode = (autohiss_mode + 1) % AUTOHISS_NUM
- switch(autohiss_mode)
+ prefs.autohiss_mode = (prefs.autohiss_mode + 1) % AUTOHISS_NUM
+ switch(prefs.autohiss_mode)
if(AUTOHISS_OFF)
to_chat(src, "Auto-hiss is now OFF.")
if(AUTOHISS_BASIC)
@@ -31,7 +23,7 @@
if(AUTOHISS_FULL)
to_chat(src, "Auto-hiss is now FULL.")
else
- autohiss_mode = AUTOHISS_OFF
+ prefs.autohiss_mode = AUTOHISS_OFF
to_chat(src, "Auto-hiss is now OFF.")
/datum/species
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index 04cbbe653ba..dffadb528c3 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -897,7 +897,7 @@
oxy_mod = 0
death_message = "gives one shrill beep before falling limp, their monitor flashing blue before completely shutting off..."
- flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | RADIMMUNE | ALL_RPARTS| NOTRANSSTING
+ flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | RADIMMUNE | ALL_RPARTS | NOTRANSSTING
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY
dietflags = 0 //IPCs can't eat, so no diet