[MIRROR] Converts common speech modifiers into a component (#28752)

* Converts common speech modifiers into a component

* modular

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
This commit is contained in:
SkyratBot
2024-07-11 19:38:22 +05:30
committed by GitHub
co-authored by SmArtKar SpaceLoveSs13
parent 1c342cb317
commit 99337c670f
19 changed files with 311 additions and 260 deletions
@@ -161,3 +161,8 @@
/// from /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) iodk where it shuld go
#define COMSIG_CARBON_LIMPING "mob_limp_check"
#define COMPONENT_CANCEL_LIMP (1<<0)
///Called from on_acquiring(mob/living/carbon/human/acquirer)
#define COMSIG_MUTATION_GAINED "mutation_gained"
///Called from on_losing(mob/living/carbon/human/owner)
#define COMSIG_MUTATION_LOST "mutation_lost"
+125
View File
@@ -0,0 +1,125 @@
/// Used to apply certain speech patterns
/// Can be used on organs, wearables, mutations and mobs
/datum/component/speechmod
/// Assoc list for strings/regexes and their replacements. Should be lowercase, as case will be automatically changed
var/list/replacements = list()
/// String added to the end of the message
var/end_string = ""
/// Chance for the end string to be applied
var/end_string_chance = 100
/// Current target for modification
var/mob/targeted
/// Slot tags in which this item works when equipped
var/slots
/// If set to true, turns all text to uppercase
var/uppercase = FALSE
/datum/component/speechmod/Initialize(replacements = list(), end_string = "", end_string_chance = 100, slots, uppercase = FALSE)
if (!ismob(parent) && !isitem(parent) && !istype(parent, /datum/mutation/human))
return COMPONENT_INCOMPATIBLE
src.replacements = replacements
src.end_string = end_string
src.end_string_chance = end_string_chance
src.slots = slots
src.uppercase = uppercase
if (istype(parent, /datum/mutation/human))
RegisterSignal(parent, COMSIG_MUTATION_GAINED, PROC_REF(on_mutation_gained))
RegisterSignal(parent, COMSIG_MUTATION_LOST, PROC_REF(on_mutation_lost))
return
var/atom/owner = parent
if (ismob(parent))
targeted = parent
RegisterSignal(targeted, COMSIG_MOB_SAY, PROC_REF(handle_speech))
return
if (ismob(owner.loc))
targeted = owner.loc
RegisterSignal(targeted, COMSIG_MOB_SAY, PROC_REF(handle_speech))
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped))
RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_unequipped))
RegisterSignal(parent, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_implanted))
RegisterSignal(parent, COMSIG_ORGAN_REMOVED, PROC_REF(on_removed))
/datum/component/speechmod/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] == "*")
return
for (var/to_replace in replacements)
var/replacement = replacements[to_replace]
// Values can be lists to be picked randomly from
if (islist(replacement))
replacement = pick(replacement)
message = replacetextEx(message, to_replace, replacement)
message = trim(message)
if (prob(end_string_chance))
message += islist(end_string) ? pick(end_string) : end_string
speech_args[SPEECH_MESSAGE] = trim(message)
if (uppercase)
return COMPONENT_UPPERCASE_SPEECH
/datum/component/speechmod/proc/on_equipped(datum/source, mob/living/user, slot)
SIGNAL_HANDLER
if (!isnull(slots) && !(slot & slots))
if (!isnull(targeted))
UnregisterSignal(targeted, COMSIG_MOB_SAY)
targeted = null
return
if (targeted == user)
return
targeted = user
RegisterSignal(targeted, COMSIG_MOB_SAY, PROC_REF(handle_speech))
/datum/component/speechmod/proc/on_unequipped(datum/source, mob/living/user)
SIGNAL_HANDLER
if (isnull(targeted))
return
UnregisterSignal(targeted, COMSIG_MOB_SAY)
targeted = null
/datum/component/speechmod/proc/on_implanted(datum/source, mob/living/carbon/receiver)
SIGNAL_HANDLER
if (targeted == receiver)
return
targeted = receiver
RegisterSignal(targeted, COMSIG_MOB_SAY, PROC_REF(handle_speech))
/datum/component/speechmod/proc/on_removed(datum/source, mob/living/carbon/former_owner)
SIGNAL_HANDLER
if (isnull(targeted))
return
UnregisterSignal(targeted, COMSIG_MOB_SAY)
targeted = null
/datum/component/speechmod/proc/on_mutation_gained(datum/source, mob/living/carbon/human/owner)
SIGNAL_HANDLER
if (targeted == owner)
return
targeted = owner
RegisterSignal(targeted, COMSIG_MOB_SAY, PROC_REF(handle_speech))
/datum/component/speechmod/proc/on_mutation_lost(datum/source, mob/living/carbon/human/owner)
SIGNAL_HANDLER
if (isnull(targeted))
return
UnregisterSignal(targeted, COMSIG_MOB_SAY)
targeted = null
+2
View File
@@ -136,6 +136,7 @@
owner = acquirer
dna = acquirer.dna
dna.mutations += src
SEND_SIGNAL(src, COMSIG_MUTATION_GAINED, acquirer)
if(text_gain_indication)
to_chat(owner, text_gain_indication)
if(visual_indicators.len)
@@ -162,6 +163,7 @@
if(!istype(owner) || !(owner.dna.mutations.Remove(src)))
return TRUE
. = FALSE
SEND_SIGNAL(src, COMSIG_MUTATION_LOST, owner)
if(text_lose_indication && owner.stat != DEAD)
to_chat(owner, text_lose_indication)
if(visual_indicators.len)
+3 -14
View File
@@ -20,6 +20,9 @@
TRAIT_STUNIMMUNE,
)
/datum/mutation/human/hulk/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = list("." = "!"), end_string = "!!", uppercase = TRUE)
/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -29,7 +32,6 @@
owner.update_body_parts()
owner.add_mood_event("hulk", /datum/mood_event/hulk)
RegisterSignal(owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(on_attack_hand))
RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
RegisterSignal(owner, COMSIG_MOB_CLICKON, PROC_REF(check_swing))
/datum/mutation/human/hulk/proc/on_attack_hand(mob/living/carbon/human/source, atom/target, proximity, modifiers)
@@ -91,21 +93,8 @@
owner.update_body_parts()
owner.clear_mood_event("hulk")
UnregisterSignal(owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK)
UnregisterSignal(owner, COMSIG_MOB_SAY)
UnregisterSignal(owner, COMSIG_MOB_CLICKON)
/datum/mutation/human/hulk/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
var/message = speech_args[SPEECH_MESSAGE]
if(message)
message = "[replacetext(message, ".", "!")]!!"
speech_args[SPEECH_MESSAGE] = message
// the reason we don't just uppertext(message) in this proc is so that our hulk speech
// can uppercase all other speech moidifiers after they are done (by returning COMPONENT_UPPERCASE_SPEECH)
return COMPONENT_UPPERCASE_SPEECH
/// How many steps it takes to throw the mob
#define HULK_TAILTHROW_STEPS 28
+11 -80
View File
@@ -177,30 +177,11 @@
quality = MINOR_NEGATIVE
text_gain_indication = span_notice("You feel Swedish, however that works.")
text_lose_indication = span_notice("The feeling of Swedishness passes.")
var/static/list/language_mutilation = list("w" = "v", "j" = "y", "bo" = "bjo", "a" = list("å","ä","æ","a"), "o" = list("ö","ø","o"))
/datum/mutation/human/swedish/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
/datum/mutation/human/swedish/on_losing(mob/living/carbon/human/owner)
if(..())
return
UnregisterSignal(owner, COMSIG_MOB_SAY)
/datum/mutation/human/swedish/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
var/message = speech_args[SPEECH_MESSAGE]
if(message)
message = replacetext(message,"w","v")
message = replacetext(message,"j","y")
message = replacetext(message,"a",pick("å","ä","æ","a"))
message = replacetext(message,"bo","bjo")
message = replacetext(message,"o",pick("ö","ø","o"))
if(prob(30))
message += " Bork[pick("",", bork",", bork, bork")]!"
speech_args[SPEECH_MESSAGE] = trim(message)
/datum/mutation/human/swedish/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = language_mutilation, end_string = list("",", bork",", bork, bork"), end_string_chance = 30)
/datum/mutation/human/chav
name = "Chav"
@@ -210,35 +191,9 @@
text_gain_indication = span_notice("Ye feel like a reet prat like, innit?")
text_lose_indication = span_notice("You no longer feel like being rude and sassy.")
/datum/mutation/human/chav/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
/datum/mutation/human/chav/on_losing(mob/living/carbon/human/owner)
if(..())
return
UnregisterSignal(owner, COMSIG_MOB_SAY)
/datum/mutation/human/chav/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
message = " [message]"
var/list/chav_words = strings("chav_replacement.json", "chav")
for(var/key in chav_words)
var/value = chav_words[key]
if(islist(value))
value = pick(value)
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
message = replacetextEx(message, " [key]", " [value]")
if(prob(30))
message += ", mate"
speech_args[SPEECH_MESSAGE] = trim(message)
/datum/mutation/human/chav/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = strings("chav_replacement.json", "chav"), end_string = ", mate", end_string_chance = 30)
/datum/mutation/human/elvis
name = "Elvis"
@@ -248,6 +203,10 @@
text_gain_indication = span_notice("You feel pretty good, honeydoll.")
text_lose_indication = span_notice("You feel a little less conversation would be great.")
/datum/mutation/human/chav/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = strings("elvis_replacement.json", "elvis"))
/datum/mutation/human/elvis/on_life(seconds_per_tick, times_fired)
switch(pick(1,2))
if(1)
@@ -259,34 +218,6 @@
if(SPT_PROB(7.5, seconds_per_tick))
owner.visible_message("<b>[owner]</b> [pick("jiggles their hips", "rotates their hips", "gyrates their hips", "taps their foot", "dances to an imaginary song", "jiggles their legs", "snaps their fingers")]!")
/datum/mutation/human/elvis/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
/datum/mutation/human/elvis/on_losing(mob/living/carbon/human/owner)
if(..())
return
UnregisterSignal(owner, COMSIG_MOB_SAY)
/datum/mutation/human/elvis/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
var/message = speech_args[SPEECH_MESSAGE]
if(message)
message = " [message] "
message = replacetext(message," i'm not "," I ain't ")
message = replacetext(message," girl ",pick(" honey "," baby "," baby doll "))
message = replacetext(message," man ",pick(" son "," buddy "," brother"," pal "," friendo "))
message = replacetext(message," out of "," outta ")
message = replacetext(message," thank you "," thank you, thank you very much ")
message = replacetext(message," thanks "," thank you, thank you very much ")
message = replacetext(message," what are you "," whatcha ")
message = replacetext(message," yes ",pick(" sure", "yea "))
message = replacetext(message," muh valids "," my kicks ")
speech_args[SPEECH_MESSAGE] = trim(message)
/datum/mutation/human/stoner
name = "Stoner"
desc = "A common mutation that severely decreases intelligence."
@@ -42,26 +42,28 @@
toxic_foodtypes = NONE // these fucks eat vomit, i am sure they can handle drinking bleach or whatever too
modifies_speech = TRUE
languages_native = list(/datum/language/buzzwords)
var/static/list/speech_replacements = list(
new /regex("z+", "g") = "zzz",
new /regex("Z+", "g") = "ZZZ",
"s" = "z",
"S" = "Z",
)
// SKYRAT EDIT ADDITION START - Russian version
var/static/list/russian_speech_replacements = list(
new /regex("z+", "g") = "zzz",
new /regex("Z+", "g") = "ZZZ",
new /regex("з+", "g") = "ззз",
new /regex("З+", "g") = "ЗЗЗ",
"s" = "z",
"S" = "Z",
"с" = "з",
"С" = "З",
)
// SKYRAT EDIT ADDITION END
/obj/item/organ/internal/tongue/fly/modify_speech(datum/source, list/speech_args)
var/static/regex/fly_buzz = new("z+", "g")
var/static/regex/fly_buZZ = new("Z+", "g")
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
message = fly_buzz.Replace(message, "zzz")
message = fly_buZZ.Replace(message, "ZZZ")
message = replacetext(message, "s", "z")
message = replacetext(message, "S", "Z")
//SKYRAT EDIT START: Adding russian version to autohiss
if(CONFIG_GET(flag/russian_text_formation))
var/static/regex/fly_buzz_ru = new("з+", "g")
var/static/regex/fly_buZZ_ru = new("З+", "g")
message = fly_buzz_ru.Replace(message, "ззз")
message = fly_buZZ_ru.Replace(message, "ЗЗЗ")
message = replacetext(message, "с", "з")
message = replacetext(message, "С", "З")
//SKYRAT EDIT END: Adding russian version to autohiss
speech_args[SPEECH_MESSAGE] = message
/obj/item/organ/internal/tongue/fly/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = CONFIG_GET(flag/russian_text_formation) ? russian_speech_replacements : speech_replacements) // SKYRAT EDIT CHANGE - ORIGINAL: AddComponent(/datum/component/speechmod, replacements = speech_replacements)
/obj/item/organ/internal/tongue/fly/Initialize(mapload)
. = ..()
+3 -23
View File
@@ -6,37 +6,17 @@
greyscale_config_worn = /datum/greyscale_config/beret/worn
greyscale_colors = "#972A2A"
/obj/item/clothing/head/frenchberet/Initialize(mapload)
. = ..()
AddComponent(/datum/component/speechmod, replacements = strings("french_replacement.json", "french"), end_string = list(" Honh honh honh!"," Honh!"," Zut Alors!"), end_string_chance = 3, slots = ITEM_SLOT_HEAD)
/obj/item/clothing/head/frenchberet/equipped(mob/M, slot)
. = ..()
if (slot & ITEM_SLOT_HEAD)
RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech))
ADD_TRAIT(M, TRAIT_GARLIC_BREATH, type)
else
UnregisterSignal(M, COMSIG_MOB_SAY)
REMOVE_TRAIT(M, TRAIT_GARLIC_BREATH, type)
/obj/item/clothing/head/frenchberet/dropped(mob/M)
. = ..()
UnregisterSignal(M, COMSIG_MOB_SAY)
REMOVE_TRAIT(M, TRAIT_GARLIC_BREATH, type)
/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
message = " [message]"
var/list/french_words = strings("french_replacement.json", "french")
for(var/key in french_words)
var/value = french_words[key]
if(islist(value))
value = pick(value)
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
message = replacetextEx(message, " [key]", " [value]")
if(prob(3))
message += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
speech_args[SPEECH_MESSAGE] = trim(message)
-26
View File
@@ -8,7 +8,6 @@
strip_delay = 40
equip_delay_other = 40
visor_vars_to_toggle = NONE
var/modifies_speech = FALSE
var/adjusted_flags = null
///Did we install a filtering cloth?
var/has_filter = FALSE
@@ -25,31 +24,6 @@
var/status = !(clothing_flags & VOICEBOX_DISABLED)
to_chat(user, span_notice("You turn the voice box in [src] [status ? "on" : "off"]."))
/obj/item/clothing/mask/equipped(mob/M, slot)
. = ..()
if ((slot & ITEM_SLOT_MASK) && modifies_speech)
RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech))
else
UnregisterSignal(M, COMSIG_MOB_SAY)
/obj/item/clothing/mask/dropped(mob/M)
. = ..()
UnregisterSignal(M, COMSIG_MOB_SAY)
/obj/item/clothing/mask/vv_edit_var(vname, vval)
if(vname == NAMEOF(src, modifies_speech) && ismob(loc))
var/mob/M = loc
if(M.get_item_by_slot(ITEM_SLOT_MASK) == src)
if(vval)
if(!modifies_speech)
RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech))
else if(modifies_speech)
UnregisterSignal(M, COMSIG_MOB_SAY)
return ..()
/obj/item/clothing/mask/proc/handle_speech()
SIGNAL_HANDLER
/obj/item/clothing/mask/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
. = ..()
if(isinhands)
+23 -2
View File
@@ -16,7 +16,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list(
/obj/item/clothing/mask/animal
w_class = WEIGHT_CLASS_SMALL
clothing_flags = VOICEBOX_TOGGLABLE
modifies_speech = TRUE
var/modifies_speech = TRUE
flags_cover = MASKCOVERSMOUTH
var/animal_type ///what kind of animal the masks represents. used for automatic name and description generation.
@@ -32,6 +32,17 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list(
if(cursed)
make_cursed()
/obj/item/clothing/mask/animal/equipped(mob/M, slot)
. = ..()
if ((slot & ITEM_SLOT_MASK) && modifies_speech)
RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech))
else
UnregisterSignal(M, COMSIG_MOB_SAY)
/obj/item/clothing/mask/animal/dropped(mob/M)
. = ..()
UnregisterSignal(M, COMSIG_MOB_SAY)
/obj/item/clothing/mask/animal/vv_edit_var(vname, vval)
if(vname == NAMEOF(src, cursed))
if(vval)
@@ -39,6 +50,14 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list(
make_cursed()
else if(cursed)
clear_curse()
if(vname == NAMEOF(src, modifies_speech) && ismob(loc))
var/mob/M = loc
if(M.get_item_by_slot(ITEM_SLOT_MASK) == src)
if(vval)
if(!modifies_speech)
RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech))
else if(modifies_speech)
UnregisterSignal(M, COMSIG_MOB_SAY)
return ..()
/obj/item/clothing/mask/animal/examine(mob/user)
@@ -90,7 +109,9 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list(
UnregisterSignal(M, COMSIG_MOB_SAY)
M.update_worn_mask()
/obj/item/clothing/mask/animal/handle_speech(datum/source, list/speech_args)
/obj/item/clothing/mask/animal/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
if(clothing_flags & VOICEBOX_DISABLED)
return
if(!modifies_speech || !LAZYLEN(animal_sounds))
+3 -24
View File
@@ -34,31 +34,10 @@
inhand_icon_state = null
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
w_class = WEIGHT_CLASS_SMALL
modifies_speech = TRUE
/obj/item/clothing/mask/luchador/handle_speech(datum/source, list/speech_args)
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
message = replacetext(message, "captain", "CAPITÁN")
message = replacetext(message, "station", "ESTACIÓN")
message = replacetext(message, "sir", "SEÑOR")
message = replacetext(message, "the ", "el ")
message = replacetext(message, "my ", "mi ")
message = replacetext(message, "is ", "es ")
message = replacetext(message, "it's", "es")
message = replacetext(message, "friend", "amigo")
message = replacetext(message, "buddy", "amigo")
message = replacetext(message, "hello", "hola")
message = replacetext(message, " hot", " caliente")
message = replacetext(message, " very ", " muy ")
message = replacetext(message, "sword", "espada")
message = replacetext(message, "library", "biblioteca")
message = replacetext(message, "traitor", "traidor")
message = replacetext(message, "wizard", "mago")
message = uppertext(message) //Things end up looking better this way (no mixed cases), and it fits the macho wrestler image.
if(prob(25))
message += " OLE!"
speech_args[SPEECH_MESSAGE] = message
/obj/item/clothing/head/frenchberet/Initialize(mapload)
. = ..()
AddComponent(/datum/component/speechmod, replacements = strings("luchador_replacement.json", "luchador"), end_string = " OLE!", end_string_chance = 25, uppercase = TRUE, slots = ITEM_SLOT_MASK)
/obj/item/clothing/mask/luchador/tecnicos
name = "Tecnicos Mask"
+3 -14
View File
@@ -5,18 +5,7 @@
inhand_icon_state = null
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
w_class = WEIGHT_CLASS_SMALL
modifies_speech = TRUE
/obj/item/clothing/mask/gondola/handle_speech(datum/source, list/speech_args)
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
message = " [message]"
var/list/spurdo_words = strings("spurdo_replacement.json", "spurdo")
for(var/key in spurdo_words)
var/value = spurdo_words[key]
if(islist(value))
value = pick(value)
message = replacetextEx(message,regex(uppertext(key),"g"), "[uppertext(value)]")
message = replacetextEx(message,regex(capitalize(key),"g"), "[capitalize(value)]")
message = replacetextEx(message,regex(key,"g"), "[value]")
speech_args[SPEECH_MESSAGE] = trim(message)
/obj/item/clothing/mask/gondola/Initialize(mapload)
. = ..()
AddComponent(/datum/component/speechmod, replacements = strings("spurdo_replacement.json", "spurdo"), slots = ITEM_SLOT_MASK)
+3 -19
View File
@@ -10,23 +10,7 @@
/obj/item/clothing/mask/fakemoustache/italian
name = "italian moustache"
desc = "Made from authentic Italian moustache hairs. Gives the wearer an irresistable urge to gesticulate wildly."
modifies_speech = TRUE
/obj/item/clothing/mask/fakemoustache/italian/handle_speech(datum/source, list/speech_args)
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
message = " [message]"
var/list/italian_words = strings("italian_replacement.json", "italian")
for(var/key in italian_words)
var/value = italian_words[key]
if(islist(value))
value = pick(value)
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
message = replacetextEx(message, " [key]", " [value]")
if(prob(3))
message += pick(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!")
speech_args[SPEECH_MESSAGE] = trim(message)
/obj/item/clothing/mask/fakemoustache/italian/Initialize(mapload)
. = ..()
AddComponent(/datum/component/speechmod, replacements = strings("italian_replacement.json", "italian"), end_string = list(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!"), end_string_chance = 3, slots = ITEM_SLOT_MASK)
@@ -187,38 +187,37 @@
liked_foodtypes = GORE | MEAT | SEAFOOD | NUTS | BUGS
disliked_foodtypes = GRAIN | DAIRY | CLOTH | GROSS
voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.9,aresample=%SAMPLE_RATE%,atempo=1/0.9,aformat=channel_layouts=mono,volume=0.2 [p0]; [out2] asetrate=%SAMPLE_RATE%*1.1,aresample=%SAMPLE_RATE%,atempo=1/1.1,aformat=channel_layouts=mono,volume=0.2[p2]; [p0][0][p2] amix=inputs=3"}
var/static/list/speech_replacements = list(
new /regex("s+", "g") = "sss",
new /regex("S+", "g") = "SSS",
new /regex(@"(\w)x", "g") = "$1kss",
//new /regex(@"(\w)X", "g") = "$1KSSS", // SKYRAT EDIT REMOVAL
new /regex(@"\bx([\-|r|R]|\b)", "g") = "ecks$1",
new /regex(@"\bX([\-|r|R]|\b)", "g") = "ECKS$1",
)
// SKYRAT EDIT ADDITION START - Russian version
var/static/list/russian_speech_replacements = list(
new /regex("s+", "g") = "sss",
new /regex("S+", "g") = "SSS",
new /regex(@"(\w)x", "g") = "$1kss",
new /regex(@"\bx([\-|r|R]|\b)", "g") = "ecks$1",
new /regex(@"\bX([\-|r|R]|\b)", "g") = "ECKS$1",
new /regex(@"(\w)x", "g") = "$1kss",
new /regex(@"\bx([\-|r|R]|\b)", "g") = "ecks$1",
new /regex(@"\bX([\-|r|R]|\b)", "g") = "ECKS$1",
new /regex("с+", "g") = "ссс",
new /regex("С+", "g") = "ССС",
"з" = "с",
"З" = "С",
"ж" = "ш",
"Ж" = "Ш",
)
// SKYRAT EDIT ADDITION END
/obj/item/organ/internal/tongue/lizard/modify_speech(datum/source, list/speech_args)
var/static/regex/lizard_hiss = new("s+", "g")
var/static/regex/lizard_hiSS = new("S+", "g")
var/static/regex/lizard_kss = new(@"(\w)x", "g")
/* // SKYRAT EDIT: REMOVAL
var/static/regex/lizard_kSS = new(@"(\w)X", "g")
*/
var/static/regex/lizard_ecks = new(@"\bx([\-|r|R]|\b)", "g")
var/static/regex/lizard_eckS = new(@"\bX([\-|r|R]|\b)", "g")
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
message = lizard_hiss.Replace(message, "sss")
message = lizard_hiSS.Replace(message, "SSS")
message = lizard_kss.Replace(message, "$1kss")
/* // SKYRAT EDIT: REMOVAL
message = lizard_kSS.Replace(message, "$1KSS")
*/
message = lizard_ecks.Replace(message, "ecks$1")
message = lizard_eckS.Replace(message, "ECKS$1")
//SKYRAT EDIT START: Adding russian version to autohiss
if(CONFIG_GET(flag/russian_text_formation))
var/static/regex/lizard_hiss_ru = new("с+", "g")
var/static/regex/lizard_hiSS_ru = new("С+", "g")
message = replacetext(message, "з", "с")
message = replacetext(message, "З", "С")
message = replacetext(message, "ж", "ш")
message = replacetext(message, "Ж", "Ш")
message = lizard_hiss_ru.Replace(message, "ссс")
message = lizard_hiSS_ru.Replace(message, "ССС")
//SKYRAT EDIT END: Adding russian version to autohiss
speech_args[SPEECH_MESSAGE] = message
/obj/item/organ/internal/tongue/lizard/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = CONFIG_GET(flag/russian_text_formation) ? russian_speech_replacements : speech_replacements) // SKYRAT EDIT CHANGE - ORIGINAL: AddComponent(/datum/component/speechmod, replacements = speech_replacements)
/obj/item/organ/internal/tongue/lizard/silver
name = "silver tongue"
@@ -16,7 +16,6 @@
greyscale_config_inhand_right = /datum/greyscale_config/ballgag/right_hand
greyscale_colors = "#AD66BE"
w_class = WEIGHT_CLASS_SMALL
modifies_speech = TRUE
flags_cover = MASKCOVERSMOUTH
/// Does this gag choke the wearer?
@@ -51,14 +50,27 @@
var/size_list_position = 1
/// How big the gag is currently
var/gag_size = "small"
var/modifies_speech = TRUE
// To update the sprite
/obj/item/clothing/mask/ballgag/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
/obj/item/clothing/mask/ballgag/equipped(mob/equipper, slot)
. = ..()
if ((slot & ITEM_SLOT_MASK) && modifies_speech)
RegisterSignal(equipper, COMSIG_MOB_SAY, PROC_REF(handle_speech))
else
UnregisterSignal(equipper, COMSIG_MOB_SAY)
/obj/item/clothing/mask/ballgag/dropped(mob/dropper)
. = ..()
UnregisterSignal(dropper, COMSIG_MOB_SAY)
// Changes speech while worn
/obj/item/clothing/mask/ballgag/handle_speech(datum/source, list/speech_args)
/obj/item/clothing/mask/ballgag/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
if(!LAZYLEN(moans))
return
speech_args[SPEECH_MESSAGE] = pick((prob(moans_alt_probability) && LAZYLEN(moans_alt)) ? moans_alt : moans)
@@ -15,6 +15,8 @@
icon_state = "mask_pink_off"
base_icon_state = "mask"
slot_flags = ITEM_SLOT_MASK
w_class = WEIGHT_CLASS_SMALL
flags_cover = MASKCOVERSMOUTH
var/mask_on = FALSE
var/current_mask_color = "pink"
var/breath_status = TRUE
@@ -35,9 +37,7 @@
var/temp_check = TRUE //Used to check if user unconsious to prevent choking him until he wakes up
/// Does the gasmask impede the user's ability to talk?
var/speech_disabled
w_class = WEIGHT_CLASS_SMALL
modifies_speech = TRUE
flags_cover = MASKCOVERSMOUTH
var/modifies_speech = TRUE
/obj/item/clothing/mask/gas/bdsm_mask/Initialize(mapload)
. = ..()
@@ -55,7 +55,20 @@
button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
update_icon()
/obj/item/clothing/mask/gas/bdsm_mask/handle_speech(datum/source, list/speech_args)
/obj/item/clothing/mask/gas/bdsm_mask/equipped(mob/equipper, slot)
. = ..()
if ((slot & ITEM_SLOT_MASK) && modifies_speech)
RegisterSignal(equipper, COMSIG_MOB_SAY, PROC_REF(handle_speech))
else
UnregisterSignal(equipper, COMSIG_MOB_SAY)
/obj/item/clothing/mask/gas/bdsm_mask/dropped(mob/dropper)
. = ..()
UnregisterSignal(dropper, COMSIG_MOB_SAY)
/obj/item/clothing/mask/gas/bdsm_mask/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
if(speech_disabled)
return
@@ -14,8 +14,8 @@
hitsound = 'sound/weapons/whip.ogg'
clothing_flags = INEDIBLE_CLOTHING
//When taking that thing in mouth
modifies_speech = TRUE
flags_cover = MASKCOVERSMOUTH
var/modifies_speech = TRUE
/// If the color of the toy has been changed before
var/color_changed = FALSE
/// If the form (or size) of the toy has been changed before
@@ -50,8 +50,20 @@
if(!isinhands)
. += whip_overlay
/obj/item/clothing/mask/leatherwhip/equipped(mob/equipper, slot)
. = ..()
if ((slot & ITEM_SLOT_MASK) && modifies_speech)
RegisterSignal(equipper, COMSIG_MOB_SAY, PROC_REF(handle_speech))
else
UnregisterSignal(equipper, COMSIG_MOB_SAY)
/obj/item/clothing/mask/leatherwhip/dropped(mob/dropper)
. = ..()
UnregisterSignal(dropper, COMSIG_MOB_SAY)
// Speech handler for moansing when talking
/obj/item/clothing/mask/leatherwhip/handle_speech(datum/source, list/speech_args)
/obj/item/clothing/mask/leatherwhip/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
speech_args[SPEECH_MESSAGE] = pick((prob(moans_alt_probability) && LAZYLEN(moans_alt)) ? moans_alt : moans)
play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg',
'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg',
+13
View File
@@ -0,0 +1,13 @@
{
"elvis": {
"i'm not ": "I ain't ",
" girl ": [" honey ", " baby ", " baby doll "],
" man ": [" son ", " buddy ", " brother ", " pal ", " friendo "],
" out of ": " outta ",
" thank you ": " thank you, thank you very much ",
" thanks ": " thank you, thank you very much ",
" what are you": " whatcha ",
" yes": [" sure ", " yea "],
" muh valids ": " my kicks "
}
}
+20
View File
@@ -0,0 +1,20 @@
{
"luchador": {
"captain": "CAPITÁN",
"station": "ESTACIÓN",
"sir": "SEÑOR",
"the ": "el ",
"my ": "mi ",
"is ": "es ",
"it's": "es",
"friend": "amigo",
"buddy": "amigo",
"hello": "hola",
" hot": " caliente",
" very ": " muy ",
"sword": "espada",
"library": "biblioteca",
"traitor": "traidor",
"wizard": "mago"
}
}
+1
View File
@@ -1302,6 +1302,7 @@
#include "code\datums\components\soulstoned.dm"
#include "code\datums\components\sound_player.dm"
#include "code\datums\components\spawner.dm"
#include "code\datums\components\speechmod.dm"
#include "code\datums\components\spill.dm"
#include "code\datums\components\spin2win.dm"
#include "code\datums\components\spinny.dm"