Files
Bubberstation/modular_zubbers/code/modules/languages/empathy.dm
Odairu e05fe31faa Adds more flavor to shadekin empathy (#3437)
## About The Pull Request
BASED ON SANITY SHADEKIN EMPATHY WILL:
-Take more or less time to send
-At lowest levels of sanity the message starts to break down some
-Be a different color in chat
## Why It's Good For The Game
Shadekin empathy is communication through FEELINGS so it being
better/worse based on how you're FEELING makes sense (to me)
## Proof Of Testing

![image](https://github.com/user-attachments/assets/2c539f7b-7edc-43c1-9c28-f8da4606dc17)
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
balance: shadekin empathy is better/worse based on mood
/🆑

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
2025-04-05 02:42:41 -04:00

99 lines
3.7 KiB
Plaintext

/datum/language/marish
name = "Marish"
desc = "Where shadekin have a language rooted in empathy, there are still subtle tones and syllables that are as delicate as the emotions that shadekin normally communicate with."
key = "M"
space_chance = 55
icon = 'modular_zubbers/icons/misc/language.dmi'
icon_state = "marish"
default_priority = 90
flags = LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD | NO_STUTTER
syllables = list("mar", "mwrrr", "maaAr", "'aarrr", "wrurrl", "mmar")
/datum/language_holder/shadekin
understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM),
/datum/language/marish = list(LANGUAGE_ATOM),
/datum/language/marish/empathy = list(LANGUAGE_ATOM),
)
spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM),
/datum/language/marish = list(LANGUAGE_ATOM),
/datum/language/marish/empathy = list(LANGUAGE_ATOM),
)
/obj/item/organ/tongue/shadekin
name = "shadekin tongue"
desc = "A mysterious tongue."
icon_state = "silvertongue"
say_mod = "mars"
sense_of_taste = TRUE
modifies_speech = TRUE
languages_native = list(/datum/language/marish/empathy)
/obj/item/organ/ears/shadekin
name = "shadekin ears"
desc = "Ears, covered in fur."
icon = 'icons/obj/clothing/head/costume.dmi'
icon_state = "kitty"
damage_multiplier = 2.5 // Shadekins big ears are easy to damage with loud noises.
overrides_sprite_datum_organ_type = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/ears
/datum/language/marish/empathy
name = "Empathy"
desc = "Shadekin seem to always know what the others are thinking. This is probably why."
key = "9"
icon_state = "empathy"
/obj/item/organ/tongue/shadekin/handle_speech(datum/source, list/speech_args)
if(speech_args[SPEECH_LANGUAGE] in languages_native) // Speaking a native language?
return modify_speech(source, speech_args)
/obj/item/organ/tongue/shadekin/modify_speech(datum/source, list/speech_args)
ASYNC
actually_modify_speech(source, speech_args)
speech_args[SPEECH_MESSAGE] = "" // Makes it not send to chat verbally.
/obj/item/organ/tongue/shadekin/proc/actually_modify_speech(datum/source, list/speech_args)
var/message = speech_args[SPEECH_MESSAGE]
var/mob/living/carbon/human/user = owner
var/shadekin_mood = user.mob_mood.sanity_level
var/empathy_timer = 2 SECONDS
var/obj/item/organ/ears/shadekin/user_ears = user.get_organ_slot(ORGAN_SLOT_EARS)
var/mode = istype(user_ears)
user.balloon_alert_to_viewers("[mode ? "ears vibrate" : "shivers"]", "projecting thoughts...")
switch(shadekin_mood)
if(SANITY_LEVEL_GREAT)
empathy_timer = 0
if(SANITY_LEVEL_NEUTRAL)
empathy_timer = 1 SECONDS
if(SANITY_LEVEL_UNSTABLE)
empathy_timer = 4 SECONDS
if(SANITY_LEVEL_CRAZY)
empathy_timer = 5 SECONDS
message = stars(message)
if(SANITY_LEVEL_INSANE)
empathy_timer = 6 SECONDS
message = readable_corrupted_text(message)
if(empathy_timer && !do_after(source, empathy_timer, source))
message = full_capitalize(rot13(message))
var/rendered = ("<span style=color:[user.mob_mood.get_mood_colour()];><b>[user.real_name]:</b> [message]</span>")
user.log_talk(message, LOG_SAY, tag="shadekin")
for(var/mob/living/carbon/human/living_mob in GLOB.alive_mob_list)
var/obj/item/organ/ears/shadekin/target_ears = living_mob.get_organ_slot(ORGAN_SLOT_EARS)
if(!istype(target_ears))
continue
to_chat(living_mob, rendered)
if(living_mob != user)
mode = istype(target_ears)
living_mob.balloon_alert_to_viewers("[mode ? "ears vibrate" : "shivers"]", "transmission heard...")
if(length(GLOB.dead_mob_list))
for(var/mob/dead_mob in GLOB.dead_mob_list)
if(dead_mob.client)
var/link = FOLLOW_LINK(dead_mob, user)
to_chat(dead_mob, "[link] [rendered]")