diff --git a/code/__DEFINES/~monkestation/quirk_costs.dm b/code/__DEFINES/~monkestation/quirk_costs.dm new file mode 100644 index 000000000000..9bee24e11639 --- /dev/null +++ b/code/__DEFINES/~monkestation/quirk_costs.dm @@ -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 diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index aa3711c99d1e..c4458e605f6d 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -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"), diff --git a/code/datums/quirks/neutral_quirks/foreigner.dm b/code/datums/quirks/neutral_quirks/foreigner.dm index e6298faa6649..496c352d54a3 100644 --- a/code/datums/quirks/neutral_quirks/foreigner.dm +++ b/code/datums/quirks/neutral_quirks/foreigner.dm @@ -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) @@ -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 diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index c3d112b68c2e..00251ca12c9d 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -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." diff --git a/code/game/say.dm b/code/game/say.dm index 24bc41a54137..c53060265175 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -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] diff --git a/monkestation/code/datums/quirks/negative_quirks/language_quirks.dm b/monkestation/code/datums/quirks/negative_quirks/language_quirks.dm new file mode 100644 index 000000000000..b4a65b0ea63a --- /dev/null +++ b/monkestation/code/datums/quirks/negative_quirks/language_quirks.dm @@ -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) diff --git a/monkestation/code/game/objects/items/translation_hat.dm b/monkestation/code/game/objects/items/translator.dm similarity index 100% rename from monkestation/code/game/objects/items/translation_hat.dm rename to monkestation/code/game/objects/items/translator.dm diff --git a/tgstation.dme b/tgstation.dme index 4e36c0bc13fd..f731260e4dd1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -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" @@ -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" @@ -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"