Skip to content

Negative Language Quirks #5591

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions code/__DEFINES/~monkestation/quirk_costs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
This desolate file is the start of an attempt to rebalance quirk costs to be more consistent.
n.b. decreasing the cost of negative quirks could cause several players to have one or more of their positive quirks automatically removed.
*/

#define QUIRK_COST_FOREIGNER -6

#define QUIRK_COST_LISTENER -3
#define QUIRK_HARDCORE_LISTENER 3

#define QUIRK_COST_OUTSIDER -QUIRK_COST_BILINGUAL // Effectively allows players to choose their character's alt language

#define QUIRK_COST_BILINGUAL 2
4 changes: 4 additions & 0 deletions code/controllers/subsystem/processing/quirks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
list("Mute", "Soft-Spoken"),
list("Stormtrooper Aim", "Big Hands"),
//list("Bilingual", "Foreigner"), //monkestation edit, commented out
list("Listener", "Uncommon"), // monkestation addition
list("Outsider", "Uncommon"), // monkestation addition
list("Listener", "Mute"), // monkestation addition
list("Listener", "Deaf"), // monkestation addition
//might be fun to change this in the future. you can be a body purist but be forced to use implants regardless for medical reasons
list("Body Purist", "Hosed"),
list("Body Purist", "Neuralinked"),
Expand Down
18 changes: 15 additions & 3 deletions code/datums/quirks/neutral_quirks/foreigner.dm
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
/datum/quirk/foreigner
name = "Foreigner"
desc = "You're not from around here. You don't know Galactic Common!"
// monkestation edit original: desc = "You're not from around here. You don't know Galactic Common!"
desc = "You don't understand Galactic Common. If you are human you have learned Galactic Uncommon instead."
icon = FA_ICON_LANGUAGE
value = -2 //Monkestation change 0->-2
value = QUIRK_COST_FOREIGNER //Monkestation change 0->QUIRK_COST_FOREIGNER
gain_text = span_notice("The words being spoken around you don't make any sense.")
lose_text = span_notice("You've developed fluency in Galactic Common.")
medical_record_text = "Patient does not speak Galactic Common and may require an interpreter."
// monkestation edit original: medical_record_text = "Patient does not speak Galactic Common and may require an interpreter."
medical_record_text = "Patient does not understand Galactic Common and may require an interpreter."
mail_goodies = list(/obj/item/taperecorder) // for translation

// monkestation edit start
/* original
/datum/quirk/foreigner/add(client/client_source)
var/mob/living/carbon/human/human_holder = quirk_holder
human_holder.add_blocked_language(/datum/language/common)
Expand All @@ -19,3 +23,11 @@
human_holder.remove_blocked_language(/datum/language/common)
if(ishumanbasic(human_holder))
human_holder.remove_language(/datum/language/uncommon)
*/
/datum/quirk/foreigner/add_unique(client/client_source)
. = ..()
var/mob/living/carbon/human/human_holder = quirk_holder
quirk_holder.remove_language(/datum/language/common, TRUE, TRUE, LANGUAGE_ALL)
if(ishumanbasic(human_holder))
human_holder.grant_language(/datum/language/uncommon, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK)
// monkestation edit end
2 changes: 1 addition & 1 deletion code/datums/quirks/positive_quirks/bilingual.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "Bilingual"
desc = "Over the years you've picked up an extra language!"
icon = FA_ICON_GLOBE
value = 4
value = QUIRK_COST_BILINGUAL // monkestation edit 4 -> QUIRK_COST_BILINGUAL
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."
Expand Down
6 changes: 6 additions & 0 deletions code/game/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,13 @@ GLOBAL_LIST_INIT(freqtospan, list(
/// Modifies the message by comparing the languages of the speaker with the languages of the hearer. Called on the hearer.
/atom/movable/proc/translate_language(atom/movable/speaker, datum/language/language, raw_message, list/spans, list/message_mods = list())
if(!language)
// monkestation edit start
/* original
return "makes a strange sound."
*/
var/datum/language/dialect = GLOB.language_datum_instances[/datum/language/common]
return dialect.scramble(raw_message)
// monkestation edit end

if(!has_language(language))
var/datum/language/dialect = GLOB.language_datum_instances[language]
Expand Down
39 changes: 39 additions & 0 deletions monkestation/code/datums/quirks/negative_quirks/language_quirks.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/datum/quirk/outsider
name = "Outsider"
desc = "You don't know your species' language. If you are human you know a random language instead of Galactic Common."
icon = FA_ICON_BAN
value = QUIRK_COST_OUTSIDER
gain_text = span_notice("You can't understand your species' language.")
lose_text = span_notice("You've remembered your species' language.")

/datum/quirk/outsider/add_unique(client/client_source)
var/is_human = ishumanbasic(quirk_holder)
if (is_human)
quirk_holder.remove_language(/datum/language/common, TRUE, TRUE, LANGUAGE_ALL)
for (var/language in quirk_holder.language_holder.understood_languages)
if (language != /datum/language/common)
quirk_holder.remove_language(language, TRUE, FALSE, LANGUAGE_ALL)
for (var/language in quirk_holder.language_holder.spoken_languages)
if (language != /datum/language/common)
quirk_holder.remove_language(language, FALSE, TRUE, LANGUAGE_ALL)
if (is_human)
quirk_holder.grant_language(pick(GLOB.roundstart_languages), TRUE, TRUE, LANGUAGE_QUIRK)

/datum/quirk/listener
name = "Listener"
desc = "You are unable to speak Galactic Common though you understand it just fine."
icon = FA_ICON_BELL_SLASH
value = QUIRK_COST_LISTENER
hardcore_value = QUIRK_HARDCORE_LISTENER
gain_text = span_notice("You don't know how to speak Galactic Common.")
lose_text = span_notice("You're able to speak Galactic Common.")
medical_record_text = "Patient does not speak Galactic Common and may require an interpreter."

/datum/quirk/listener/add_unique(client/client_source)
quirk_holder.remove_language(/datum/language/common, FALSE, TRUE, LANGUAGE_ATOM)
if (!iscarbon(quirk_holder))
return
var/mob/living/carbon/carbon_holder = quirk_holder
for (var/obj/item/clothing/mask/translator/translator in carbon_holder.get_all_gear())
carbon_holder.temporarilyRemoveItemFromInventory(translator, force = TRUE, idrop = FALSE)
qdel(translator)
4 changes: 3 additions & 1 deletion tgstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,7 @@
#include "code\__DEFINES\~monkestation\physics.dm"
#include "code\__DEFINES\~monkestation\power.dm"
#include "code\__DEFINES\~monkestation\projectiles.dm"
#include "code\__DEFINES\~monkestation\quirk_costs.dm"
#include "code\__DEFINES\~monkestation\robots.dm"
#include "code\__DEFINES\~monkestation\skills.dm"
#include "code\__DEFINES\~monkestation\slimes.dm"
Expand Down Expand Up @@ -6023,6 +6024,7 @@
#include "monkestation\code\datums\quirks\negative_quirks\insanity.dm"
#include "monkestation\code\datums\quirks\negative_quirks\kakologophobia.dm"
#include "monkestation\code\datums\quirks\negative_quirks\kleptomaniac.dm"
#include "monkestation\code\datums\quirks\negative_quirks\language_quirks.dm"
#include "monkestation\code\datums\quirks\negative_quirks\light_drinker.dm"
#include "monkestation\code\datums\quirks\negative_quirks\monophobia.dm"
#include "monkestation\code\datums\quirks\negative_quirks\prosthetic_limb.dm"
Expand Down Expand Up @@ -6136,7 +6138,7 @@
#include "monkestation\code\game\objects\items\stickers.dm"
#include "monkestation\code\game\objects\items\superglue.dm"
#include "monkestation\code\game\objects\items\tactical_shields.dm"
#include "monkestation\code\game\objects\items\translation_hat.dm"
#include "monkestation\code\game\objects\items\translator.dm"
#include "monkestation\code\game\objects\items\trash.dm"
#include "monkestation\code\game\objects\items\turf_demolisher.dm"
#include "monkestation\code\game\objects\items\venom_knife.dm"
Expand Down
Loading