From 7fbdeb2a02ce3c11e4baca258e1a63ff40e4ccbc Mon Sep 17 00:00:00 2001 From: Alberyk Date: Fri, 3 Jul 2020 15:36:08 -0300 Subject: [PATCH] Adds an accent system (#9196) --- SQL/migrate/V051__accents.sql | 6 + aurorastation.dme | 6 + code/controllers/subsystems/records.dm | 14 +- code/game/machinery/telecomms/broadcaster.dm | 8 +- code/modules/background/accent/accent.dm | 4 + code/modules/background/accent/diona.dm | 4 + code/modules/background/accent/human.dm | 126 ++++++++++++++++++ code/modules/background/accent/skrell.dm | 5 + code/modules/background/accent/tajara.dm | 68 ++++++++++ code/modules/background/accent/unathi.dm | 27 ++++ code/modules/background/defines.dm | 42 ++++++ .../preference_setup/general/05_background.dm | 38 +++++- code/modules/client/preferences.dm | 3 + code/modules/clothing/masks/voice.dm | 10 ++ .../spacesuits/rig/modules/utility.dm | 8 +- code/modules/mob/hear_say.dm | 17 ++- code/modules/mob/language/generic.dm | 5 +- code/modules/mob/language/language.dm | 1 + code/modules/mob/language/station.dm | 7 + code/modules/mob/living/carbon/human/human.dm | 32 +++++ .../mob/living/carbon/human/human_defines.dm | 1 + .../living/carbon/human/species/species.dm | 3 + .../human/species/station/diona/diona.dm | 3 + .../species/station/human/human_subspecies.dm | 1 + .../carbon/human/species/station/ipc/ipc.dm | 3 + .../species/station/ipc/ipc_subspecies.dm | 8 ++ .../human/species/station/skrell/skrell.dm | 3 + .../human/species/station/tajara/tajara.dm | 3 + .../station/tajara/tajaran_subspecies.dm | 4 + .../human/species/station/unathi/unathi.dm | 3 + .../human/species/station/vaurca/vaurca.dm | 2 + code/modules/nano/modules/human_appearance.dm | 17 +++ html/changelogs/alberyk-accent.yml | 6 + icons/accent_tags.dmi | Bin 0 -> 2559 bytes nano/templates/appearance_changer.tmpl | 13 ++ 35 files changed, 489 insertions(+), 12 deletions(-) create mode 100644 SQL/migrate/V051__accents.sql create mode 100644 code/modules/background/accent/accent.dm create mode 100644 code/modules/background/accent/diona.dm create mode 100644 code/modules/background/accent/human.dm create mode 100644 code/modules/background/accent/skrell.dm create mode 100644 code/modules/background/accent/tajara.dm create mode 100644 code/modules/background/accent/unathi.dm create mode 100644 html/changelogs/alberyk-accent.yml create mode 100644 icons/accent_tags.dmi diff --git a/SQL/migrate/V051__accents.sql b/SQL/migrate/V051__accents.sql new file mode 100644 index 00000000000..e95f39e5683 --- /dev/null +++ b/SQL/migrate/V051__accents.sql @@ -0,0 +1,6 @@ +-- +-- Adds support for accents as a character option in PR #9196. +-- + +ALTER TABLE `ss13_characters` + ADD COLUMN `accent` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci' AFTER `religion`; \ No newline at end of file diff --git a/aurorastation.dme b/aurorastation.dme index be4cc6e7180..a45d8d2af8a 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1237,6 +1237,12 @@ #include "code\modules\awaymissions\trigger.dm" #include "code\modules\awaymissions\zlevel.dm" #include "code\modules\background\defines.dm" +#include "code\modules\background\accent\accent.dm" +#include "code\modules\background\accent\diona.dm" +#include "code\modules\background\accent\human.dm" +#include "code\modules\background\accent\skrell.dm" +#include "code\modules\background\accent\tajara.dm" +#include "code\modules\background\accent\unathi.dm" #include "code\modules\background\citizenship\citizenship.dm" #include "code\modules\background\citizenship\human.dm" #include "code\modules\background\citizenship\ipc.dm" diff --git a/code/controllers/subsystems/records.dm b/code/controllers/subsystems/records.dm index 250b072da72..a0105ae3942 100644 --- a/code/controllers/subsystems/records.dm +++ b/code/controllers/subsystems/records.dm @@ -18,6 +18,7 @@ var/list/citizenships = list() var/list/religions = list() + var/list/accents = list() /datum/controller/subsystem/records/Initialize() ..() @@ -26,6 +27,7 @@ InitializeCitizenships() InitializeReligions() + InitializeAccents() /datum/controller/subsystem/records/New() records = list() @@ -284,7 +286,7 @@ /datum/controller/subsystem/records/proc/get_manifest_json() if(manifest.len) return manifest_json - + get_manifest_list() return manifest_json @@ -337,6 +339,16 @@ if (!religions.len) crash_with("No citizenships located in SSrecords.") +/datum/controller/subsystem/records/proc/InitializeAccents() + for (var/type in subtypesof(/datum/accent)) + var/datum/accent/accent = new type() + + accents[accent.name] = accent + + if (!accents.len) + crash_with("No accents located in SSrecords.") + + /datum/controller/subsystem/records/proc/get_religion_record_name(var/target_religion) var/datum/religion/religion = SSrecords.religions[target_religion] if(religion) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index e8ec4b2bdfe..3381171ac3e 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -231,6 +231,12 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/list/obj/item/device/radio/radios = list() + // --- Gets the accent icon, if there is any --- + var/accent_icon + if(ishuman(M) && speaking) + var/mob/living/carbon/human/H = M + accent_icon = H.get_accent_icon(speaking) + // --- Broadcast only to intercom devices --- if(data == 1) @@ -346,7 +352,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/part_b_extra = "" if(data == 3) // intercepted radio message part_b_extra = " (Intercepted)" - var/part_a = "\[[freq_text]\][part_b_extra] " // goes in the actual output + var/part_a = "[accent_icon ? accent_icon + " " : ""]\[[freq_text]\][part_b_extra] " // goes in the actual output // --- Some more pre-message formatting --- var/part_b = " " // Tweaked for security headsets -- TLE diff --git a/code/modules/background/accent/accent.dm b/code/modules/background/accent/accent.dm new file mode 100644 index 00000000000..ae30f2b692c --- /dev/null +++ b/code/modules/background/accent/accent.dm @@ -0,0 +1,4 @@ +/datum/accent + var/name + var/description = "Unga Dunga." + var/tag_icon //those icons should go in accent_tags.dmi \ No newline at end of file diff --git a/code/modules/background/accent/diona.dm b/code/modules/background/accent/diona.dm new file mode 100644 index 00000000000..3ebc156d870 --- /dev/null +++ b/code/modules/background/accent/diona.dm @@ -0,0 +1,4 @@ +/datum/accent/diona + name = ACCENT_DIONA + description = "An innate accent to all Diona, and can be detected in Diona across the Orion Spur, no matter the distance. It can be profoundly noticed on the sh, sk and ch sounding syllables." + tag_icon = "diona" \ No newline at end of file diff --git a/code/modules/background/accent/human.dm b/code/modules/background/accent/human.dm new file mode 100644 index 00000000000..3abe44b9e7d --- /dev/null +++ b/code/modules/background/accent/human.dm @@ -0,0 +1,126 @@ +/datum/accent/ceti + name = ACCENT_CETI + description = "Often described as the \"true\" way of speaking Tau Ceti Basic, the Biesellite accent is easy to reproduce due to the phonetics of TCB." + tag_icon = "biesel" + +/datum/accent/coc + name = ACCENT_COC + description = "The frontier is home to an unknowably vast amount of humans and settlements, covering everything from small outposts of only a few hundred to major planets such as \ + Xanu Prime. The Frontiersfolk are as diverse as their accents are, but the most common \"frontier accent\" is generally regarded as that of Xanu Prime - the arguable capital of \ + the massive Coalition of Colonies." + tag_icon = "coalition" + +/datum/accent/elyra + name = ACCENT_ELYRA + description = "The typical Elyran accent is an odd combination of Tau Ceti Basic and Sol Common due to the Republic's independence from the Sol Alliance. The standard language \ + of the Republic of Elyra is Elyran Common, a variation upon standard Sol Common that is closer to Tau Ceti Basic than other Sol Common dialects." + tag_icon = "elyra" + +/datum/accent/eridani + name = ACCENT_ERIDANI + description = "The accent of Eridanian \"suits\" is almost universally looked upon as the accent of corporate excellence throughout the Sol Alliance and Republic of Biesel. \ + Speaking with this accent is a surefire way to get one's foot into the door in the corporate world, and wealthier Suits often devote time and resources to refining their \ + accent to be more properly Eridanian." + tag_icon = "eridani" + +/datum/accent/eridani_dreg + name = ACCENT_ERIDANIDREG + description = "The Eridanian \"dreg\" accent is almost universally looked upon as the accent of petty criminals and ne'er-do-wells throughout the Orion Spur. \ + Speaking with this accent in the proximity of most humans is a surefire way to gain their suspicion, and those speaking with this accent often find themselves under \ + enhanced security surveillance in corporate facilities. Eagle Corp, one of the major employers of dregs in Eridani, devotes a significant amount of its training \ + to making its dreg recruits drop this distinctive accent." + tag_icon = "eridani_dreg" + +/datum/accent/sol + name = ACCENT_SOL + description = "The typical Solarian accent has a hundred tiny variants and can be found on a multitude of planets in countless systems, and is often simply regarded \ + as the \"accent of humanity\" due to its prevalence. It can be found on planets as prominent as Earth or as obscure as settlements of only a few million in the Sol Alliance's Outer Ring." + tag_icon = "sol" + +/datum/accent/scarab + name = ACCENT_SCARAB + description = "The common accent of the Scarab Fleet has dozens, perhaps hundreds, of small variations due to the Fleet itself being spread throughout a massive number of \ + individual ships, most of which have their own unique variations upon the standard Scarab accent." + tag_icon = "scarabs" + +/datum/accent/silversun + name = ACCENT_SILVERSUN + description = "The native accent of Silversun is a sing-songy take on standard Sol Common that has, since massive investment into the planet by Idris Incorporated, come to be \ + associated with the planet's renowned tourism industry. Many native residents of Silversun are bitter that their accent - and planet - are seen as nothing more than an enormous \ + vacation retreat by the greater Orion Spur." + tag_icon = "silversun" + +/datum/accent/phong + name = ACCENT_PHONG + description = "New Hai Phongese Common is, compared to the typical Sol Common accent, much more tonal. This has lent it a distinctive accent that is easy to tell apart from the \ + standard Sol Common accent associated with the Solarian core worlds. Due to the hazardous environmental conditions present on New Hai Phong, many residents of New Hai Phong \ + carry another distinctive auditory cue: coughing and wheezing due to asthma." + tag_icon = "new_hai_phong" + +/datum/accent/mars + name = ACCENT_MARTIAN + description = "Martian Common is a more guttural form of Sol Common that borrows some elements of Freespeak. The distinctive accent is, as a result, looked down upon as \ + a \"hick\" dialect on Luna and Venus and regarded as the dialect of quarrelsome and annoying Martians elsewhere. Some Martians go to great lengths to hide their accents due to \ + this reputation, which is still alive in the Republic of Biesel despite its separation from the greater Sol Alliance." + tag_icon = "mars" + +/datum/accent/luna + name = ACCENT_LUNA + description = "The Lunarian accent is regarded throughout the Sol Alliance, and beyond, as a distinctive mark of being Lunarian. The accent is extremely hard for immigrants to Luna \ + to pick up and replicate, and is carefully maintained by Lunarians abroad to keep their accent distinct. Many Idris Incorporated IPCs are programmed with Lunarian accents to make \ + them seem high-class in both appearance and in accent." + tag_icon = "luna" + +/datum/accent/gibson + name = ACCENT_GIBSON + description = "The New Gibsoner accent is very close to the accent of Tau Ceti proper, due to the nature of the planet’s colonization. However, New Gibsoners are known for talking \ + with a faster and more clipped accent than those from Biesel and, at times, sound as if they are tripping over their words due to the rapid pace at which they speak." + tag_icon = "gibson" + +/datum/accent/konyang + name = ACCENT_KONYAN + description = "The Konyanger Common accent is quite similar to standard Sol Common, but has drawn some influence from Freespeak due to Konyang's position near the border between \ + the Sol Alliance and the Coalition of Colonies. A significant amount of IPCs possess a Konyanger accent, due to the planet being the origin of IPCs and a major producer of them." + tag_icon = "konyang" + +/datum/accent/himeo + name = ACCENT_HIMEO + description = "Himean Common is more guttural and harsh-sounding than the typical Sol Common accent, due to Himeo's position in the Coalition of Colonies. The Himean accent and its \ + distinctive guttural method of speaking are easily distinguishable from other Sol Common speakers, even when speaking Tau Ceti Basic or Freespeak. Himean Common has the unusual \ + reputation of making its speaker always sound angry, no matter the speaker's mood, due to its more guttural nature." + tag_icon = "himeo" + +/datum/accent/vysoka + name = ACCENT_VYSOKA + description = "The typical Vyoskan accent is regarded as a throatier and harsher variation of Freespeak, with the planetary accent possessing many harsh tones. Some non-Vysokans have \ + noted that the accent sounds similar to Himean Common at times, due to both accents being more guttural than average. However, the Vysokan accent remains distinctive from Himean \ + Common due to its roots in Freespeak rather than Sol Common." + tag_icon = "vysoka" + +/datum/accent/venus + name = ACCENT_VENUS + description = "Venusian Common (referred time as Cytherean Common on Venus itself) is often regarded as the \"most common\" form of Sol Common due to the prevalence of its entertainment \ + industry. It sounds extremely similar to Earthbound Sol Common. Many high-end entertainment IPCs used throughout human space come pre-programmed with this accent, due to its \ + association with the Venusian entertainment industry." + tag_icon = "venus" + +/datum/accent/venusjin + name = ACCENT_VENUSJIN + description = "Jintarian Common is looked down upon on Venus itself for its association with Venusian surfacers, and is often used by the planet's entertainment industry to mark a \ + character as villainous or untrustworthy. As a result, it is often looked down upon throughout human space." + tag_icon = "venus_surfacer" + +/datum/accent/dominia + name = ACCENT_DOMINIA + description = "The most common Dominian accent is Vulgar Morozi, a variation of Sol Common found upon Moroz itself. Dominion-spoken Sol Common and Tau Ceti Basic are both heavily \ + influenced by Tradeband, the common language of both human and unathi nobility in the Empire. Vulgar Morozi has regional variations on the colonies of the Dominian Empire, and in \ + the rebellious Morozian region of Fisanduh. The Fisanduhian accent is considered to be a distinctive higher-pitched variation of Vulgar Morozi that is often suppressed by insurgents \ + to better blend in with the greater Imperial population." + tag_icon = "dominia" + +/datum/accent/jupiter + name = ACCENT_JUPITER + description = "The Jovian accent is an odd mish-mash of accents from Jupiter's various moons, and has heavy variation on each of the moons. On Idris Incorporated-dominated Europa, \ + the Jovian accent often takes on traces of Tradeband due to the amount of high-income tourism, while the Castillean Jovian accent is known for the rapid, breathless pace at which it \ + is typically spoken. Ganymede is often seen as the \"standard\" Jovian accent, though some on Castillo vehemently believe that the Castillian accent should be the standard." + tag_icon = "jupiter" \ No newline at end of file diff --git a/code/modules/background/accent/skrell.dm b/code/modules/background/accent/skrell.dm new file mode 100644 index 00000000000..a8ccac8ec4f --- /dev/null +++ b/code/modules/background/accent/skrell.dm @@ -0,0 +1,5 @@ +/datum/accent/skrell + name = ACCENT_SKRELL + description = "The typical accent found in the Jargon Federation. It has remained the most popular accent for just under a millennium due to the influences of the psionic field Skrell \ + share, and government influence; however it has not remained unchanged, especially as of recent due to the addition of alien populations to the Jargon Federation." + tag_icon = "skrell" \ No newline at end of file diff --git a/code/modules/background/accent/tajara.dm b/code/modules/background/accent/tajara.dm new file mode 100644 index 00000000000..a6c9ba06e11 --- /dev/null +++ b/code/modules/background/accent/tajara.dm @@ -0,0 +1,68 @@ +/datum/accent/republican_siik + name = ACCENT_REPUBICLANSIIK + description = "The dialect of north and central Ras'nrr. It was spoken by the Hadii dynasty and its subjects before being adopted as the official version of the People's Republic \ + Siik'maas. This variation is taught in all Republican schools since the end of the first revolution and is considered as the most pure and correct form. PRA citizens are encouraged \ + to learn and adopt it, as speaking another accent is frowned upon. It is notable for its unusually rigid grammatical construction as opposed to most other Adhomian dialects. \ + Republican Siik'maas is the language of Hadiist loyalists, both in and outside of S'rand'marr." + tag_icon = "tajara" + +/datum/accent/nazira_siik + name = ACCENT_NAZIRASIIK + description = "Nazira Siik'maas is native to the southern regions of Ras'nrr. This accent is the oldest and most solemn form of Siik'maas, avoiding contractions of words and speaking \ + its sentences slowly. It is commonly associated with the church of S'rand'marr, due to its proximity to Sana Sahira. Priests are taught to replicate this dialect when conducting \ + religious service." + tag_icon = "tajara_nazira" + +/datum/accent/crevan + name = ACCENT_CREVAN + description = "Once the dialect of merchants and sailors across all Adhomai. Born from the melting pot that is Crevus, where Tajara from all the planet would bring and mix their \ + cultures. Thanks to the importance of the city during its trading age, it can be found in most Tajara ports as well. Crevan Creole is known for its heavy focus on nasal sounds, with many \ + Adhomian comedians parodying it." + tag_icon = "tajara_crevan" + +/datum/accent/dasnrra_siik + name = ACCENT_DASNRRASIIK + description = "Found on the island of Das'nrra, this accent is famous for its emphasis at the end of vowels and uncommon pronunciation of glottal stops. While tracing its origins back \ + to the rural population, it was shaped by the urban workers that emerged after the first revolution. It is associated with Democratic People's Republic citizens and its offworld \ + community." + tag_icon = "tajara_dasnrra" + +/datum/accent/high_harr_siik + name = ACCENT_HIGHHARRSIIK + description = "Used by the natives of northern Harr'masir. It is deemed to be a rustic and harsh-sounding form of siik'maas; the accent is associated with peasants and uneducated \ + Tajara. It is the most common dialect among New Kingdom's commoners. The nobility usually attempts to mask this accent due to its relationship with the common people. It is also \ + spoken by the New Kingdom population living in Tau Ceti." + tag_icon = "tajara_high_harr" + +/datum/accent/low_harr_siik + name = ACCENT_LOWHARRSIIK + description = "Native to the southern area of Harr'masir. In comparison to other Siik'maas dialects - it is the one that deviates the most from the standard version. Due to Republican \ + propaganda, it has gained the fame of being the tongue of criminals and guerrilla fighters. Most speakers are Democratic People's Republic citizens. Its words are spoken in a hushed \ + manner." + tag_icon = "tajara_low_harr" + +/datum/accent/amohda_siik + name = ACCENT_AMOHDASIIK + description = "Spoken by the Tajara from the island of Amohda. Despite past Republican attempts to destroy this dialect; it survived and is now undergoing a period of revival by Amohdan \ + nationalists. It can also be found in the New kingdom because of the Amohda Exiles. Due to royalist influence, it has many Ya'ssa loan words. Amohdan Siik'maas has a characteristic \ + drawl tone to it." + tag_icon = "tajara_amohda" + +/datum/accent/rural_delvahhi + name = ACCENT_RURALDELVAHHI + description = "The form of Delvahhi spoken by settled zhan communities. It has been heavily influenced by Siik'maas. It is also used as the liturgical language by some Ma'ta'ke \ + priests. Rural Delvahhi speakers usually speak siik'maas with a slower and throaty tone." + tag_icon = "tajara_rural" + +/datum/accent/nomad_delvahhi + name = ACCENT_NOMADDELVAHHI + description = "The version of Delvahhi used by the Rhazar'Hrujmagh. It emerged after the breakup in the primordial Zhan-Khazan population. Unlike the rural dialect, it remained \ + relatively unchanged over time. It is far more guttural and brief than its sister tongue. " + tag_icon = "tajara_nomad" + +/datum/accent/old_yassa + name = ACCENT_OLDYASSA + description = "The tongue of the old Tajaran nobility, spoken by those who were born before the first revolution. It differs from the modern Ya'ssa by having a far more complex set \ + of rules, long-drawn-out sentences and compound words. Old Ya'ssa is a dying tongue; as the version taught by the New Kingdom of Adhomai has mostly replaced it in the post-revolution \ + noble generation." + tag_icon = "tajara_oldyassa" \ No newline at end of file diff --git a/code/modules/background/accent/unathi.dm b/code/modules/background/accent/unathi.dm new file mode 100644 index 00000000000..dda88d1cc2b --- /dev/null +++ b/code/modules/background/accent/unathi.dm @@ -0,0 +1,27 @@ +/datum/accent/hegemon_noble + name = ACCENT_HEGEMON_NOBLE + description = "The Noble Hegemonic accent is eloquent and flowing, staying near the front of the mouth. Airy and filled with hissing, this accent requires birth-right or years of \ + practice to properly convey. The families of Lords, Sk'akh Priests, noble warriors, and some merchants will often share this accent, and will mostly find the Sinta'Azaziba language \ + and Traditionalist accent more savage. The Noble Hegemonic accent is primarily found in the Untouched Lands, and originates from the Sinta'Unathi language." + tag_icon = "hegemon_noble" + +/datum/accent/hegemon_peasant + name = ACCENT_HEGEMON_PEASANT + description = "Lowborn guilds-workers, first-generation merchants, simple warrior levymen, and hundreds of other tasks for the common Clans - this is the most common accent for \ + Unathi, stereotypically. It still holds a slight air of royalty to it compared to the Traditional accents. It is most commonly found in the crowded Untouched Lands and in colonies. \ + It originates from the Sinta'Unathi language. " + tag_icon = "hegemon_peasant" + +/datum/accent/trad_noble + name = ACCENT_TRAD_NOBLE + description = "A more guttural, droning accent - although one that would demand respect on Moghes before the Contact War, and still demands it in the Wasteland. Primarily born from the \ + guttural intonations and physical movement required to communicate in Sinta'Azaziba, this Noble Traditional accent requires clan-training from a family member or shaman - and has \ + become either a sign of survival or defeat to most who see this ancient accent fading from existence." + tag_icon = "trad_noble" + +/datum/accent/trad_peasant + name = ACCENT_TRAD_PEASANT + description = "Primarily derived from the guttural intonations and physical movement of Sinta'Azaziba, common Unathi from the Wasteland would have this grittier speech pattern. \ + Although filled with variety due to the multitude of kingdoms composed in the Wasteland, the borders of where these accents used to be set no longer exist and have simply become \ + what it is now, struggling to find identity." + tag_icon = "trad_peasant" \ No newline at end of file diff --git a/code/modules/background/defines.dm b/code/modules/background/defines.dm index 138ad75ce92..7ed9463a652 100644 --- a/code/modules/background/defines.dm +++ b/code/modules/background/defines.dm @@ -45,3 +45,45 @@ #define RELIGION_HIVEPANTHEON "Hive Pantheon" #define RELIGION_PREIMMINENNCE "Preimminennce" #define RELIGION_PILOTDREAM "Pilot Dream" + +//accent defines + +#define ACCENT_CETI "Biesellite" +#define ACCENT_COC "Frontiersfolk" +#define ACCENT_ELYRA "Elyran" +#define ACCENT_ERIDANI "Eridanian" +#define ACCENT_ERIDANIDREG "Eridanian Dreg" +#define ACCENT_SOL "Solarian" +#define ACCENT_SCARAB "Scarab Fleets" +#define ACCENT_SILVERSUN "Silversun" +#define ACCENT_PHONG "New Hai Phongese" +#define ACCENT_MARTIAN "Martian" +#define ACCENT_KONYAN "Konyanger" +#define ACCENT_LUNA "Lunan" +#define ACCENT_GIBSON "New Gibsoner" +#define ACCENT_HIMEO "Himean" +#define ACCENT_VYSOKA "Vysokan" +#define ACCENT_VENUS "Venusian Cytherean" +#define ACCENT_VENUSJIN "Venusian Jintarian" +#define ACCENT_DOMINIA "Dominian" +#define ACCENT_JUPITER "Jovian" + +#define ACCENT_REPUBICLANSIIK "Republican Siik'maas" +#define ACCENT_NAZIRASIIK "Nazira Siik'maas" +#define ACCENT_CREVAN "Crevan Creole" +#define ACCENT_DASNRRASIIK "Das'nrra Siik'maas:" +#define ACCENT_HIGHHARRSIIK "High-Harr'masir Siik'maas" +#define ACCENT_LOWHARRSIIK "Lower-Harr'masir Siik'maas" +#define ACCENT_AMOHDASIIK "Amohdan Siik'maas" +#define ACCENT_RURALDELVAHHI "Rural Delvahhi" +#define ACCENT_NOMADDELVAHHI "Nomadic Delvahhi" +#define ACCENT_OLDYASSA "Old Ya'ssa" + +#define ACCENT_HEGEMON_NOBLE "Noble Hegemonic" +#define ACCENT_HEGEMON_PEASANT "Peasant Hegemonic" +#define ACCENT_TRAD_NOBLE "Noble Traditional" +#define ACCENT_TRAD_PEASANT "Peasant Traditional" + +#define ACCENT_SKRELL "Standard Nral'Malic" + +#define ACCENT_DIONA "Diona" \ No newline at end of file diff --git a/code/modules/client/preference_setup/general/05_background.dm b/code/modules/client/preference_setup/general/05_background.dm index 69bd4d5a111..d7d2ebbed52 100644 --- a/code/modules/client/preference_setup/general/05_background.dm +++ b/code/modules/client/preference_setup/general/05_background.dm @@ -8,6 +8,7 @@ S["gen_record"] >> pref.gen_record S["citizenship"] >> pref.citizenship S["religion"] >> pref.religion + S["accent"] >> pref.accent S["nanotrasen_relation"] >> pref.nanotrasen_relation /datum/category_item/player_setup_item/general/background/save_character(var/savefile/S) @@ -16,6 +17,7 @@ S["gen_record"] << pref.gen_record S["citizenship"] << pref.citizenship S["religion"] << pref.religion + S["accent"] << pref.accent S["nanotrasen_relation"] << pref.nanotrasen_relation /datum/category_item/player_setup_item/general/background/gather_load_query() @@ -33,7 +35,8 @@ "vars" = list( "nt_relation" = "nanotrasen_relation", "citizenship", - "religion" + "religion", + "accent" ), "args" = list("id") ) @@ -56,7 +59,9 @@ "ss13_characters" = list( "nt_relation", "citizenship", - "religion","id" = 1, + "religion", + "accent", + "id" = 1, "ckey" = 1 ) ) @@ -70,6 +75,7 @@ "nt_relation" = pref.nanotrasen_relation, "citizenship" = pref.citizenship, "religion" = pref.religion, + "accent" = pref.accent, "id" = pref.current_character, "ckey" = PREF_CLIENT_CKEY ) @@ -87,6 +93,9 @@ if(!(pref.religion in S.allowed_religions)) pref.religion = RELIGION_NONE + if(!(pref.accent in S.allowed_accents)) + pref.accent = S.default_accent + pref.nanotrasen_relation = sanitize_inlist(pref.nanotrasen_relation, COMPANY_ALIGNMENTS, initial(pref.nanotrasen_relation)) /datum/category_item/player_setup_item/general/background/content(var/mob/user) @@ -95,6 +104,7 @@ "[current_map.company_name] Relation: [pref.nanotrasen_relation]
", "Citizenship: [pref.citizenship]
", "Religion: [pref.religion]
", + "Accent: [pref.accent]
", "
Records:
" ) @@ -142,6 +152,18 @@ sanitize_character() return TOPIC_REFRESH + else if(href_list["accent"]) + var/choice = input(user, "Please choose an accent.", "Character Preference", pref.accent) as null|anything in S.allowed_accents + if(!choice || !CanUseTopic(user)) + return TOPIC_NOACTION + show_accent_menu(user, choice) + return TOPIC_REFRESH + + else if(href_list["set_accent"]) + pref.accent = (html_decode(href_list["set_accent"])) + sanitize_character() + return TOPIC_REFRESH + else if(href_list["set_medical_records"]) var/new_medical = sanitize(input(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) if(!isnull(new_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) @@ -194,4 +216,14 @@ var/list/dat = list("
[religion.name]
") dat += "
[religion.description]" dat += "
\[Select\]
" - show_browser(user, dat.Join(), "window=religionpreview;size=400x500") \ No newline at end of file + show_browser(user, dat.Join(), "window=religionpreview;size=400x500") + +/datum/category_item/player_setup_item/general/background/proc/show_accent_menu(mob/user, selected_accent) + var/datum/accent/accent = SSrecords.accents[selected_accent] + + if(accent) + + var/list/dat = list("
[accent.name]
") + dat += "
[accent.description]" + dat += "
\[Select\]
" + show_browser(user, dat.Join(), "window=accentpreview;size=400x500") \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3b4be6fc0ab..21e40625c9d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -80,6 +80,7 @@ datum/preferences var/citizenship = "None" //Current home system. var/faction = "None" //Antag faction/general associated faction. var/religion = "None" //Religious association. + var/accent = "None" //Character accent. //Mob preview var/icon/preview_icon = null @@ -370,6 +371,7 @@ datum/preferences character.citizenship = citizenship character.employer_faction = faction character.religion = religion + character.accent = accent character.skills = skills character.used_skillpoints = used_skillpoints @@ -530,6 +532,7 @@ datum/preferences citizenship = "None" faction = "None" religion = "None" + accent = "None" species = "Human" diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm index 708c2f92025..38fd88871c3 100644 --- a/code/modules/clothing/masks/voice.dm +++ b/code/modules/clothing/masks/voice.dm @@ -3,6 +3,7 @@ desc = "A voice scrambling module. If you can see this, report it as a bug on the tracker." var/voice //If set and item is present in mask/suit, this name will be used for the wearer's speech. var/active + var/current_accent = ACCENT_CETI /obj/item/clothing/mask/gas/voice var/obj/item/voice_changer/changer @@ -25,6 +26,15 @@ changer.voice = voice to_chat(usr, span("notice", "You are now mimicking [changer.voice].")) +/obj/item/clothing/mask/gas/voice/verb/Toggle_Accent() + set category = "Object" + set src in usr + + var/choice = input(usr, "Please choose an accent to mimick.") as null|anything in SSrecords.accents + if(choice) + to_chat(usr, span("notice", "You are now mimicking the [choice] accent.")) + changer.current_accent = choice + /obj/item/clothing/mask/gas/voice/Initialize() . = ..() changer = new(src) diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index b58649f86d7..41732a486c8 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -399,7 +399,7 @@ if(!..()) return 0 - var/choice= input("Would you like to toggle the synthesiser or set the name?") as null|anything in list("Enable","Disable","Set Name") + var/choice= input("Would you like to toggle the synthesiser, set the name or set an accent?") as null|anything in list("Enable","Disable","Set Name", "Set Accent") if(!choice) return 0 @@ -419,6 +419,12 @@ return 0 voice_holder.voice = raw_choice to_chat(usr, "You are now mimicking [voice_holder.voice].") + if("Set Accent") + var/raw_choice = input(usr, "Please choose an accent to mimick.") as null|anything in SSrecords.accents + if(!raw_choice) + return 0 + voice_holder.current_accent = raw_choice + to_chat(usr, span("notice", "You are now mimicking the [raw_choice] accent.")) return 1 /obj/item/rig_module/maneuvering_jets diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 19bdd568e51..169b87d2cef 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -41,11 +41,15 @@ else message = stars(message) + var/accent_icon + var/speaker_name = speaker.name if(ishuman(speaker)) var/mob/living/carbon/human/H = speaker speaker_name = H.GetVoice() + accent_icon = H.get_accent_icon(language) + if(italics) message = "[message]" @@ -72,7 +76,7 @@ to_chat(src, "[speaker_name][alt_name] talks but you cannot hear \him.") else if(language) - on_hear_say("[track][speaker_name][alt_name] [language.format_message(message, verb)]") + on_hear_say("[track][accent_icon ? accent_icon + " " : ""][speaker_name][alt_name] [language.format_message(message, verb)]") else on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"") if (speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z)) @@ -141,6 +145,7 @@ speaker_name = "Unknown" var/changed_voice + var/accent_icon if(istype(src, /mob/living/silicon/ai) && !hard_to_hear) var/jobname // the mob's "job" @@ -153,7 +158,6 @@ changed_voice = 1 var/list/impersonated = new() var/mob/living/carbon/human/I = impersonated[speaker_name] - if(!I) for(var/mob/living/carbon/human/M in mob_list) if(M.real_name == speaker_name) @@ -205,15 +209,18 @@ if(prob(20)) to_chat(src, "You feel your headset vibrate but can hear nothing from it!") else - on_hear_radio(part_a, speaker_name, track, part_b, formatted) + on_hear_radio(part_a, speaker_name, track, part_b, formatted, accent_icon) /proc/say_timestamp() return "\[[worldtime2text()]\]" -/mob/proc/on_hear_radio(part_a, speaker_name, track, part_b, formatted) +/mob/proc/on_hear_radio(part_a, speaker_name, track, part_b, formatted, accent_icon) + var/accent_tag + if(accent_icon) + accent_tag = "" to_chat(src, "[part_a][speaker_name][part_b][formatted]") if(vr_mob) - to_chat(vr_mob, "[part_a][speaker_name][part_b][formatted]") + to_chat(vr_mob, "[part_a][accent_tag][speaker_name][part_b][formatted]") /mob/abstract/observer/on_hear_radio(part_a, speaker_name, track, part_b, formatted) to_chat(src, "[track][part_a][speaker_name][part_b][formatted]") diff --git a/code/modules/mob/language/generic.dm b/code/modules/mob/language/generic.dm index 33a3b15d0f5..6ead46d8f1e 100644 --- a/code/modules/mob/language/generic.dm +++ b/code/modules/mob/language/generic.dm @@ -11,7 +11,7 @@ /datum/language/noise/format_message_plain(message, verb) return message -/datum/language/noise/format_message_radio(message, verb) +/datum/language/noise/format_message_radio(message, verb, accent) return "[message]" /datum/language/noise/get_talkinto_msg_range(message) @@ -26,6 +26,7 @@ whisper_verb = "whispers" key = "0" flags = RESTRICTED|TCOMSSIM + allow_accents = TRUE syllables = list("a", "ado", "ago", "aj", "ajn", "al", "alt", "am", "amas", "an", "ang", "ante", "ap", "ard", "arma", "aro", "as", "aur", "aut", "aw", "ba", "bal", "bao", "be", "beau", "bel", "bi", "bit", "blu", "bo", "bod", "boj", "bojn", "bu", "but", "ca", "caj", "ce", "cer", "chun", "ci", "cion", "coj", "cor", "da", "daj", "dan", "de", "den", "dis", "do", "dor", "dorm", "eco", "ego", "ek", "eks", "en", "ero", "es", "est", "et", "eve", "fa", "fe", "fel", "fla", "foj", "fra", "fraz", "fros", "ful", "fut", "ga", "gan", "gar", "gi", "gis", "go", "gran", "ha", "han", "hav", "hom", "hong", "hu", "hum", "hushi", "ia", "iaj", "ica", "id", "idon", "il", "in", "ing", "io", "is", "iton", "iza", "ja", "ji", "jirou", "joj", "ka", "kaj", "kajo", "kan", "ke", "ket", "ki", "kna", "krio", "ku", "kui", "kuk", "kun", "kur", "la", "laca", "leng", "les", "li", "liao", "lib", @@ -50,6 +51,7 @@ colour = "say_quote" key = "2" flags = TCOMSSIM + allow_accents = TRUE syllables = list("a", "acc", "ai", "al", "ali", "am", "ama", "ami", "amo", "an", "ang", "arme", "ave", "ba", "bai", "bar", "bat", "bi", "blie", "bris", "ca", "can", "cant", "car", "care", "ce", "ci", "cis", "cit", "cla", "co", "cul", "cur", "curt", "da", "dam", "dans", "de", "di", "dier", "dim", "dins", "dorm", "du", "duro", "e", "eaux", "ec", "ecto", "ees", "ego", "el", "en", "ent", "er", "ere", "eres", "eri", "ero", "es", "et", "ex", "far", "fi", "fic", "fine", "fol", "foll", "fri", "fro", "gen", "gil", "go", "gran", "hab", "ho", "huc", "ia", "iam", "ibus", "idor", "ie", "iens", "ier", "ieur", "iis", "il", "in", "ine", "int", "ir", "is", "ise", "it", "itt", "jar", "je", "jo", "jor", "la", "lar", "lav", "le", "lees", "ler", "les", "li", "lib", "lie", "lo", "lu", "ma", "man", "manu", "mar", "mari", "mas", "me", "mea", @@ -66,6 +68,7 @@ colour = "rough" key = "3" flags = TCOMSSIM + allow_accents = TRUE syllables = list("a", "aan", "aas", "ab", "aba", "ad", "aee", "aft", "ag", "ai", "aise", "ak", "akee", "aq", "ar", "ata", "aur", "aus", "ba", "baat", "bach", "bad", "bahe", "band", "be", "ben", "ber", "bhaa", "bhu", "bra", "burt", "cap", "cer", "ch", "cha", "chaar", "chale", "chalo", "chil", "com", "da", "daa", "daaj", "dat", "de", "dee", "dhaa", "di", "die", "dik", "din", "diz", "do", "dos", "dosh", "durch", "eer", "ek", "er", "es", "fal", "fang", "fra", "fun", "ga", "gan", "gao", "gee", "geet", "gern", "gir", "gon", "gren", "gri", "gu", "guda", "ha", "haa", "hai", "hain", "har", "hat", "he", "hee", "heer", "hekt", "heu", "hit", "hn", "ho", "hua", "huk", "hul", "ich", "ig", "in", "isch", "ja", "jaa", "jad", "jan", "jao", "jar", "jas", "jee", "jiao", "jin", "jing ", "un", "ka", "kaha", "kana", "kar", "kara", "karo", "ke ", "kee", "keln", "kha", "khada", "khe", "khi", "ko", diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index 66f6bc266c0..c6da8140249 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -20,6 +20,7 @@ var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string var/list/partial_understanding // List of languages that can /somehwat/ understand it, format is: name = chance of understanding a word var/machine_understands = TRUE // Whether machines can parse and understand this language + var/allow_accents = FALSE /datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4, syllable_divisor=2) if(!syllables || !syllables.len) diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 7f9addc9860..53db2c0cd09 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -29,6 +29,7 @@ colour = "soghun" key = "o" flags = WHITELISTED|TCOMSSIM + allow_accents = TRUE space_chance = 40 syllables = list( "za", "az", "ze", "ez", "zi", "iz", "zo", "oz", "zu", "uz", "zs", "sz", @@ -40,6 +41,7 @@ "a", "a", "e", "e", "i", "i", "o", "o", "u", "u", "s", "s" ) partial_understanding = list(LANGUAGE_AZAZIBA = 25) + allow_accents = TRUE // tajaran languages /datum/language/tajaran @@ -56,6 +58,7 @@ "ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah", "hal","ket","jurl","mah","tul","cresh","azu","ragh","mro","mra","mrro","mrra") partial_understanding = list(LANGUAGE_SIIK_TAJR = 50, LANGUAGE_YA_SSA = 25, LANGUAGE_DELVAHII = 50) + allow_accents = TRUE /datum/language/tajaran/get_random_name(var/gender) @@ -108,6 +111,7 @@ "kan","aesi","fare","we","bash","arha","quara","zhir","sem","make","hrer","nja","rir","can","jhun","dar","rik","kah", "hal","kete","juril","mah","tul","cresh","azu","ragh","miro","mara","mrero","mrara") partial_understanding = list(LANGUAGE_SIIK_MAAS = 50) + allow_accents = TRUE /datum/language/delvahhi name = LANGUAGE_DELVAHII @@ -123,6 +127,7 @@ "ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah", "hal","ket","jurl","mah","tul","cresh","azu","ragh","mro","mra","mrro","mrra") partial_understanding = list(LANGUAGE_SIIK_MAAS = 50) + allow_accents = TRUE /datum/language/skrell name = LANGUAGE_SKRELLIAN @@ -134,6 +139,7 @@ key = "k" flags = WHITELISTED|TCOMSSIM syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") + allow_accents = TRUE /datum/language/skrell/get_random_name() var/new_name = "" @@ -240,6 +246,7 @@ "shang", "shen", "sheng", "shi", "sho", "shui", "si", "su", "sui", "sum", "sun", "swi", "ta", "tae", "tai", "tame", "tamen", "tan", "te", "tei", "ti", "tian", "to", "ton", "tsu", "ul", "wa", "wan", "wang", "wei", "wo", "xi", "xian", "xiao", "xing", "xiong", "xiu", "xu", "xuan", "xue", "ya", "yan", "yang", "yeong", "yi", "yige", "yin", "ying", "yiqi", "yong", "you", "yu", "yuli", "yuyi", "zai", "zao", "zhan", "zhang", "zhe", "zhen", "zheng", "zhuo", "zi", "zo", "zu", "zun", "zuo") + allow_accents = TRUE /datum/language/human/get_spoken_verb(var/msg_end) switch(msg_end) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e4203a3c6dd..e3c1832f03c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1992,3 +1992,35 @@ var/scale = min(1, round(P.damage / 50, 0.2)) var/matrix/M = new() B.transform = M.Scale(scale) + +/mob/living/carbon/human/proc/get_accent_icon(var/datum/language/speaking = null) + if(accent && speaking && speaking.allow_accents) + var/used_accent = accent //starts with the mob's default accent + + if(istype(back,/obj/item/rig)) //checks for the rig voice changer module + var/obj/item/rig/rig = back + if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.current_accent) + used_accent = rig.speech.voice_holder.current_accent + + for(var/obj/item/gear in list(wear_mask,wear_suit,head)) //checks for voice changers masks now + if(gear) + var/obj/item/voice_changer/changer = locate() in gear + if(changer && changer.active && changer.current_accent) + used_accent = changer.current_accent + + var/datum/accent/a = SSrecords.accents[used_accent] + var/final_icon = a.tag_icon + return "" + +/mob/living/carbon/human/proc/generate_valid_accent() + var/list/valid_accents = new() + for(var/current_accents in species.allowed_accents) + valid_accents += current_accents + + return valid_accents + +/mob/living/carbon/human/proc/set_accent(var/new_accent) + accent = new_accent + if(!(accent in species.allowed_accents)) + accent = species.default_accent + return TRUE diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index a4744e0ed9e..8bfd76fae2c 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -44,6 +44,7 @@ var/citizenship = "" var/employer_faction = "" var/religion = "" + var/accent = "" //Equipment slots var/obj/item/wear_suit = null diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index de2684f7a62..5a7d5c83723 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -236,6 +236,9 @@ var/list/allowed_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_SOL, CITIZENSHIP_COALITION, CITIZENSHIP_ELYRA, CITIZENSHIP_ERIDANI, CITIZENSHIP_DOMINIA) var/list/allowed_religions = list(RELIGION_NONE, RELIGION_OTHER, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_JUDAISM, RELIGION_HINDU, RELIGION_BUDDHISM, RELIGION_MOROZ, RELIGION_TRINARY, RELIGION_SCARAB) var/default_citizenship = CITIZENSHIP_BIESEL + var/list/allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_MARTIAN, ACCENT_LUNA, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_COC, ACCENT_ELYRA, ACCENT_ERIDANI, + ACCENT_ERIDANIDREG, ACCENT_VYSOKA, ACCENT_HIMEO, ACCENT_PHONG, ACCENT_SILVERSUN, ACCENT_DOMINIA) + var/default_accent = ACCENT_CETI var/zombie_type //What zombie species they become var/list/character_color_presets var/bodyfall_sound = "bodyfall" //default, can be used for species specific falling sounds diff --git a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm index 85b76b4e077..9b50fff856b 100644 --- a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm +++ b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm @@ -120,6 +120,9 @@ allowed_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_JARGON, CITIZENSHIP_SOL, CITIZENSHIP_COALITION, CITIZENSHIP_DOMINIA, CITIZENSHIP_IZWESKI, CITIZENSHIP_NONE) allowed_religions = list(RELIGION_QEBLAK, RELIGION_WEISHII, RELIGION_MOROZ, RELIGION_THAKH, RELIGION_SKAKH, RELIGION_NONE, RELIGION_OTHER) + allowed_accents = list(ACCENT_DIONA) + default_accent = ACCENT_DIONA + /datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost) var/datum/dionastats/DS = H.get_dionastats() diff --git a/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm index c24968290d4..8326dc09262 100644 --- a/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm @@ -21,6 +21,7 @@ hazard_low_pressure = 10 examine_color = "#C2AE95" + allowed_accents = list(ACCENT_SCARAB, ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_MARTIAN, ACCENT_COC, ACCENT_ELYRA, ACCENT_ERIDANI, ACCENT_HIMEO, ACCENT_ERIDANIDREG, ACCENT_DOMINIA) /datum/species/human/offworlder/equip_later_gear(var/mob/living/carbon/human/H) if(istype(H.get_equipped_item(slot_back), /obj/item/storage/backpack)) diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm index 3e8e97b7dc2..88f98b80b43 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm @@ -116,6 +116,9 @@ default_citizenship = CITIZENSHIP_NONE bodyfall_sound = "bodyfall_machine" + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANIDREG, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, ACCENT_HIMEO, ACCENT_VENUS, + ACCENT_JUPITER) + // Special snowflake machine vars. var/sprint_temperature_factor = 1.15 var/sprint_charge_factor = 0.65 diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm index c2b6aaca5b8..94c3cf8c98a 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm @@ -73,6 +73,9 @@ bodyfall_sound = "bodyfall" + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_SILVERSUN, ACCENT_LUNA, + ACCENT_VENUS, ACCENT_MARTIAN, ACCENT_HIMEO) + /datum/species/machine/shell/get_light_color() return @@ -444,6 +447,9 @@ /mob/living/carbon/human/proc/check_tag ) + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_SILVERSUN, ACCENT_LUNA, + ACCENT_VENUS, ACCENT_MARTIAN, ACCENT_HIMEO) + /datum/species/machine/zenghu/get_light_color(mob/living/carbon/human/H) if (istype(H)) return rgb(H.r_eyes, H.g_eyes, H.b_eyes) @@ -491,6 +497,8 @@ /mob/living/carbon/human/proc/check_tag ) + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_SILVERSUN, ACCENT_LUNA, ACCENT_VENUS) + /datum/species/machine/bishop/get_light_color(mob/living/carbon/human/H) if (istype(H)) return rgb(H.r_eyes, H.g_eyes, H.b_eyes) diff --git a/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm b/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm index b0187d3a609..f4e8dbec6fb 100644 --- a/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm +++ b/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm @@ -59,6 +59,9 @@ allowed_religions = list(RELIGION_QEBLAK, RELIGION_WEISHII, RELIGION_NONE, RELIGION_OTHER, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_MOROZ) default_citizenship = CITIZENSHIP_JARGON + default_accent = ACCENT_SKRELL + allowed_accents = list(ACCENT_SKRELL) + zombie_type = "Skrell Zombie" /datum/species/skrell/handle_post_spawn(mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm index 236a7c57554..1f4ea3712e0 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm @@ -75,6 +75,9 @@ default_citizenship = CITIZENSHIP_PRA allowed_religions = list(RELIGION_TWINSUNS, RELIGION_MATAKE, RELIGION_RASKARA, RELIGION_NONE, RELIGION_OTHER, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_MOROZ) + default_accent = ACCENT_REPUBICLANSIIK + allowed_accents = list(ACCENT_REPUBICLANSIIK, ACCENT_NAZIRASIIK, ACCENT_CREVAN, ACCENT_DASNRRASIIK, ACCENT_HIGHHARRSIIK, ACCENT_LOWHARRSIIK, ACCENT_AMOHDASIIK, ACCENT_OLDYASSA) + zombie_type = "Tajara Zombie" /datum/species/tajaran/after_equip(var/mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm index e1a75d9b8e9..c370d7f23d3 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm @@ -30,6 +30,9 @@ primitive_form = "Zhan-Khazan Farwa" + allowed_accents = list(ACCENT_REPUBICLANSIIK, ACCENT_NAZIRASIIK, ACCENT_CREVAN, ACCENT_DASNRRASIIK, ACCENT_HIGHHARRSIIK, ACCENT_LOWHARRSIIK, ACCENT_AMOHDASIIK, + ACCENT_RURALDELVAHHI, ACCENT_NOMADDELVAHHI) + /datum/species/tajaran/m_sai name = "M'sai Tajara" name_plural = "M'sai Tajaran" @@ -56,3 +59,4 @@ primitive_form = "M'sai Farwa" secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_SIGN_TAJARA) + allowed_accents = list(ACCENT_REPUBICLANSIIK, ACCENT_NAZIRASIIK, ACCENT_CREVAN, ACCENT_DASNRRASIIK, ACCENT_HIGHHARRSIIK, ACCENT_LOWHARRSIIK, ACCENT_AMOHDASIIK) diff --git a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm index ee2bbd493bc..07a501aca4b 100644 --- a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm @@ -104,6 +104,9 @@ zombie_type = "Unathi Zombie" + default_accent = ACCENT_HEGEMON_PEASANT + allowed_accents = list(ACCENT_HEGEMON_NOBLE, ACCENT_HEGEMON_PEASANT, ACCENT_TRAD_NOBLE, ACCENT_TRAD_PEASANT, ACCENT_DOMINIA) + /datum/species/unathi/after_equip(var/mob/living/carbon/human/H) . = ..() if(H.shoes) diff --git a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm index 5e3af7d03e2..c1d65b97b7e 100644 --- a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm +++ b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm @@ -127,6 +127,8 @@ allowed_religions = list(RELIGION_HIVEPANTHEON, RELIGION_PREIMMINENNCE, RELIGION_PILOTDREAM, RELIGION_NONE, RELIGION_OTHER) default_citizenship = CITIZENSHIP_ZORA + allowed_accents = list(ACCENT_CETI) + /datum/species/bug/before_equip(var/mob/living/carbon/human/H) . = ..() H.gender = NEUTER diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index cae81f9ca5b..8a118f26289 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -6,6 +6,7 @@ var/list/valid_species = list() var/list/valid_hairstyles = list() var/list/valid_facial_hairstyles = list() + var/list/valid_accents = list() var/check_whitelist var/list/whitelist @@ -99,6 +100,11 @@ if(owner.change_eye_color(r_eyes, g_eyes, b_eyes)) update_dna() return 1 + if(href_list["accent"]) + if(can_change(APPEARANCE_GENDER) && (href_list["accent"] in valid_accents)) + if(owner.set_accent(href_list["accent"])) + cut_and_generate_data() + return 1 return 0 @@ -119,6 +125,14 @@ data["species"] = species data["change_gender"] = can_change(APPEARANCE_GENDER) + data["accent"] = owner.accent + data["change_accent"] = can_change(APPEARANCE_GENDER) + if(data["change_accent"]) + var/accents[0] + for(var/accent in valid_accents) + accents[++accents.len] = list("accent" = accent) + data["accents"] = accents + data["change_skin_tone"] = can_change_skin_tone() data["change_skin_color"] = can_change_skin_color() data["change_skin_preset"] = can_change_skin_preset() @@ -168,6 +182,7 @@ // Making the assumption that the available species remain constant valid_facial_hairstyles.Cut() valid_facial_hairstyles.Cut() + valid_accents.Cut() generate_data() /datum/nano_module/appearance_changer/proc/generate_data() @@ -178,3 +193,5 @@ if(!valid_hairstyles.len || !valid_facial_hairstyles.len) valid_hairstyles = owner.generate_valid_hairstyles(check_gender = 0) valid_facial_hairstyles = owner.generate_valid_facial_hairstyles() + if(!valid_accents.len) + valid_accents = owner.generate_valid_accent() diff --git a/html/changelogs/alberyk-accent.yml b/html/changelogs/alberyk-accent.yml new file mode 100644 index 00000000000..89fbd4cbf08 --- /dev/null +++ b/html/changelogs/alberyk-accent.yml @@ -0,0 +1,6 @@ +author: Alberyk, Kyres1 + +delete-after: True + +changes: + - rscadd: "Added an accent option in the character creation menu. It will display a small tag next to the character's text when speaking a language that allows accents." diff --git a/icons/accent_tags.dmi b/icons/accent_tags.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c70f7adad1269f163d981b6ad179cc36e1b92f05 GIT binary patch literal 2559 zcmX9=c{r4N8~)AmVi=4i!%&TFkcg69W*Awr9oe$W-mx!P3a|Af6^RJhjwRU@#u9HG zqD3ZqI0!?Ij%@W+#OJ%dKc4%(|GBT{xv%T_<4&_QH{|9daRLCijg9D5hYTN%CkN&b zqt6Zm9MXMDQ)>fG1rK&UV_r0g&nH)VV3nJjyF*Rw;NT!u%Hi8PqtOt_>ZPrT&4b-9 zUlKm7XT)>kJG#3m1&ra3IErtsj*e?E&kr^Ew-P+nZ zT;km?_;DupqbtuDU(c<~lAAYgT8WzadV4!MI%cSH8uMaqvL&{*wz6{7glLesEBnwp z-NTdW6b*5QW>mP9`9(lop7cJ{CNb9b;dHMsk5IqhaKE5H0HO+Was~rmC=rr}UR|UI zH+&ju$>p>Tk!>IZEJ(X-@J>Y}4p%iK40}w>__NX@y;aQb5B4vIb^bo?Ivt}Ybh9)% zXtu~UB7$E^5~wWZ zpc7SDgv0uEOKOOvdz!h|OYrKSu#_3;*S`%J#JGK;vo!T+&aOz*G*nBg^G~%_o6K z8IV`b;}pDllE6m-c9r2Y?4$O16>v2HI@N<$I+m=6i5lT}aU-*`6i_({BaLCvOcVW_ z3U>lleU~176{x)TETh!Ry$U<6`y~@sH6mx)E-BD6lx(J5Fes>2;mwbUYh75}>`4%; zC0P*@FqWKS7m0uo14gwfNT7p>1IPNOL;=9TzOCcz)$C-J49Z^nKF`YSI?PT#sExqB zhpHjqWagBK*)Wzs-ue}fp}M$cuYuonXh%TSYtDHN_*-s){? zAElH%!Ia=uw%e^{n9#QAWN&(k71s&I*zt4MmCS>4iSjt{P4_OJCG~~HAA#q$NIS(3 z)IncI(;!4uHpN;tDIvYGDb6UkuP?JjIW?T|uxxBc9f;~bevHYClX!$_44kt;b;U}+ zPG_8(`Qv3LxSi$|$ly78cJFgyCFFVKeYvZ*o&*8ZEw^(OLSAZxF>QEEQ6}a2m*i@;SaGpw`d~)|lZRwGA(w z?n59PFt=z+;Ua#!HJEDlz)&i3Qz< z-A#bv_jDlHY)0PhXAx1-;jT<`K9hlWH?-03n51gBJitY_Y{yBF9yrJYle4I7yZQSX z)1=7!x?;ZzV7RWs{23cO{P_qliLgEc>X*=$KCRl6_AG8v)-kX&*JNpW46hr6P(X8j z2>uqZRAXam0eQtneR$RpG24}Viqe2Zh7w~)MX?f^S_t$k z3(QgDD_lI!9pqa`eWssozf0+P{6OjbrpM8_cMWe_v9ls_r`cGx1MQnB(UvxTEgE_Av=15`p!A3W8>D@gyyMka0J!24{_g( zwZJYUMyM>1P#Y%px>Mw|1nhjZesaBN2ZE|)#TgSEl;NKRK-b7tKJK<{8zS(bME)`v zoxD5F2G-_|r_%D!dkhgM>YolNj$a~|@z~_op*0WpPjg>{3(yD_rpNv9ztB6<+1GFM z7PnZR(|gswdM53IuFKv?Q#psDdh|WVqZVQtdtxXg_RbiZWAO+u8oz*@yc<3<@zRUZ zI@1PzN&;P1Znru!Fw^E{2K#qGgmn>7;NG>k*5;p73Jvtvs_k+}ANP5t>tjw5`o!2v z literal 0 HcmV?d00001 diff --git a/nano/templates/appearance_changer.tmpl b/nano/templates/appearance_changer.tmpl index f71c41d996b..2f9eb3f78af 100644 --- a/nano/templates/appearance_changer.tmpl +++ b/nano/templates/appearance_changer.tmpl @@ -23,6 +23,19 @@ {{/if}} +{{if data.change_accent}} +
+
+ Accents: +
+
+ {{for data.accents}} + {{:helper.link(value.accent, null, { 'accent' : value.accent}, null, data.accent == value.accent ? 'selected' : null)}} + {{/for}} +
+
+{{/if}} + {{if data.change_eye_color || data.change_skin_tone || data.change_skin_color || data.change_hair_color || data.change_facial_hair_color}}