/datum/emote/living/blush key = "blush" key_third_person = "blushes" message = "blushes." /datum/emote/living/blush/run_emote(mob/user, params) . = ..() if(. && isipcperson(user)) do_fake_sparks(5,FALSE,user) /datum/emote/living/bow key = "bow" key_third_person = "bows" message = "bows." message_param = "bows to %t." restraint_check = TRUE /datum/emote/living/burp key = "burp" key_third_person = "burps" message = "burps." emote_type = EMOTE_AUDIBLE /datum/emote/living/choke key = "choke" key_third_person = "chokes" message = "chokes!" emote_type = EMOTE_AUDIBLE /datum/emote/living/cross key = "cross" key_third_person = "crosses" message = "crosses their arms." restraint_check = TRUE /datum/emote/living/chuckle key = "chuckle" key_third_person = "chuckles" message = "chuckles." emote_type = EMOTE_AUDIBLE /datum/emote/living/collapse key = "collapse" key_third_person = "collapses" message = "collapses!" emote_type = EMOTE_AUDIBLE /datum/emote/living/collapse/run_emote(mob/user, params) . = ..() if(. && isliving(user)) var/mob/living/L = user L.Unconscious(40) /datum/emote/living/cough key = "cough" key_third_person = "coughs" message = "coughs!" emote_type = EMOTE_AUDIBLE /datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE , intentional) . = ..() if(HAS_TRAIT(user, TRAIT_SOOTHED_THROAT)) return FALSE /datum/emote/living/dance key = "dance" key_third_person = "dances" message = "dances around happily." restraint_check = TRUE /datum/emote/living/deathgasp key = "deathgasp" key_third_person = "deathgasps" message = "seizes up and falls limp, their eyes dead and lifeless..." message_robot = "shudders violently for a moment before falling still, its eyes slowly darkening." message_AI = "lets out a flurry of sparks, its screen flickering as its systems slowly halt." message_alien = "lets out a waning guttural screech, green blood bubbling from its maw..." message_larva = "lets out a sickly hiss of air and falls limply to the floor..." message_monkey = "lets out a faint chimper as it collapses and stops moving..." message_simple = "stops moving..." stat_allowed = UNCONSCIOUS /datum/emote/living/deathgasp/run_emote(mob/user, params) var/mob/living/simple_animal/S = user if(istype(S) && S.deathmessage) message_simple = S.deathmessage . = ..() message_simple = initial(message_simple) if(. && user.deathsound) if(isliving(user)) var/mob/living/L = user if(!L.can_speak_vocal() || L.oxyloss >= 50) return //stop the sound if oxyloss too high/cant speak playsound(user, user.deathsound, 200, TRUE, TRUE) if(. && isalienadult(user)) playsound(user.loc, 'sound/voice/hiss6.ogg', 80, 1, 1) /datum/emote/living/drool key = "drool" key_third_person = "drools" message = "drools." /datum/emote/living/faint key = "faint" key_third_person = "faints" message = "faints." /datum/emote/living/faint/run_emote(mob/user, params) . = ..() if(. && isliving(user)) var/mob/living/L = user L.SetSleeping(200) /datum/emote/living/flap key = "flap" key_third_person = "flaps" message = "flaps their wings." restraint_check = TRUE var/wing_time = 20 /datum/emote/living/flap/run_emote(mob/user, params) . = ..() if(. && ishuman(user)) var/mob/living/carbon/human/H = user var/open = FALSE if(H.dna.features["wings"] != "None") if(H.dna.species.mutant_bodyparts["wingsopen"]) open = TRUE H.CloseWings() else H.OpenWings() addtimer(CALLBACK(H, open ? /mob/living/carbon/human.proc/OpenWings : /mob/living/carbon/human.proc/CloseWings), wing_time) /datum/emote/living/flap/aflap key = "aflap" key_third_person = "aflaps" message = "flaps their wings ANGRILY!" restraint_check = TRUE wing_time = 10 /datum/emote/living/frown key = "frown" key_third_person = "frowns" message = "frowns." /datum/emote/living/gag key = "gag" key_third_person = "gags" message = "gags." emote_type = EMOTE_AUDIBLE /datum/emote/living/gasp key = "gasp" key_third_person = "gasps" message = "gasps!" emote_type = EMOTE_AUDIBLE stat_allowed = UNCONSCIOUS /datum/emote/living/giggle key = "giggle" key_third_person = "giggles" message = "giggles." message_mime = "giggles silently!" emote_type = EMOTE_AUDIBLE /datum/emote/living/glare key = "glare" key_third_person = "glares" message = "glares." message_param = "glares at %t." emote_type = EMOTE_AUDIBLE /datum/emote/living/grin key = "grin" key_third_person = "grins" message = "grins." /datum/emote/living/groan key = "groan" key_third_person = "groans" message = "groans!" message_mime = "appears to groan!" /datum/emote/living/grimace key = "grimace" key_third_person = "grimaces" message = "grimaces." /datum/emote/living/jump key = "jump" key_third_person = "jumps" message = "jumps!" restraint_check = TRUE /datum/emote/living/kiss key = "kiss" key_third_person = "kisses" message = "blows a kiss." message_param = "blows a kiss to %t." emote_type = EMOTE_AUDIBLE /datum/emote/living/audio_emote emote_type = EMOTE_AUDIBLE /datum/emote/living/audio_emote/can_run_emote(mob/living/user, status_check = TRUE) . = ..() if(. && iscarbon(user)) var/mob/living/carbon/C = user return !C.silent && (!C.mind || !C.mind.miming) /datum/emote/living/audio_emote/laugh key = "laugh" key_third_person = "laughs" message = "laughs." message_mime = "laughs silently!" /datum/emote/living/audio_emote/laugh/run_emote(mob/user, params) . = ..() if(. && iscarbon(user)) //Citadel Edit because this is hilarious var/mob/living/carbon/C = user if(iscatperson(C)) //we ask for is cat first because they're a subtype that tests true for ishumanbasic because HERESY playsound(C, pick('sound/voice/catpeople/nyahaha1.ogg', 'sound/voice/catpeople/nyahaha2.ogg', 'sound/voice/catpeople/nyaha.ogg', 'sound/voice/catpeople/nyahehe.ogg'), 50, 1) return else if(isinsect(C)) playsound(C, 'sound/voice/moth/mothlaugh.ogg', 50, 1) else if(isjellyperson(C)) var/mob/living/carbon/human/H = C if(H.dna.features["mam_ears"] == "Cat" || H.dna.features["mam_ears"] == "Cat, Big") //slime have cat ear. slime go nya. playsound(C, pick('sound/voice/jelly/nyahaha1.ogg', 'sound/voice/jelly/nyahaha2.ogg', 'sound/voice/jelly/nyaha.ogg', 'sound/voice/jelly/nyahehe.ogg'), 50, 1) return else if(user.gender == FEMALE) playsound(C, 'sound/voice/jelly/womanlaugh.ogg', 50, 1) return else playsound(C, pick('sound/voice/jelly/manlaugh1.ogg', 'sound/voice/jelly/manlaugh2.ogg'), 50, 1) return else if(ishumanbasic(C)) if(user.gender == FEMALE) playsound(C, 'sound/voice/human/womanlaugh.ogg', 50, 1) else playsound(C, pick('sound/voice/human/manlaugh1.ogg', 'sound/voice/human/manlaugh2.ogg'), 50, 1) /datum/emote/living/audio_emote/chitter key = "chitter" key_third_person = "chitters" message = "chitters." message_mime = "chitters silently!" /datum/emote/living/audio_emote/chitter/run_emote(mob/user, params) . = ..() if(. && iscarbon(user)) //Citadel Edit because this is hilarious var/mob/living/carbon/C = user if(isinsect(C)) playsound(C, 'sound/voice/moth/mothchitter.ogg', 50, 1) /datum/emote/living/look key = "look" key_third_person = "looks" message = "looks." message_param = "looks at %t." /datum/emote/living/nod key = "nod" key_third_person = "nods" message = "nods." message_param = "nods at %t." /datum/emote/living/point key = "point" key_third_person = "points" message = "points." message_param = "points at %t." restraint_check = TRUE /datum/emote/living/point/run_emote(mob/user, params) message_param = initial(message_param) // reset if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.get_num_arms() == 0) if(H.get_num_legs() != 0) message_param = "tries to point at %t with a leg, falling down in the process!" H.DefaultCombatKnockdown(20) else message_param = "bumps [user.p_their()] head on the ground trying to motion towards %t." H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) ..() /datum/emote/living/pout key = "pout" key_third_person = "pouts" message = "pouts." emote_type = EMOTE_AUDIBLE /datum/emote/living/scream key = "scream" key_third_person = "screams" message = "screams." message_mime = "acts out a scream!" emote_type = EMOTE_AUDIBLE /datum/emote/living/scowl key = "scowl" key_third_person = "scowls" message = "scowls." emote_type = EMOTE_AUDIBLE /datum/emote/living/shake key = "shake" key_third_person = "shakes" message = "shakes their head." emote_type = EMOTE_AUDIBLE /datum/emote/living/shiver key = "shiver" key_third_person = "shiver" message = "shivers." emote_type = EMOTE_AUDIBLE /datum/emote/living/sigh key = "sigh" key_third_person = "sighs" message = "sighs." emote_type = EMOTE_AUDIBLE /datum/emote/living/sit key = "sit" key_third_person = "sits" message = "sits down." /datum/emote/living/smile key = "smile" key_third_person = "smiles" message = "smiles." /datum/emote/living/smirk key = "smirk" key_third_person = "smirks" message = "smirks." /datum/emote/living/sneeze key = "sneeze" key_third_person = "sneezes" message = "sneezes." emote_type = EMOTE_AUDIBLE /datum/emote/living/smug key = "smug" key_third_person = "smugs" message = "grins smugly." /datum/emote/living/sniff key = "sniff" key_third_person = "sniffs" message = "sniffs." emote_type = EMOTE_AUDIBLE /datum/emote/living/snore key = "snore" key_third_person = "snores" message = "snores." message_mime = "sleeps soundly." emote_type = EMOTE_AUDIBLE stat_allowed = UNCONSCIOUS /datum/emote/living/stare key = "stare" key_third_person = "stares" message = "stares." message_param = "stares at %t." /datum/emote/living/strech key = "stretch" key_third_person = "stretches" message = "stretches their arms." /datum/emote/living/sulk key = "sulk" key_third_person = "sulks" message = "sulks down sadly." /datum/emote/living/surrender key = "surrender" key_third_person = "surrenders" message = "puts their hands on their head and falls to the ground, they surrender!" emote_type = EMOTE_AUDIBLE /datum/emote/living/surrender/run_emote(mob/user, params) . = ..() if(. && isliving(user)) var/mob/living/L = user L.DefaultCombatKnockdown(200) /datum/emote/living/sway key = "sway" key_third_person = "sways" message = "sways around dizzily." /datum/emote/living/tremble key = "tremble" key_third_person = "trembles" message = "trembles in fear!" /datum/emote/living/twitch key = "twitch" key_third_person = "twitches" message = "twitches violently." /datum/emote/living/twitch_s key = "twitch_s" message = "twitches." /datum/emote/living/wave key = "wave" key_third_person = "waves" message = "waves." /datum/emote/living/whimper key = "whimper" key_third_person = "whimpers" message = "whimpers." message_mime = "appears hurt." /datum/emote/living/wsmile key = "wsmile" key_third_person = "wsmiles" message = "smiles weakly." /datum/emote/living/yawn key = "yawn" key_third_person = "yawns" message = "yawns." emote_type = EMOTE_AUDIBLE /datum/emote/living/custom key = "me" key_third_person = "custom" message = null emote_type = EMOTE_BOTH /datum/emote/living/custom/proc/check_invalid(mob/user, input) if(stop_bad_mime.Find(input, 1, 1)) to_chat(user, "Invalid emote.") return TRUE return FALSE /datum/emote/living/custom/run_emote(mob/user, params, type_override = null) if(jobban_isbanned(user, "emote")) to_chat(user, "You cannot send custom emotes (banned).") return FALSE else if(QDELETED(user)) return FALSE else if(user.client && user.client.prefs.muted & MUTE_IC) to_chat(user, "You cannot send IC messages (muted).") return FALSE else if(!params) var/custom_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Custom Emote", null, MAX_MESSAGE_LEN) if(custom_emote && !check_invalid(user, custom_emote)) message = custom_emote else message = params message = user.say_emphasis(message) . = ..() message = null /datum/emote/living/custom/replace_pronoun(mob/user, message) return message /datum/emote/living/help key = "help" /datum/emote/living/help/run_emote(mob/user, params) var/list/keys = list() var/list/message = list("Available emotes, you can use them with say \"*emote\": ") var/datum/emote/E var/list/emote_list = E.emote_list for(var/e in emote_list) if(e in keys) continue E = emote_list[e] if(E.can_run_emote(user, status_check = FALSE)) keys += E.key keys = sortList(keys) for(var/emote in keys) if(LAZYLEN(message) > 1) message += ", [emote]" else message += "[emote]" message += "." message = jointext(message, "") to_chat(user, message) /datum/emote/sound/beep key = "beep" key_third_person = "beeps" message = "beeps." message_param = "beeps at %t." sound = 'sound/machines/twobeep.ogg' mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/living/carbon/human, /mob/camera/aiEye) /datum/emote/living/circle key = "circle" key_third_person = "circles" restraint_check = TRUE /datum/emote/living/circle/run_emote(mob/user, params) . = ..() var/obj/item/circlegame/N = new(user) if(user.put_in_hands(N)) to_chat(user, "You make a circle with your hand.") else qdel(N) to_chat(user, "You don't have any free hands to make a circle with.") /datum/emote/living/slap key = "slap" key_third_person = "slaps" restraint_check = TRUE /datum/emote/living/slap/run_emote(mob/user, params) . = ..() if(!.) return var/obj/item/slapper/N = new(user) if(user.put_in_hands(N)) to_chat(user, "You ready your slapping hand.") else to_chat(user, "You're incapable of slapping in your current state.") /datum/emote/living/audio_emote/blorble key = "blorble" key_third_person = "blorbles" message = "blorbles." message_param = "blorbles at %t." /datum/emote/living/audio_emote/blorble/run_emote(mob/user, params) . = ..() if(. && iscarbon(user)) var/mob/living/carbon/C = user if(isjellyperson(C)) playsound(C, 'sound/effects/attackblob.ogg', 50, 1) /datum/emote/living/audio_emote/blurp key = "blurp" key_third_person = "blurps" message = "blurps." message_param = "blurps at %t." /datum/emote/living/audio_emote/blurp/run_emote(mob/user, params) . = ..() if(. && iscarbon(user)) var/mob/living/carbon/C = user if(isjellyperson(C)) pick(playsound(C, 'sound/effects/meatslap.ogg', 50, 1),playsound(C, 'sound/effects/gib_step.ogg', 50, 1))