diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index c2f7f343b94..8f9c76299bc 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -15,6 +15,7 @@ #define LANGUAGE_CURATOR "curator" #define LANGUAGE_GLAND "gland" #define LANGUAGE_HAT "hat" +#define LANGUAGE_QUIRK "quirk" #define LANGUAGE_MALF "malf" #define LANGUAGE_PIRATE "pirate" #define LANGUAGE_MASTER "master" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 09f8a3721c3..1690e972d23 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -149,6 +149,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_ILLITERATE "illiterate" /// Mute. Can't talk. #define TRAIT_MUTE "mute" +/// Softspoken. Always whisper. +#define TRAIT_SOFTSPOKEN "softspoken" /// Gibs on death and slips like ice. #define TRAIT_CURSED "cursed" /// Emotemute. Can't... emote. diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index ebc8403f3fe..ae200c01320 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -30,6 +30,8 @@ PROCESSING_SUBSYSTEM_DEF(quirks) list("Quadruple Amputee", "Paraplegic"), list("Quadruple Amputee", "Frail"), list("Social Anxiety", "Mute"), + list("Mute", "Soft-Spoken"), + list("Stormtrooper Aim", "Big Hands"), ) /datum/controller/subsystem/processing/quirks/Initialize() diff --git a/code/datums/quirks/negative_quirks.dm b/code/datums/quirks/negative_quirks.dm index 22bf9b36d4b..648043ec41a 100644 --- a/code/datums/quirks/negative_quirks.dm +++ b/code/datums/quirks/negative_quirks.dm @@ -444,6 +444,26 @@ quirk_holder.toggle_move_intent() quirk_holder.add_mood_event("nyctophobia", /datum/mood_event/nyctophobia) +/datum/quirk/softspoken + name = "Soft-Spoken" + desc = "You are soft-spoken, and your voice is hard to hear." + icon = FA_ICON_COMMENT + value = -2 + mob_trait = TRAIT_SOFTSPOKEN + gain_text = span_danger("You feel like you're speaking more quietly.") + lose_text = span_notice("You feel like you're speaking louder.") + medical_record_text = "Patient is soft-spoken and difficult to hear." + +/datum/quirk/clumsy + name = "Clumsy" + desc = "You're clumsy, a goofball, a silly dude. You big loveable himbo/bimbo you! Hope you weren't planning on using your hands for anything that takes even a LICK of dexterity." + icon = FA_ICON_FACE_DIZZY + value = -8 + mob_trait = TRAIT_CLUMSY + gain_text = span_danger("You feel your IQ sink like your brain is liquid.") + lose_text = span_notice("You feel like your IQ went up to at least average.") + medical_record_text = "Patient has demonstrated an extreme difficulty with high motor skill paired with an inability to demonstrate critical thinking." + /datum/quirk/nonviolent name = "Pacifist" desc = "The thought of violence makes you sick. So much so, in fact, that you can't hurt anyone." @@ -456,6 +476,17 @@ hardcore_value = 6 mail_goodies = list(/obj/effect/spawner/random/decoration/flower, /obj/effect/spawner/random/contraband/cannabis) // flower power +/datum/quirk/bighands + name = "Big Hands" + desc = "You have big hands, it sure does make it hard to use a lot of things." + icon = FA_ICON_HAND_DOTS + value = -6 + mob_trait = TRAIT_CHUNKYFINGERS + gain_text = span_danger("Your hands are huge! You can't use small things anymore!") + lose_text = span_notice("Your hands are back to normal.") + medical_record_text = "Patient has unusually large hands. Made me question my masculinity..." + hardcore_value = 5 + /datum/quirk/paraplegic name = "Paraplegic" desc = "Your legs do not function. Nothing will ever fix this. But hey, free wheelchair!" diff --git a/code/datums/quirks/neutral_quirks.dm b/code/datums/quirks/neutral_quirks.dm index ca8f5f291ae..26d4e53c186 100644 --- a/code/datums/quirks/neutral_quirks.dm +++ b/code/datums/quirks/neutral_quirks.dm @@ -48,7 +48,7 @@ var/mob/living/carbon/human/human_holder = quirk_holder human_holder.add_blocked_language(/datum/language/common) if(ishumanbasic(human_holder)) - human_holder.grant_language(/datum/language/uncommon) + human_holder.grant_language(/datum/language/uncommon, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK) /datum/quirk/foreigner/remove() var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/code/datums/quirks/positive_quirks.dm b/code/datums/quirks/positive_quirks.dm index 45168f725ff..2eb5a45f4d1 100644 --- a/code/datums/quirks/positive_quirks.dm +++ b/code/datums/quirks/positive_quirks.dm @@ -207,6 +207,46 @@ // We've either added or removed TRAIT_NIGHT_VISION before calling this proc. Just refresh the eyes. eyes.refresh() +/datum/quirk/bilingual + name = "Bilingual" + desc = "Over the years you've picked up an extra language!" + icon = FA_ICON_GLOBE + value = 4 + gain_text = span_notice("Some of the words of the people around you certainly aren't common. Good thing you studied for this.") + lose_text = span_notice("You seem to have forgotten your second language.") + medical_record_text = "Patient speaks multiple languages." + var/list/possible_languages = list( + /datum/language/aphasia, + /datum/language/beachbum, + /datum/language/calcic, + /datum/language/draconic, + /datum/language/moffic, + /datum/language/monkey, + /datum/language/mushroom, + /datum/language/nekomimetic, + /datum/language/piratespeak, + /datum/language/shadowtongue, + /datum/language/slime, + /datum/language/sylvan, + /datum/language/terrum, + /datum/language/voltaic, + ) + var/extra_language + mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) + +/datum/quirk/bilingual/add(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + //prevents yourself from learning a language you already have + for(var/datum/language/spoken as anything in possible_languages) + if(human_holder.has_language(spoken)) + possible_languages -= spoken + extra_language = pick(possible_languages) + human_holder.grant_language(extra_language, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK) + +/datum/quirk/bilingual/remove() + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.remove_language(extra_language) + /datum/quirk/item_quirk/poster_boy name = "Poster Boy" desc = "You have some great posters! Hang them up and make everyone have a great time." diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 72639de6f78..b53a8260fcf 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -142,6 +142,9 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( say_dead(original_message) return + if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN)) + message_mods[WHISPER_MODE] = MODE_WHISPER + if(client && SSlag_switch.measures[SLOWMODE_SAY] && !HAS_TRAIT(src, TRAIT_BYPASS_MEASURES) && !forced && src == usr) if(!COOLDOWN_FINISHED(client, say_slowmode)) to_chat(src, span_warning("Message not sent due to slowmode. Please wait [SSlag_switch.slowmode_cooldown/10] seconds between messages.\n\"[message]\""))