Ported the Bay/Nebula emote system.

This commit is contained in:
Atermonera
2021-05-05 12:28:25 -04:00
committed by Aronai Sieyes
parent f65ba71e80
commit 8d4801b827
59 changed files with 1833 additions and 357 deletions
+41
View File
@@ -0,0 +1,41 @@
var/list/_default_mob_emotes = list(
/decl/emote/visible,
/decl/emote/visible/scratch,
/decl/emote/visible/drool,
/decl/emote/visible/nod,
/decl/emote/visible/sway,
/decl/emote/visible/sulk,
/decl/emote/visible/twitch,
/decl/emote/visible/twitch_v,
/decl/emote/visible/dance,
/decl/emote/visible/roll,
/decl/emote/visible/shake,
/decl/emote/visible/jump,
/decl/emote/visible/shiver,
/decl/emote/visible/collapse,
/decl/emote/visible/spin,
/decl/emote/visible/sidestep,
/decl/emote/audible,
/decl/emote/audible/hiss,
/decl/emote/audible/whimper,
/decl/emote/audible/gasp,
/decl/emote/audible/scretch,
/decl/emote/audible/choke,
/decl/emote/audible/moan,
/decl/emote/audible/gnarl,
)
/mob
var/list/usable_emotes
/mob/proc/update_emotes(var/skip_sort)
usable_emotes = list()
for(var/emote in get_default_emotes())
var/decl/emote/emote_datum = decls_repository.get_decl(emote)
if(emote_datum.check_user(src))
usable_emotes[emote_datum.key] = emote_datum
if(!skip_sort)
usable_emotes = sortAssoc(usable_emotes)
/mob/proc/get_default_emotes()
return global._default_mob_emotes
@@ -0,0 +1,11 @@
/datum/species
var/list/default_emotes = list()
/mob/living/carbon/update_emotes(var/skip_sort)
. = ..(skip_sort = TRUE)
if(species)
for(var/emote in species.default_emotes)
var/decl/emote/emote_datum = decls_repository.get_decl(emote)
if(emote_datum.check_user(src))
usable_emotes[emote_datum.key] = emote_datum
usable_emotes = sortAssoc(usable_emotes)
+229
View File
@@ -0,0 +1,229 @@
/decl/emote/audible
key = "burp"
emote_message_3p = "burps."
message_type = AUDIBLE_MESSAGE
/decl/emote/audible/New()
. = ..()
// Snips the 'USER' from 3p emote messages for radio.
if(!emote_message_radio && emote_message_3p)
emote_message_radio = emote_message_3p
if(!emote_message_radio_synthetic && emote_message_synthetic_3p)
emote_message_radio_synthetic = emote_message_synthetic_3p
/decl/emote/audible/deathgasp_alien
key = "deathgasp"
emote_message_3p = "lets out a waning guttural screech, green blood bubbling from its maw."
/decl/emote/audible/whimper
key = "whimper"
emote_message_3p = "whimpers."
/decl/emote/audible/gasp
key = "gasp"
emote_message_3p = "gasps."
conscious = FALSE
/decl/emote/audible/scretch
key = "scretch"
emote_message_3p = "scretches."
/decl/emote/audible/choke
key ="choke"
emote_message_3p = "chokes."
conscious = FALSE
/decl/emote/audible/gnarl
key = "gnarl"
emote_message_3p = "gnarls and shows USER_HIS teeth."
/decl/emote/audible/multichirp
key = "mchirp"
emote_message_3p = "chirps a chorus of notes!"
emote_sound = 'sound/voice/multichirp.ogg'
/decl/emote/audible/alarm
key = "alarm"
emote_message_1p = "You sound an alarm."
emote_message_3p = "sounds an alarm."
/decl/emote/audible/alert
key = "alert"
emote_message_1p = "You let out a distressed noise."
emote_message_3p = "lets out a distressed noise."
/decl/emote/audible/notice
key = "notice"
emote_message_1p = "You play a loud tone."
emote_message_3p = "plays a loud tone."
/decl/emote/audible/boop
key = "boop"
emote_message_1p = "You boop."
emote_message_3p = "boops."
/decl/emote/audible/beep
key = "beep"
emote_message_3p = "You beep."
emote_message_3p = "beeps."
emote_sound = 'sound/machines/twobeep.ogg'
/decl/emote/audible/sniff
key = "sniff"
emote_message_3p = "sniffs."
/decl/emote/audible/snore
key = "snore"
emote_message_3p = "snores."
conscious = FALSE
/decl/emote/audible/whimper
key = "whimper"
emote_message_3p = "whimpers."
/decl/emote/audible/yawn
key = "yawn"
emote_message_3p = "yawns."
/decl/emote/audible/clap
key = "clap"
emote_message_3p = "claps."
/decl/emote/audible/chuckle
key = "chuckle"
emote_message_3p = "chuckles."
/decl/emote/audible/cry
key = "cry"
emote_message_3p = "cries."
/decl/emote/audible/sigh
key = "sigh"
emote_message_3p = "sighs."
/decl/emote/audible/laugh
key = "laugh"
emote_message_3p_target = "laughs at TARGET."
emote_message_3p = "laughs."
/decl/emote/audible/mumble
key = "mumble"
emote_message_3p = "mumbles!"
/decl/emote/audible/grumble
key = "grumble"
emote_message_3p = "grumbles!"
/decl/emote/audible/groan
key = "groan"
emote_message_3p = "groans!"
conscious = FALSE
/decl/emote/audible/moan
key = "moan"
emote_message_3p = "moans!"
conscious = FALSE
/decl/emote/audible/giggle
key = "giggle"
emote_message_3p = "giggles."
/decl/emote/audible/grunt
key = "grunt"
emote_message_3p = "grunts."
/decl/emote/audible/bug_hiss
key ="hiss"
emote_message_3p_target = "hisses at TARGET."
emote_message_3p = "hisses."
emote_sound = 'sound/voice/BugHiss.ogg'
/decl/emote/audible/bug_buzz
key ="buzz"
emote_message_3p = "buzzes its wings."
emote_sound = 'sound/voice/BugBuzz.ogg'
/decl/emote/audible/bug_chitter
key ="chitter"
emote_message_3p = "chitters."
emote_sound = 'sound/voice/Bug.ogg'
/decl/emote/audible/roar
key = "roar"
emote_message_3p = "roars!"
/decl/emote/audible/bellow
key = "bellow"
emote_message_3p = "bellows!"
/decl/emote/audible/howl
key = "howl"
emote_message_3p = "howls!"
/decl/emote/audible/wheeze
key = "wheeze"
emote_message_3p = "wheezes."
/decl/emote/audible/hiss
key = "hiss"
emote_message_3p_target = "hisses softly at TARGET."
emote_message_3p = "hisses softly."
/decl/emote/audible/chirp
key = "chirp"
emote_message_3p = "chirps!"
emote_sound = 'sound/misc/nymphchirp.ogg'
/decl/emote/audible/crack
key = "crack"
emote_message_3p = "cracks USER_HIS knuckles."
emote_sound = 'sound/voice/knuckles.ogg'
/decl/emote/audible/squish
key = "squish"
emote_sound = 'sound/effects/slime_squish.ogg' //Credit to DrMinky (freesound.org) for the sound.
emote_message_3p = "squishes."
/decl/emote/audible/warble
key = "warble"
emote_sound = 'sound/effects/warble.ogg' // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
emote_message_3p = "warbles."
/decl/emote/audible/vox_shriek
key = "shriek"
emote_message_3p = "SHRIEKS!"
emote_sound = 'sound/voice/shriek1.ogg'
/decl/emote/audible/purr
key = "purr"
emote_message_3p = "purrs."
emote_sound = 'sound/voice/cat_purr.ogg'
/decl/emote/audible/purrlong
key = "purrl"
emote_message_3p = "purrs."
emote_sound = 'sound/voice/cat_purr_long.ogg'
/decl/emote/audible/teshsqueak
key = "surprised"
emote_message_1p = "You chirp in surprise!"
emote_message_3p = "chirps in surprise!"
emote_message_1p_target = "You chirp in surprise at TARGET!"
emote_message_3p_target = "chirps in surprise at TARGET!"
emote_sound = 'sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
/decl/emote/audible/teshchirp
key = "chirp"
emote_message_1p = "You chirp!"
emote_message_3p = "chirps!"
emote_message_1p_target = "You chirp at TARGET!"
emote_message_3p_target = "chirps at TARGET!"
emote_sound = 'sound/voice/teshchirp.ogg' // Copyright Sampling+ 1.0 Incarnidine (freesound.org) for the source audio.
/decl/emote/audible/teshtrill
key = "trill"
emote_message_1p = "You trill."
emote_message_3p = "trills."
emote_message_1p_target = "You trill at TARGET."
emote_message_3p_target = "trills at TARGET."
emote_sound = 'sound/voice/teshtrill.ogg' // Copyright CC BY-NC 3.0 Arnaud Coutancier (freesound.org) for the source audio.
@@ -0,0 +1,52 @@
/decl/emote/audible/cough
key = "cough"
emote_message_1p = "You cough!"
emote_message_1p_target = "You cough on TARGET!"
emote_message_3p = "coughs!"
emote_message_3p_target = "coughs on TARGET!"
emote_message_synthetic_1p_target = "You emit a robotic cough towards TARGET."
emote_message_synthetic_1p = "You emit a robotic cough."
emote_message_synthetic_3p_target = "emits a robotic cough towards TARGET."
emote_message_synthetic_3p = "emits a robotic cough."
emote_volume = 120
emote_volume_synthetic = 50
conscious = FALSE
emote_sound_synthetic = list(
FEMALE = list(
'sound/effects/mob_effects/f_machine_cougha.ogg',
'sound/effects/mob_effects/f_machine_coughb.ogg'
),
MALE = list(
'sound/effects/mob_effects/m_machine_cougha.ogg',
'sound/effects/mob_effects/m_machine_coughb.ogg',
'sound/effects/mob_effects/m_machine_coughc.ogg'
),
NEUTER = list(
'sound/effects/mob_effects/m_machine_cougha.ogg',
'sound/effects/mob_effects/m_machine_coughb.ogg',
'sound/effects/mob_effects/m_machine_coughc.ogg'
),
PLURAL = list(
'sound/effects/mob_effects/m_machine_cougha.ogg',
'sound/effects/mob_effects/m_machine_coughb.ogg',
'sound/effects/mob_effects/m_machine_coughc.ogg'
)
)
/decl/emote/audible/cough/get_emote_sound(var/atom/user)
if(ishuman(user) && !check_synthetic(user))
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
if(length(H.species.female_cough_sounds))
return list(
"sound" = H.species.female_cough_sounds,
"vol" = emote_volume
)
else
if(length(H.species.male_cough_sounds))
return list(
"sound" = H.species.male_cough_sounds,
"vol" = emote_volume
)
return ..()
@@ -0,0 +1,16 @@
/decl/emote/audible/scream
key = "scream"
emote_message_1p = "You scream!"
emote_message_3p = "screams!"
/decl/emote/audible/scream/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params)
if(ishuman(user))
var/mob/living/carbon/human/H = user
return "You [H.species.scream_verb_1p]!"
. = ..()
/decl/emote/audible/cough/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
if(ishuman(user))
var/mob/living/carbon/human/H = user
return "[H.species.scream_verb_3p]!"
. = ..()
@@ -0,0 +1,24 @@
/decl/emote/audible/slap
key = "slap"
emote_message_1p_target = "You slap TARGET across the face. Ouch!"
emote_message_1p = "You slap yourself across the face!"
emote_message_3p_target = "slaps TARGET across the face. Ouch!"
emote_message_3p = "slaps USER_SELF across the face!"
emote_sound = 'sound/effects/snap.ogg'
check_restraints = TRUE
check_range = 1
/decl/emote/audible/slap/New()
..()
emote_message_1p_target = SPAN_DANGER(emote_message_1p_target)
emote_message_1p = SPAN_DANGER(emote_message_1p)
emote_message_3p_target = SPAN_DANGER(emote_message_3p_target)
emote_message_3p = SPAN_DANGER(emote_message_3p)
/decl/emote/audible/slap/do_extra(var/atom/user, var/atom/target)
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/clothing/mask/smokable/mask = H.wear_mask
if(istype(mask) && H.unEquip(mask))
mask.forceMove(get_turf(H))
@@ -0,0 +1,22 @@
/decl/emote/audible/snap
key = "snap"
emote_message_1p = "You snap your fingers."
emote_message_3p = "snaps USER_HIS fingers."
emote_message_1p_target = "You snap your fingers at TARGET."
emote_message_3p_target = "snaps USER_HIS fingers at TARGET."
emote_sound = 'sound/effects/fingersnap.ogg'
/decl/emote/audible/snap/proc/can_snap(var/atom/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
for(var/limb in list(BP_L_HAND, BP_R_HAND))
var/obj/item/organ/external/L = H.get_organ(limb)
if(istype(L) && L.is_usable() && !L.splinted)
return TRUE
return FALSE
/decl/emote/audible/snap/do_emote(var/atom/user, var/extra_params)
if(!can_snap(user))
to_chat(user, SPAN_WARNING("You need at least one working hand to snap your fingers."))
return FALSE
. = ..()
@@ -0,0 +1,29 @@
/decl/emote/audible/sneeze
key = "sneeze"
emote_message_1p = "You sneeze."
emote_message_3p = "sneezes."
emote_sound_synthetic = list(
FEMALE = 'sound/effects/mob_effects/machine_sneeze.ogg',
MALE = 'sound/effects/mob_effects/f_machine_sneeze.ogg',
NEUTER = 'sound/effects/mob_effects/f_machine_sneeze.ogg',
PLURAL = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
)
emote_message_synthetic_1p = "You emit a robotic sneeze."
emote_message_synthetic_1p_target = "You emit a robotic sneeze towards TARGET."
emote_message_synthetic_3p = "emits a robotic sneeze."
emote_message_synthetic_3p_target = "emits a robotic sneeze towards TARGET."
/decl/emote/audible/sneeze/get_emote_sound(var/atom/user)
if(ishuman(user) && !check_synthetic(user))
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
return list(
"sound" = H.species.female_sneeze_sound,
"vol" = emote_volume
)
else
return list(
"sound" = H.species.male_sneeze_sound,
"vol" = emote_volume
)
return ..()
@@ -0,0 +1,36 @@
/decl/emote/audible/whistle
key = "whistle"
emote_message_1p = "You whistle a tune."
emote_message_3p = "whistles a tune."
emote_sound = 'sound/voice/longwhistle.ogg'
emote_message_muffled = "makes a light spitting noise, a poor attempt at a whistle."
emote_sound_synthetic = 'sound/voice/longwhistle_robot.ogg'
emote_message_synthetic_1p = "You whistle a robotic tune."
emote_message_synthetic_3p = "whistles a robotic tune."
/decl/emote/audible/whistle/quiet
key = "qwhistle"
emote_message_1p = "You whistle quietly."
emote_message_3p = "whistles quietly."
emote_sound = 'sound/voice/shortwhistle.ogg'
emote_message_synthetic_1p = "You whistle robotically."
emote_message_synthetic_3p = "whistles robotically."
emote_sound_synthetic = 'sound/voice/shortwhistle_robot.ogg'
/decl/emote/audible/whistle/wolf
key = "wwhistle"
emote_message_1p = "You whistle inappropriately."
emote_message_3p = "whistles inappropriately."
emote_sound = 'sound/voice/wolfwhistle.ogg'
emote_message_synthetic_1p = "You beep inappropriately."
emote_message_synthetic_3p = "beeps inappropriately."
emote_sound_synthetic = 'sound/voice/wolfwhistle_robot.ogg'
/decl/emote/audible/whistle/summon
key = "swhistle"
emote_message_1p = "You whistle a tune."
emote_message_3p = "whistles a tune."
emote_sound = 'sound/voice/summon_whistle.ogg'
emote_message_synthetic_1p = "You whistle a robotic tune."
emote_message_synthetic_3p = "whistles a robotic tune."
emote_sound_synthetic = 'sound/voice/summon_whistle_robot.ogg'
@@ -0,0 +1,40 @@
/decl/emote/exertion/biological
key = "esweat"
emote_range = 4
emote_message_1p = "You are sweating heavily."
emote_message_3p = "is sweating heavily."
/decl/emote/exertion/biological/check_user(mob/living/user)
if(istype(user) && !user.isSynthetic())
return ..()
return FALSE
/decl/emote/exertion/biological/breath
key = "ebreath"
emote_message_1p = "You feel out of breath."
emote_message_3p = "looks out of breath."
/decl/emote/exertion/biological/pant
key = "epant"
emote_range = 3
message_type = AUDIBLE_MESSAGE
emote_message_1p = "You pant to catch your breath."
emote_message_3p = "pants for air."
emote_message_impaired = "You can see USER breathing heavily."
/decl/emote/exertion/synthetic
key = "ewhine"
emote_range = 3
message_type = AUDIBLE_MESSAGE
emote_message_1p = "You overstress your actuators."
emote_message_3p = "USER's actuators whine with strain."
/decl/emote/exertion/synthetic/check_user(mob/living/user)
if(istype(user) && user.isSynthetic())
return ..()
return FALSE
/decl/emote/exertion/synthetic/creak
key = "ecreak"
emote_message_1p = "Your chassis stress indicators spike."
emote_message_3p = "USER's joints creak with stress."
+62
View File
@@ -0,0 +1,62 @@
/decl/emote/human
key = "vomit"
/decl/emote/human/check_user(var/mob/living/carbon/human/user)
return (istype(user) && user.check_has_mouth() && !user.isSynthetic())
/decl/emote/human/do_emote(var/mob/living/carbon/human/user)
user.vomit()
/decl/emote/human/deathgasp
key = "deathgasp"
/decl/emote/human/deathgasp/do_emote(mob/living/carbon/human/user)
if(istype(user) && user.species.get_death_message(user) == DEATHGASP_NO_MESSAGE)
to_chat(user, SPAN_WARNING("Your species has no deathgasp."))
return
. = ..()
/decl/emote/human/deathgasp/get_emote_message_3p(var/mob/living/carbon/human/user)
return "USER [user.species.get_death_message(user)]"
/decl/emote/human/swish
key = "swish"
/decl/emote/human/swish/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_once()
/decl/emote/human/wag
key = "wag"
/decl/emote/human/wag/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_start()
/decl/emote/human/sway
key = "sway"
/decl/emote/human/sway/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_start()
/decl/emote/human/qwag
key = "qwag"
/decl/emote/human/qwag/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_fast()
/decl/emote/human/fastsway
key = "fastsway"
/decl/emote/human/fastsway/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_fast()
/decl/emote/human/swag
key = "swag"
/decl/emote/human/swag/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_stop()
/decl/emote/human/stopsway
key = "stopsway"
/decl/emote/human/stopsway/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_stop()
+32
View File
@@ -0,0 +1,32 @@
/decl/emote/slime
key = "nomood"
var/mood
/decl/emote/slime/do_extra(var/mob/living/simple_mob/slime/user)
. = ..()
if(istype(user))
user.mood = mood
user.update_icon()
/decl/emote/slime/check_user(var/atom/user)
return isslime(user)
/decl/emote/slime/pout
key = "pout"
mood = "pout"
/decl/emote/slime/sad
key = "sad"
mood = "sad"
/decl/emote/slime/angry
key = "angry"
mood = "angry"
/decl/emote/slime/frown
key = "frown"
mood = "mischevous"
/decl/emote/slime/smile
key = "smile"
mood = ":3"
@@ -0,0 +1,51 @@
/decl/emote/audible/synth
key = "beep"
emote_message_3p = "beeps."
emote_sound = 'sound/machines/twobeep.ogg'
/decl/emote/audible/synth/check_user(var/mob/living/user)
if(istype(user) && user.isSynthetic())
return ..()
return FALSE
/decl/emote/audible/synth/ping
key = "ping"
emote_message_3p = "pings."
emote_sound = 'sound/machines/ping.ogg'
/decl/emote/audible/synth/buzz
key = "buzz"
emote_message_3p = "buzzes."
emote_sound = 'sound/machines/buzz-sigh.ogg'
/decl/emote/audible/synth/confirm
key = "confirm"
emote_message_3p = "emits an affirmative blip."
emote_sound = 'sound/machines/synth_yes.ogg'
/decl/emote/audible/synth/deny
key = "deny"
emote_message_3p = "emits a negative blip."
emote_sound = 'sound/machines/synth_no.ogg'
/decl/emote/audible/synth/security
key = "law"
emote_message_3p = "shows USER_HIS legal authorization barcode."
emote_message_3p_target = "shows TARGET USER_THEIR legal authorization barcode."
emote_sound = 'sound/voice/biamthelaw.ogg'
/decl/emote/audible/synth/security/check_user(var/mob/living/silicon/robot/user)
return (istype(user) && istype(user.module, /obj/item/weapon/robot_module/robot/security))
/decl/emote/audible/synth/security/halt
key = "halt"
emote_message_3p = "USER's speakers skreech, \"Halt! Security!\"."
emote_sound = 'sound/voice/halt.ogg'
/decl/emote/audible/synth/dwoop
key = "dwoop"
emote_message_1p_target = "You chirp happily at TARGET!"
emote_message_1p = "You chirp happily."
emote_message_3p_target = "chirps happily at TARGET!"
emote_message_3p = "chirps happily."
emote_sound = 'sound/machines/dwoop.ogg'
+336
View File
@@ -0,0 +1,336 @@
/decl/emote/visible
key ="tail"
emote_message_3p = "waves USER_THEIR tail."
message_type = VISIBLE_MESSAGE
/decl/emote/visible/scratch
key = "scratch"
check_restraints = TRUE
emote_message_3p = "scratches."
/decl/emote/visible/drool
key ="drool"
emote_message_3p = "drools."
conscious = FALSE
/decl/emote/visible/nod
key ="nod"
emote_message_3p_target = "nods USER_THEIR head at TARGET."
emote_message_3p = "nods USER_THEIR head."
/decl/emote/visible/sway
key ="sway"
emote_message_3p = "sways around dizzily."
/decl/emote/visible/sulk
key ="sulk"
emote_message_3p = "sulks down sadly."
/decl/emote/visible/dance
key ="dance"
check_restraints = TRUE
emote_message_3p = "dances around happily."
/decl/emote/visible/roll
key ="roll"
check_restraints = TRUE
emote_message_3p = "rolls."
/decl/emote/visible/shake
key ="shake"
emote_message_3p = "shakes USER_THEIR head."
/decl/emote/visible/jump
key ="jump"
emote_message_3p = "jumps!"
/decl/emote/visible/shiver
key ="shiver"
emote_message_3p = "shivers."
conscious = FALSE
/decl/emote/visible/collapse
key ="collapse"
emote_message_3p = "collapses!"
/decl/emote/visible/collapse/do_extra(var/mob/user)
..()
if(istype(user))
user.Paralyse(2)
/decl/emote/visible/flash
key = "flash"
emote_message_3p = "flash USER_HIS lights quickly."
/decl/emote/visible/blink
key = "blink"
emote_message_3p = "blinks."
/decl/emote/visible/airguitar
key = "airguitar"
check_restraints = TRUE
emote_message_3p = "is strumming the air and headbanging like a safari chimp."
/decl/emote/visible/blink_r
key = "blink_r"
emote_message_3p = "blinks rapidly."
/decl/emote/visible/bow
key = "bow"
emote_message_3p_target = "bows to TARGET."
emote_message_3p = "bows."
/decl/emote/visible/salute
key = "salute"
emote_message_3p_target = "salutes TARGET."
emote_message_3p = "salutes."
check_restraints = TRUE
/decl/emote/visible/flap
key = "flap"
check_restraints = TRUE
emote_message_3p = "flaps USER_THEIR wings."
/decl/emote/visible/aflap
key = "aflap"
check_restraints = TRUE
emote_message_3p = "flaps USER_THEIR wings ANGRILY!"
/decl/emote/visible/eyebrow
key = "eyebrow"
emote_message_3p = "raises an eyebrow."
/decl/emote/visible/twitch
key = "twitch"
emote_message_3p = "twitches."
conscious = FALSE
/decl/emote/visible/twitch_v
key = "twitch_v"
emote_message_3p = "twitches violently."
conscious = FALSE
/decl/emote/visible/faint
key = "faint"
emote_message_3p = "faints."
/decl/emote/visible/faint/do_extra(var/mob/user)
. = ..()
if(istype(user) && !user.sleeping)
user.Sleeping(10)
/decl/emote/visible/frown
key = "frown"
emote_message_3p = "frowns."
/decl/emote/visible/blush
key = "blush"
emote_message_3p = "blushes."
/decl/emote/visible/wave
key = "wave"
emote_message_3p_target = "waves at TARGET."
emote_message_3p = "waves."
check_restraints = TRUE
/decl/emote/visible/glare
key = "glare"
emote_message_3p_target = "glares at TARGET."
emote_message_3p = "glares."
/decl/emote/visible/stare
key = "stare"
emote_message_3p_target = "stares at TARGET."
emote_message_3p = "stares."
/decl/emote/visible/look
key = "look"
emote_message_3p_target = "looks at TARGET."
emote_message_3p = "looks."
/decl/emote/visible/point
key = "point"
check_restraints = TRUE
emote_message_3p_target = "points to TARGET."
emote_message_3p = "points."
/decl/emote/visible/raise
key = "raise"
check_restraints = TRUE
emote_message_3p = "raises a hand."
/decl/emote/visible/grin
key = "grin"
emote_message_3p_target = "grins at TARGET."
emote_message_3p = "grins."
/decl/emote/visible/shrug
key = "shrug"
emote_message_3p = "shrugs."
/decl/emote/visible/smile
key = "smile"
emote_message_3p_target = "smiles at TARGET."
emote_message_3p = "smiles."
/decl/emote/visible/pale
key = "pale"
emote_message_3p = "goes pale for a second."
/decl/emote/visible/tremble
key = "tremble"
emote_message_3p = "trembles in fear!"
/decl/emote/visible/wink
key = "wink"
emote_message_3p_target = "winks at TARGET."
emote_message_3p = "winks."
/decl/emote/visible/hug
key = "hug"
check_restraints = TRUE
emote_message_3p_target = "hugs TARGET."
emote_message_3p = "hugs USER_SELF."
check_range = 1
/decl/emote/visible/dap
key = "dap"
check_restraints = TRUE
emote_message_3p_target = "gives daps to TARGET."
emote_message_3p = "sadly can't find anybody to give daps to, and daps USER_SELF."
/decl/emote/visible/bounce
key = "bounce"
emote_message_3p = "bounces in place."
/decl/emote/visible/jiggle
key = "jiggle"
emote_message_3p = "jiggles!"
/decl/emote/visible/lightup
key = "light"
emote_message_3p = "lights up for a bit, then stops."
/decl/emote/visible/vibrate
key = "vibrate"
emote_message_3p = "vibrates!"
/decl/emote/visible/deathgasp_robot
key = "deathgasp"
emote_message_3p = "shudders violently for a moment, then becomes motionless, USER_THEIR eyes slowly darkening."
/decl/emote/visible/handshake
key = "handshake"
check_restraints = TRUE
emote_message_3p_target = "shakes hands with TARGET."
emote_message_3p = "shakes hands with USER_SELF."
check_range = 1
/decl/emote/visible/handshake/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
if(target && !user.Adjacent(target))
return "holds out USER_THEIR hand out to TARGET."
return ..()
/decl/emote/visible/signal
key = "signal"
emote_message_3p_target = "signals at TARGET."
emote_message_3p = "signals."
check_restraints = TRUE
/decl/emote/visible/signal/check_user(atom/user)
return ismob(user)
/decl/emote/visible/signal/get_emote_message_3p(var/mob/living/user, var/atom/target, var/extra_params)
if(istype(user) && (!user.get_active_hand() || !user.get_inactive_hand()))
var/t1 = round(text2num(extra_params))
if(isnum(t1) && t1 <= 5)
return "raises [t1] finger\s."
return .. ()
/decl/emote/visible/afold
key = "afold"
check_restraints = TRUE
emote_message_3p = "folds USER_THEIR arms."
/decl/emote/visible/alook
key = "alook"
emote_message_3p = "looks away."
/decl/emote/visible/hbow
key = "hbow"
emote_message_3p = "bows USER_THEIR head."
/decl/emote/visible/hip
key = "hip"
check_restraints = TRUE
emote_message_3p = "puts USER_THEIR hands on USER_THEIR hips."
/decl/emote/visible/holdup
key = "holdup"
check_restraints = TRUE
emote_message_3p = "holds up USER_THEIR palms."
/decl/emote/visible/hshrug
key = "hshrug"
emote_message_3p = "gives a half shrug."
/decl/emote/visible/crub
key = "crub"
check_restraints = TRUE
emote_message_3p = "rubs USER_THEIR chin."
/decl/emote/visible/eroll
key = "eroll"
emote_message_3p = "rolls USER_THEIR eyes."
emote_message_3p_target = "rolls USER_THEIR eyes at TARGET."
/decl/emote/visible/erub
key = "erub"
check_restraints = TRUE
emote_message_3p = "rubs USER_THEIR eyes."
/decl/emote/visible/fslap
key = "fslap"
check_restraints = TRUE
emote_message_3p = "slaps USER_THEIR forehead."
/decl/emote/visible/ftap
key = "ftap"
emote_message_3p = "taps USER_THEIR foot."
/decl/emote/visible/hrub
key = "hrub"
check_restraints = TRUE
emote_message_3p = "rubs USER_THEIR hands together."
/decl/emote/visible/hspread
key = "hspread"
check_restraints = TRUE
emote_message_3p = "spreads USER_THEIR hands."
/decl/emote/visible/pocket
key = "pocket"
check_restraints = TRUE
emote_message_3p = "shoves USER_THEIR hands in USER_THEIR pockets."
/decl/emote/visible/rsalute
key = "rsalute"
check_restraints = TRUE
emote_message_3p = "returns the salute."
/decl/emote/visible/rshoulder
key = "rshoulder"
emote_message_3p = "rolls USER_THEIR shoulders."
/decl/emote/visible/squint
key = "squint"
emote_message_3p = "squints."
emote_message_3p_target = "squints at TARGET."
/decl/emote/visible/tfist
key = "tfist"
emote_message_3p = "tightens USER_THEIR hands into fists."
/decl/emote/visible/tilt
key = "tilt"
emote_message_3p = "tilts USER_THEIR head."
@@ -0,0 +1,76 @@
/decl/emote/visible/spin
key = "spin"
check_restraints = TRUE
emote_message_3p = "spins!"
/decl/emote/visible/spin/do_extra(mob/user)
if(istype(user))
user.spin(20, 1)
/decl/emote/visible/sidestep
key = "sidestep"
check_restraints = TRUE
emote_message_3p = "steps rhythmically and moves side to side."
/decl/emote/visible/sidestep/do_extra(mob/user)
if(istype(user))
animate(user, pixel_x = 5, time = 5)
sleep(3)
animate(user, pixel_x = -5, time = 5)
animate(pixel_x = user.default_pixel_x, pixel_y = user.default_pixel_x, time = 2)
/decl/emote/visible/flip
key = "flip"
emote_message_1p = "You do a flip!"
emote_message_3p = "does a flip!"
emote_sound = 'sound/effects/bodyfall4.ogg'
/decl/emote/visible/flip/do_extra(mob/user)
. = ..()
if(istype(user))
user.SpinAnimation(7,1)
/decl/emote/visible/floorspin
key = "floorspin"
emote_message_1p = "You spin around on the floor!"
emote_message_3p = "spins around on the floor!"
var/static/list/spin_dirs = list(
NORTH,
SOUTH,
EAST,
WEST,
EAST,
SOUTH,
NORTH,
SOUTH,
EAST,
WEST,
EAST,
SOUTH,
NORTH,
SOUTH,
EAST,
WEST,
EAST,
SOUTH
)
/decl/emote/visible/floorspin/proc/spin_dir(var/mob/user)
set waitfor = FALSE
for(var/i in spin_dirs)
user.set_dir(i)
sleep(1)
if(QDELETED(user))
return
/decl/emote/visible/floorspin/proc/spin_anim(var/mob/user)
set waitfor = FALSE
sleep(1)
if(!QDELETED(user))
user.SpinAnimation(10,1)
/decl/emote/visible/floorspin/do_extra(mob/user)
. = ..()
if(istype(user))
spin_dir(user)
spin_anim(user)
@@ -0,0 +1,10 @@
/decl/emote/visible/vomit
key = "vomit"
/decl/emote/visible/vomit/do_emote(var/atom/user, var/extra_params)
if(isliving(user))
var/mob/living/M = user
if(!M.isSynthetic())
M.vomit()
return
to_chat(src, SPAN_WARNING("You are unable to vomit."))