mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-27 23:29:10 +01:00
[MIRROR] Ported the Bay/Nebula emote system.
This commit is contained in:
@@ -272,6 +272,10 @@
|
||||
#define TASTE_DULL 0.5 //anything below 30%
|
||||
#define TASTE_NUMB 0.1 //anything below 150%
|
||||
|
||||
//Used by emotes
|
||||
#define VISIBLE_MESSAGE 1
|
||||
#define AUDIBLE_MESSAGE 2
|
||||
|
||||
// If they're in an FBP, what braintype.
|
||||
#define FBP_NONE ""
|
||||
#define FBP_CYBORG "Cyborg"
|
||||
@@ -436,3 +440,5 @@
|
||||
#define MAX_NUTRITION 5000 //VOREStation Edit
|
||||
|
||||
#define FAKE_INVIS_ALPHA_THRESHOLD 127 // If something's alpha var is at or below this number, certain things will pretend it is invisible.
|
||||
|
||||
#define DEATHGASP_NO_MESSAGE "no message"
|
||||
|
||||
+19
-11
@@ -490,7 +490,7 @@
|
||||
// Use for objects performing visible actions
|
||||
// message is output to anyone who can see, e.g. "The [src] does something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
/atom/proc/visible_message(var/message, var/blind_message, var/list/exclude_mobs = null)
|
||||
/atom/proc/visible_message(var/message, var/blind_message, var/list/exclude_mobs, var/range = world.view)
|
||||
|
||||
//VOREStation Edit
|
||||
var/list/see
|
||||
@@ -498,7 +498,7 @@
|
||||
var/obj/belly/B = loc
|
||||
see = B.get_mobs_and_objs_in_belly()
|
||||
else
|
||||
see = get_mobs_and_objs_in_view_fast(get_turf(src),world.view,remote_ghosts = FALSE)
|
||||
see = get_mobs_and_objs_in_view_fast(get_turf(src), range, remote_ghosts = FALSE)
|
||||
//VOREStation Edit End
|
||||
|
||||
var/list/seeing_mobs = see["mobs"]
|
||||
@@ -508,20 +508,20 @@
|
||||
|
||||
for(var/obj in seeing_objs)
|
||||
var/obj/O = obj
|
||||
O.show_message(message, 1, blind_message, 2)
|
||||
O.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE)
|
||||
for(var/mob in seeing_mobs)
|
||||
var/mob/M = mob
|
||||
if(M.see_invisible >= invisibility && MOB_CAN_SEE_PLANE(M, plane))
|
||||
M.show_message(message, 1, blind_message, 2)
|
||||
M.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE)
|
||||
else if(blind_message)
|
||||
M.show_message(blind_message, 2)
|
||||
M.show_message(blind_message, AUDIBLE_MESSAGE)
|
||||
|
||||
// Show a message to all mobs and objects in earshot of this atom
|
||||
// Use for objects performing audible actions
|
||||
// message is the message output to anyone who can hear.
|
||||
// deaf_message (optional) is what deaf people will see.
|
||||
// hearing_distance (optional) is the range, how many tiles away the message can be heard.
|
||||
/atom/proc/audible_message(var/message, var/deaf_message, var/hearing_distance)
|
||||
/atom/proc/audible_message(var/message, var/deaf_message, var/hearing_distance, var/radio_message)
|
||||
|
||||
var/range = hearing_distance || world.view
|
||||
var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE)
|
||||
@@ -529,14 +529,19 @@
|
||||
var/list/hearing_mobs = hear["mobs"]
|
||||
var/list/hearing_objs = hear["objs"]
|
||||
|
||||
for(var/obj in hearing_objs)
|
||||
var/obj/O = obj
|
||||
O.show_message(message, 2, deaf_message, 1)
|
||||
if(radio_message)
|
||||
for(var/obj in hearing_objs)
|
||||
var/obj/O = obj
|
||||
O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null)
|
||||
else
|
||||
for(var/obj in hearing_objs)
|
||||
var/obj/O = obj
|
||||
O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
|
||||
|
||||
for(var/mob in hearing_mobs)
|
||||
var/mob/M = mob
|
||||
var/msg = message
|
||||
M.show_message(msg, 2, deaf_message, 1)
|
||||
M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
|
||||
|
||||
/atom/movable/proc/dropInto(var/atom/destination)
|
||||
while(istype(destination))
|
||||
@@ -647,4 +652,7 @@
|
||||
|
||||
/atom/Exited(atom/movable/AM, atom/new_loc)
|
||||
. = ..()
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, new_loc)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, new_loc)
|
||||
|
||||
/atom/proc/get_visible_gender()
|
||||
return gender
|
||||
|
||||
@@ -507,7 +507,6 @@
|
||||
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
|
||||
|
||||
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
|
||||
//visible_message("<span class='notice'>\The [initial(name)] hums and hisses as it moves [to_despawn.real_name] into storage.</span>", 3)
|
||||
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]</span>", 3)
|
||||
|
||||
//VOREStation Edit begin: Dont delete mobs-in-mobs
|
||||
|
||||
@@ -554,9 +554,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
if(!hit_zone)
|
||||
U.do_attack_animation(M)
|
||||
playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
//visible_message("<span class='danger'>[U] attempts to stab [M] in the eyes, but misses!</span>")
|
||||
for(var/mob/V in viewers(M))
|
||||
V.show_message("<span class='danger'>[U] attempts to stab [M] in the eyes, but misses!</span>")
|
||||
visible_message(SPAN_DANGER("\The [U] attempts to stab \the [M] in the eyes, but misses!"))
|
||||
return
|
||||
|
||||
add_attack_logs(user,M,"Attack eyes with [name]")
|
||||
|
||||
@@ -74,14 +74,12 @@
|
||||
|
||||
/obj/item/weapon/material/snow/snowball/attack_self(mob/user as mob)
|
||||
if(user.a_intent == I_HURT)
|
||||
//visible_message("[user] has smashed the snowball in their hand!", "You smash the snowball in your hand.")
|
||||
to_chat(user, "<span class='notice'>You smash the snowball in your hand.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You smash the snowball in your hand."))
|
||||
var/atom/S = new /obj/item/stack/material/snow(user.loc)
|
||||
qdel(src)
|
||||
user.put_in_hands(S)
|
||||
else
|
||||
//visible_message("[user] starts compacting the snowball.", "You start compacting the snowball.")
|
||||
to_chat(user, "<span class='notice'>You start compacting the snowball.</span>")
|
||||
to_chat(user, SPAN_NOTICE("You start compacting the snowball."))
|
||||
if(do_after(user, 2 SECONDS))
|
||||
var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -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)
|
||||
@@ -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,129 @@
|
||||
/decl/emote/audible/awoo
|
||||
key = "awoo"
|
||||
emote_message_3p = "lets out an awoo."
|
||||
emote_sound = 'sound/voice/awoo.ogg'
|
||||
/decl/emote/audible/awoo2
|
||||
key = "awoo2"
|
||||
emote_message_3p = "lets out an awoo."
|
||||
emote_sound = 'sound/voice/long_awoo.ogg'
|
||||
/decl/emote/audible/growl
|
||||
key = "growl"
|
||||
emote_message_3p = "lets out a growl."
|
||||
emote_sound = 'sound/voice/growl.ogg'
|
||||
/decl/emote/audible/woof
|
||||
key = "woof"
|
||||
emote_message_3p = "lets out a woof."
|
||||
emote_sound = 'sound/voice/woof.ogg'
|
||||
/decl/emote/audible/woof2
|
||||
key = "woof2"
|
||||
emote_message_3p = "lets out a woof."
|
||||
emote_sound = 'sound/voice/woof2.ogg'
|
||||
/decl/emote/audible/nya
|
||||
key = "nya"
|
||||
emote_message_3p = "lets out a nya."
|
||||
emote_sound = 'sound/voice/nya.ogg'
|
||||
/decl/emote/audible/mrowl
|
||||
key = "mrowl"
|
||||
emote_message_3p = "mrowls."
|
||||
emote_sound = 'sound/voice/mrow.ogg'
|
||||
/decl/emote/audible/peep
|
||||
key = "peep"
|
||||
emote_message_3p = "peeps like a bird."
|
||||
emote_sound = 'sound/voice/peep.ogg'
|
||||
/decl/emote/audible/chirp
|
||||
key = "chirp"
|
||||
emote_message_3p = "chirps!"
|
||||
emote_sound = 'sound/misc/nymphchirp.ogg'
|
||||
/decl/emote/audible/hoot
|
||||
key = "hoot"
|
||||
emote_message_3p = "hoots!"
|
||||
emote_sound = 'sound/voice/hoot.ogg'
|
||||
/decl/emote/audible/weh
|
||||
key = "weh"
|
||||
emote_message_3p = "lets out a weh."
|
||||
emote_sound = 'sound/voice/weh.ogg'
|
||||
/decl/emote/audible/merp
|
||||
key = "merp"
|
||||
emote_message_3p = "lets out a merp."
|
||||
emote_sound = 'sound/voice/merp.ogg'
|
||||
/decl/emote/audible/myarp
|
||||
key = "myarp"
|
||||
emote_message_3p = "lets out a myarp."
|
||||
emote_sound = 'sound/voice/myarp.ogg'
|
||||
/decl/emote/audible/bark
|
||||
key = "bark"
|
||||
emote_message_3p = "lets out a bark."
|
||||
emote_sound = 'sound/voice/bark2.ogg'
|
||||
/decl/emote/audible/bork
|
||||
key = "bork"
|
||||
emote_message_3p = "lets out a bork."
|
||||
emote_sound = 'sound/voice/bork.ogg'
|
||||
/decl/emote/audible/mrow
|
||||
emote_message_3p = "lets out a mrow."
|
||||
emote_sound = 'sound/voice/mrow.ogg'
|
||||
/decl/emote/audible/hypno
|
||||
emote_message_3p = "lets out a mystifying tone."
|
||||
emote_sound = 'sound/voice/hypno.ogg'
|
||||
/decl/emote/audible/hiss
|
||||
key = "hiss"
|
||||
emote_message_3p = "lets out a hiss."
|
||||
emote_sound = 'sound/voice/hiss.ogg'
|
||||
/decl/emote/audible/rattle
|
||||
key = "rattle"
|
||||
emote_message_3p = "rattles!"
|
||||
emote_sound = 'sound/voice/rattle.ogg'
|
||||
/decl/emote/audible/squeak
|
||||
key = "squeak"
|
||||
emote_message_3p = "lets out a squeak."
|
||||
emote_sound = 'sound/effects/mouse_squeak.ogg'
|
||||
/decl/emote/audible/geck
|
||||
key = "geck"
|
||||
emote_message_3p = "geckers!"
|
||||
emote_sound = 'sound/voice/geck.ogg'
|
||||
/decl/emote/audible/baa
|
||||
key = "baa"
|
||||
emote_message_3p = "lets out a baa."
|
||||
emote_sound = 'sound/voice/baa.ogg'
|
||||
/decl/emote/audible/baa2
|
||||
key = "baa2"
|
||||
emote_message_3p = "bleats."
|
||||
emote_sound = 'sound/voice/baa2.ogg'
|
||||
/*
|
||||
/decl/emote/audible/deathgasp2
|
||||
key = "deathgasp2"
|
||||
emote_message_3p = "[species.get_death_message()]"
|
||||
m_type = 1
|
||||
emote_sound = 'sound/voice/deathgasp2.ogg'
|
||||
*/
|
||||
/decl/emote/audible/mar
|
||||
key = "mar"
|
||||
emote_message_3p = "lets out a mar."
|
||||
emote_sound = 'sound/voice/mar.ogg'
|
||||
/decl/emote/audible/wurble
|
||||
key = "wurble"
|
||||
emote_message_3p = "lets out a wurble."
|
||||
emote_sound = 'sound/voice/wurble.ogg'
|
||||
/decl/emote/audible/snort
|
||||
key = "snort"
|
||||
emote_message_3p = "snorts!"
|
||||
emote_sound = 'sound/voice/Snort.ogg'
|
||||
/decl/emote/audible/meow
|
||||
key = "meow"
|
||||
emote_message_3p = "gently meows!"
|
||||
emote_sound = 'sound/voice/Meow.ogg'
|
||||
/decl/emote/audible/moo
|
||||
key = "moo"
|
||||
emote_message_3p = "takes a breath and lets out a moo."
|
||||
emote_sound = 'sound/voice/Moo.ogg'
|
||||
/decl/emote/audible/croak
|
||||
key = "croak"
|
||||
emote_message_3p = "rumbles their throat, puffs their cheeks and croaks."
|
||||
emote_sound = 'sound/voice/Croak.ogg'
|
||||
/decl/emote/audible/gao
|
||||
key = "gao"
|
||||
emote_message_3p = "lets out a gao."
|
||||
emote_sound = 'sound/voice/gao.ogg'
|
||||
/decl/emote/audible/cackle
|
||||
key = "cackle"
|
||||
emote_message_3p = "cackles hysterically!"
|
||||
emote_sound = 'sound/voice/YeenCackle.ogg'
|
||||
@@ -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."
|
||||
@@ -0,0 +1,33 @@
|
||||
// Not specifically /human type because those won't allow FBPs to use them
|
||||
/decl/emote/helper/vwag
|
||||
key = "vwag"
|
||||
emote_message_3p = ""
|
||||
|
||||
/decl/emote/helper/vwag/check_user(mob/living/carbon/human/user)
|
||||
if(!istype(user) || (!user.tail_style || !user.tail_style.ani_state))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vwag/do_emote(var/mob/living/carbon/human/user, var/extra_params)
|
||||
if(user.toggle_tail(message = 1))
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vwag/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
|
||||
return "[user.wagging ? "starts" : "stops"] wagging USER_THEIR tail."
|
||||
|
||||
|
||||
/decl/emote/helper/vflap
|
||||
key = "vflap"
|
||||
emote_message_3p = ""
|
||||
|
||||
/decl/emote/helper/vflap/check_user(mob/living/carbon/human/user)
|
||||
if(!istype(user) || (!user.wing_style || !user.wing_style.ani_state))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vflap/do_emote(var/mob/living/carbon/human/user, var/extra_params)
|
||||
if(user.toggle_wing(message = 1))
|
||||
return ..()
|
||||
|
||||
/decl/emote/helper/vflap/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
|
||||
return "[user.flapping ? "starts" : "stops"] flapping USER_THEIR wings."
|
||||
@@ -0,0 +1,62 @@
|
||||
/decl/emote/human
|
||||
key = "vomit"
|
||||
|
||||
/decl/emote/human/check_user(var/mob/living/carbon/human/user)
|
||||
return (istype(user))//VOREStation Edit - What does a mouth have to do with wagging?? && 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()
|
||||
@@ -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) || istype(user.module, /obj/item/weapon/robot_module/robot/knine))) //VOREStation Add - knine module
|
||||
|
||||
/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'
|
||||
@@ -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."))
|
||||
@@ -0,0 +1,7 @@
|
||||
/decl/emote/visible/mlem
|
||||
key = "mlem"
|
||||
emote_message_3p = "mlems USER_THEIR tongue up over USER_THEIR nose. Mlem."
|
||||
|
||||
/decl/emote/visible/blep
|
||||
key = "blep"
|
||||
emote_message_3p = "bleps USER_THEIR tongue out. Blep."
|
||||
@@ -0,0 +1,181 @@
|
||||
// Note about emote messages:
|
||||
// - USER / TARGET will be replaced with the relevant name, in bold.
|
||||
// - USER_THEM / TARGET_THEM / USER_THEIR / TARGET_THEIR will be replaced with a
|
||||
// gender-appropriate version of the same.
|
||||
// - Impaired messages do not do any substitutions.
|
||||
|
||||
/decl/emote
|
||||
var/key // Command to use emote ie. '*[key]'
|
||||
var/emote_message_1p // First person message ('You do a flip!')
|
||||
var/emote_message_3p // Third person message ('Urist McBackflip does a flip!')
|
||||
var/emote_message_synthetic_1p // First person message for robits.
|
||||
var/emote_message_synthetic_3p // Third person message for robits.
|
||||
|
||||
var/emote_message_impaired // Deaf/blind message ('You hear someone flipping out.', 'You see someone opening and closing their mouth')
|
||||
|
||||
var/emote_message_1p_target // 'You do a flip at Urist McTarget!'
|
||||
var/emote_message_3p_target // 'Urist McShitter does a flip at Urist McTarget!'
|
||||
var/emote_message_synthetic_1p_target // First person targeted message for robits.
|
||||
var/emote_message_synthetic_3p_target // Third person targeted message for robits.
|
||||
|
||||
var/emote_message_radio // A message to send over the radio if one picks up this emote.
|
||||
var/emote_message_radio_synthetic // As above, but for synthetics.
|
||||
var/emote_message_muffled // A message to show if the emote is audible and the user is muzzled.
|
||||
|
||||
var/list/emote_sound // A sound for the emote to play.
|
||||
// Can either be a single sound, a list of sounds to pick from, or an
|
||||
// associative array of gender to single sounds/a list of sounds.
|
||||
var/list/emote_sound_synthetic // As above, but used when check_synthetic() is true.
|
||||
var/emote_volume = 50 // Volume of sound to play.
|
||||
var/emote_volume_synthetic = 50 // As above, but used when check_synthetic() is true.
|
||||
|
||||
var/message_type = VISIBLE_MESSAGE // Audible/visual flag
|
||||
var/check_restraints // Can this emote be used while restrained?
|
||||
var/check_range // falsy, or a range outside which the emote will not work
|
||||
var/conscious = TRUE // Do we need to be awake to emote this?
|
||||
var/emote_range = 0 // If >0, restricts emote visibility to viewers within range.
|
||||
|
||||
/decl/emote/proc/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params)
|
||||
if(target)
|
||||
if(emote_message_synthetic_1p_target && check_synthetic(user))
|
||||
return emote_message_synthetic_1p_target
|
||||
return emote_message_1p_target
|
||||
if(emote_message_synthetic_1p && check_synthetic(user))
|
||||
return emote_message_synthetic_1p
|
||||
return emote_message_1p
|
||||
|
||||
/decl/emote/proc/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
|
||||
if(target)
|
||||
if(emote_message_synthetic_3p_target && check_synthetic(user))
|
||||
return emote_message_synthetic_3p_target
|
||||
return emote_message_3p_target
|
||||
if(emote_message_synthetic_3p && check_synthetic(user))
|
||||
return emote_message_synthetic_3p
|
||||
return emote_message_3p
|
||||
|
||||
/decl/emote/proc/get_emote_sound(var/atom/user)
|
||||
if(check_synthetic(user) && emote_sound_synthetic)
|
||||
return list(
|
||||
"sound" = emote_sound_synthetic,
|
||||
"vol" = emote_volume_synthetic
|
||||
)
|
||||
if(emote_sound)
|
||||
return list(
|
||||
"sound" = emote_sound,
|
||||
"vol" = emote_volume
|
||||
)
|
||||
|
||||
/decl/emote/proc/do_emote(var/atom/user, var/extra_params)
|
||||
if(ismob(user) && check_restraints)
|
||||
var/mob/M = user
|
||||
if(M.restrained())
|
||||
to_chat(user, SPAN_WARNING("You are restrained and cannot do that."))
|
||||
return
|
||||
|
||||
var/atom/target
|
||||
if(can_target() && extra_params)
|
||||
extra_params = lowertext(extra_params)
|
||||
for(var/atom/thing in view(user))
|
||||
if(extra_params == lowertext(thing.name))
|
||||
target = thing
|
||||
break
|
||||
|
||||
if(target && target != user && check_range)
|
||||
if (get_dist(user, target) > check_range)
|
||||
to_chat(user, SPAN_WARNING("\The [target] is too far away."))
|
||||
return
|
||||
|
||||
var/use_1p = get_emote_message_1p(user, target, extra_params)
|
||||
if(use_1p)
|
||||
if(target)
|
||||
use_1p = replace_target_tokens(use_1p, target)
|
||||
use_1p = "<span class='emote'>[capitalize(replace_user_tokens(use_1p, user))]</span>"
|
||||
var/use_3p = get_emote_message_3p(user, target, extra_params)
|
||||
if(use_3p)
|
||||
if(target)
|
||||
use_3p = replace_target_tokens(use_3p, target)
|
||||
use_3p = "<span class='emote'><b>\The [user]</b> [replace_user_tokens(use_3p, user)]</span>"
|
||||
var/use_radio = get_radio_message(user)
|
||||
if(use_radio)
|
||||
if(target)
|
||||
use_radio = replace_target_tokens(use_radio, target)
|
||||
use_radio = replace_user_tokens(use_radio, user)
|
||||
|
||||
var/use_range = emote_range
|
||||
if (!use_range)
|
||||
use_range = world.view
|
||||
|
||||
if(ismob(user))
|
||||
var/mob/M = user
|
||||
if(message_type == AUDIBLE_MESSAGE)
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.silent)
|
||||
M.visible_message(message = "[user] opens their mouth silently!", self_message = "You cannot say anything!", blind_message = emote_message_impaired)
|
||||
return
|
||||
else
|
||||
M.audible_message(message = use_3p, self_message = use_1p, deaf_message = emote_message_impaired, hearing_distance = use_range, radio_message = use_radio)
|
||||
else
|
||||
M.visible_message(message = use_3p, self_message = use_1p, blind_message = emote_message_impaired, range = use_range)
|
||||
|
||||
do_extra(user, target)
|
||||
do_sound(user)
|
||||
|
||||
/decl/emote/proc/replace_target_tokens(var/msg, var/atom/target)
|
||||
. = msg
|
||||
if(istype(target))
|
||||
var/datum/gender/target_gender = gender_datums[target.get_visible_gender()]
|
||||
. = replacetext(., "TARGET_THEM", target_gender.him)
|
||||
. = replacetext(., "TARGET_THEIR", target_gender.his)
|
||||
. = replacetext(., "TARGET_SELF", target_gender.himself)
|
||||
. = replacetext(., "TARGET", "<b>\the [target]</b>")
|
||||
|
||||
/decl/emote/proc/replace_user_tokens(var/msg, var/atom/user)
|
||||
. = msg
|
||||
if(istype(user))
|
||||
var/datum/gender/user_gender = gender_datums[user.get_visible_gender()]
|
||||
. = replacetext(., "USER_THEM", user_gender.him)
|
||||
. = replacetext(., "USER_THEIR", user_gender.his)
|
||||
. = replacetext(., "USER_SELF", user_gender.himself)
|
||||
. = replacetext(., "USER", "<b>\the [user]</b>")
|
||||
|
||||
/decl/emote/proc/get_radio_message(var/atom/user)
|
||||
if(emote_message_radio_synthetic && check_synthetic(user))
|
||||
return emote_message_radio_synthetic
|
||||
return emote_message_radio
|
||||
|
||||
/decl/emote/proc/do_extra(var/atom/user, var/atom/target)
|
||||
return
|
||||
|
||||
/decl/emote/proc/do_sound(var/atom/user)
|
||||
var/list/use_sound = get_emote_sound(user)
|
||||
if(!islist(use_sound) || length(use_sound) < 2)
|
||||
return
|
||||
var/sound_to_play = use_sound["sound"]
|
||||
if(!sound_to_play)
|
||||
return
|
||||
if(islist(sound_to_play))
|
||||
if(sound_to_play[user.gender])
|
||||
sound_to_play = sound_to_play[user.gender]
|
||||
if(islist(sound_to_play) && length(sound_to_play))
|
||||
sound_to_play = pick(sound_to_play)
|
||||
if(sound_to_play)
|
||||
playsound(user.loc, sound_to_play, use_sound["vol"], 0, preference = /datum/client_preference/emote_noises) //VOREStation Add - Preference
|
||||
|
||||
/decl/emote/proc/check_user(var/atom/user)
|
||||
return TRUE
|
||||
|
||||
/decl/emote/proc/can_target()
|
||||
return (emote_message_1p_target || emote_message_3p_target)
|
||||
|
||||
/decl/emote/dd_SortValue()
|
||||
return key
|
||||
|
||||
/decl/emote/proc/check_synthetic(var/mob/living/user)
|
||||
. = istype(user) && user.isSynthetic()
|
||||
if(!. && ishuman(user) && message_type == AUDIBLE_MESSAGE)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.should_have_organ(O_LUNGS))
|
||||
var/obj/item/organ/internal/lungs/L = H.internal_organs_by_name[O_LUNGS]
|
||||
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
|
||||
. = TRUE
|
||||
@@ -0,0 +1,183 @@
|
||||
/mob/proc/can_emote(var/emote_type)
|
||||
return (stat == CONSCIOUS)
|
||||
|
||||
/mob/living/can_emote(var/emote_type)
|
||||
return (..() && !(silent && emote_type == AUDIBLE_MESSAGE))
|
||||
|
||||
/mob/proc/emote(var/act, var/m_type, var/message)
|
||||
set waitfor = FALSE
|
||||
// s-s-snowflake
|
||||
if(src.stat == DEAD && act != "deathgasp")
|
||||
return
|
||||
|
||||
if(usr == src) //client-called emote
|
||||
if (client && (client.prefs.muted & MUTE_IC))
|
||||
to_chat(src, "<span class='warning'>You cannot send IC messages (muted).</span>")
|
||||
return
|
||||
|
||||
if(act == "help")
|
||||
to_chat(src,"<b>Usable emotes:</b> [english_list(usable_emotes)].")
|
||||
return
|
||||
|
||||
if(!can_emote(m_type))
|
||||
to_chat(src, SPAN_WARNING("You cannot currently [m_type == AUDIBLE_MESSAGE ? "audibly" : "visually"] emote!"))
|
||||
return
|
||||
|
||||
if(act == "me")
|
||||
return custom_emote(m_type, message)
|
||||
|
||||
if(act == "custom")
|
||||
if(!message)
|
||||
message = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
|
||||
if(!message)
|
||||
return
|
||||
if (!m_type)
|
||||
if(alert(src, "Is this an audible emote?", "Emote", "Yes", "No") == "No")
|
||||
m_type = VISIBLE_MESSAGE
|
||||
else
|
||||
m_type = AUDIBLE_MESSAGE
|
||||
return custom_emote(m_type, message)
|
||||
|
||||
var/splitpoint = findtext(act, " ")
|
||||
if(splitpoint > 0)
|
||||
var/tempstr = act
|
||||
act = copytext(tempstr,1,splitpoint)
|
||||
message = copytext(tempstr,splitpoint+1,0)
|
||||
|
||||
//VOREStation Add - NIF soulcatcher shortcuts
|
||||
if(act == "nsay")
|
||||
return nsay(message)
|
||||
|
||||
if(act == "nme")
|
||||
return nme(message)
|
||||
//VOREStation Add End
|
||||
|
||||
var/decl/emote/use_emote = usable_emotes[act]
|
||||
if(!use_emote)
|
||||
to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type <b>say *help</b> for a list of usable emotes."))
|
||||
return
|
||||
|
||||
if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS)
|
||||
return
|
||||
|
||||
if(use_emote.message_type == AUDIBLE_MESSAGE && is_muzzled())
|
||||
audible_message("<b>\The [src]</b> [use_emote.emote_message_muffled || "makes a muffled sound."]")
|
||||
return
|
||||
else
|
||||
use_emote.do_emote(src, message)
|
||||
|
||||
for (var/obj/item/weapon/implant/I in src)
|
||||
if (I.implanted)
|
||||
I.trigger(act, src)
|
||||
|
||||
/mob/proc/format_emote(var/emoter = null, var/message = null)
|
||||
var/pretext
|
||||
var/subtext
|
||||
var/nametext
|
||||
var/end_char
|
||||
var/start_char
|
||||
var/name_anchor
|
||||
|
||||
if(!message || !emoter)
|
||||
return
|
||||
|
||||
message = html_decode(message)
|
||||
|
||||
name_anchor = findtext(message, "*")
|
||||
if(name_anchor > 0) // User supplied emote with visible_emote token (default ^)
|
||||
pretext = copytext(message, 1, name_anchor)
|
||||
subtext = copytext(message, name_anchor + 1, length(message) + 1)
|
||||
else
|
||||
// No token. Just the emote as usual.
|
||||
subtext = message
|
||||
|
||||
// Oh shit, we got this far! Let's see... did the user attempt to use more than one token?
|
||||
if(findtext(subtext, "*"))
|
||||
// abort abort!
|
||||
to_chat(emoter, SPAN_WARNING("You may use only one \"["*"]\" symbol in your emote."))
|
||||
return
|
||||
|
||||
if(pretext)
|
||||
// Add a space at the end if we didn't already supply one.
|
||||
end_char = copytext(pretext, length(pretext), length(pretext) + 1)
|
||||
if(end_char != " ")
|
||||
pretext += " "
|
||||
|
||||
// Grab the last character of the emote message.
|
||||
end_char = copytext(subtext, length(subtext), length(subtext) + 1)
|
||||
if(!(end_char in list(".", "?", "!", "\"", "-", "~"))) // gotta include ~ for all you fucking weebs
|
||||
// No punctuation supplied. Tack a period on the end.
|
||||
subtext += "."
|
||||
|
||||
// Add a space to the subtext, unless it begins with an apostrophe or comma.
|
||||
if(subtext != ".")
|
||||
// First, let's get rid of any existing space, to account for sloppy emoters ("X, ^ , Y")
|
||||
subtext = trim_left(subtext)
|
||||
start_char = copytext(subtext, 1, 2)
|
||||
if(start_char != "," && start_char != "'")
|
||||
subtext = " " + subtext
|
||||
|
||||
pretext = capitalize(html_encode(pretext))
|
||||
nametext = html_encode(nametext)
|
||||
subtext = html_encode(subtext)
|
||||
// Store the player's name in a nice bold, naturalement
|
||||
nametext = "<B>[emoter]</B>"
|
||||
return pretext + nametext + subtext
|
||||
|
||||
/mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message, var/range = world.view)
|
||||
|
||||
if((usr && stat) || (!use_me && usr == src))
|
||||
to_chat(src, "You are unable to emote.")
|
||||
return
|
||||
|
||||
var/input
|
||||
if(!message)
|
||||
input = sanitize(input(src,"Choose an emote to display.") as text|null)
|
||||
else
|
||||
input = message
|
||||
|
||||
if(input)
|
||||
message = format_emote(src, message)
|
||||
else
|
||||
return
|
||||
|
||||
if(input)
|
||||
log_emote(message,src) //Log before we add junk
|
||||
message = "<span class='emote'><B>[src]</B> [input]</span>"
|
||||
else
|
||||
return
|
||||
|
||||
if(message)
|
||||
message = encode_html_emphasis(message)
|
||||
|
||||
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
|
||||
// Maybe some people are okay with that.
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T) return
|
||||
var/list/in_range = get_mobs_and_objs_in_view_fast(T,range,2,remote_ghosts = client ? TRUE : FALSE)
|
||||
var/list/m_viewers = in_range["mobs"]
|
||||
var/list/o_viewers = in_range["objs"]
|
||||
|
||||
for(var/mob in m_viewers)
|
||||
var/mob/M = mob
|
||||
spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes.
|
||||
if(M)
|
||||
if(isobserver(M))
|
||||
message = "<span class='emote'><B>[src]</B> ([ghost_follow_link(src, M)]) [input]</span>"
|
||||
M.show_message(message, m_type)
|
||||
|
||||
for(var/obj in o_viewers)
|
||||
var/obj/O = obj
|
||||
spawn(0)
|
||||
if(O)
|
||||
O.see_emote(src, message, m_type)
|
||||
|
||||
|
||||
|
||||
// Specific mob type exceptions below.
|
||||
/mob/living/silicon/ai/emote(var/act, var/type, var/message)
|
||||
var/obj/machinery/hologram/holopad/T = src.holo
|
||||
if(T && T.masters[src]) //Is the AI using a holopad?
|
||||
src.holopad_emote(message)
|
||||
else //Emote normally, then.
|
||||
..()
|
||||
@@ -73,7 +73,7 @@
|
||||
if(src.loc && istype(loc,/obj/belly) || istype(loc,/obj/item/device/dogborg/sleeper)) deathmessage = "no message" //VOREStation Add - Prevents death messages from inside mobs
|
||||
facing_dir = null
|
||||
|
||||
if(!gibbed && deathmessage != "no message") // This is gross, but reliable. Only brains use it.
|
||||
if(!gibbed && deathmessage != DEATHGASP_NO_MESSAGE)
|
||||
src.visible_message("<b>\The [src.name]</b> [deathmessage]")
|
||||
|
||||
set_stat(DEAD)
|
||||
|
||||
@@ -1,64 +1,9 @@
|
||||
// All mobs should have custom emote, really..
|
||||
//m_type == 1 --> visual.
|
||||
//m_type == 2 --> audible
|
||||
/mob/proc/custom_emote(var/m_type=1,var/message = null,var/range=world.view)
|
||||
if(stat || !use_me && usr == src)
|
||||
to_chat(src, "You are unable to emote.")
|
||||
return
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
if(m_type == 2 && muzzled) return
|
||||
|
||||
var/input
|
||||
if(!message)
|
||||
input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
|
||||
else
|
||||
input = message
|
||||
if(input)
|
||||
log_emote(message,src) //Log before we add junk
|
||||
message = "<span class='emote'><B>[src]</B> [input]</span>"
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
if (message)
|
||||
message = encode_html_emphasis(message)
|
||||
|
||||
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
|
||||
// Maybe some people are okay with that.
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T) return
|
||||
var/list/in_range = get_mobs_and_objs_in_view_fast(T,range,2,remote_ghosts = client ? TRUE : FALSE)
|
||||
var/list/m_viewers = in_range["mobs"]
|
||||
var/list/o_viewers = in_range["objs"]
|
||||
|
||||
for(var/mob in m_viewers)
|
||||
var/mob/M = mob
|
||||
spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes.
|
||||
if(M)
|
||||
if(isobserver(M))
|
||||
//VOREStation Edit Start
|
||||
var/mob/observer/dead/D = M
|
||||
if(ckey || (src in view(D)))
|
||||
M.show_message(message, m_type)
|
||||
message = "<span class='emote'><B>[src]</B> ([ghost_follow_link(src, M)]) [input]</span>"
|
||||
else
|
||||
M.show_message(message, m_type)
|
||||
//VOREStation Edit End
|
||||
|
||||
for(var/obj in o_viewers)
|
||||
var/obj/O = obj
|
||||
spawn(0)
|
||||
if(O)
|
||||
O.see_emote(src, message, m_type)
|
||||
|
||||
// Shortcuts for above proc
|
||||
/mob/proc/visible_emote(var/act_desc)
|
||||
custom_emote(1, act_desc)
|
||||
custom_emote(VISIBLE_MESSAGE, act_desc)
|
||||
|
||||
/mob/proc/audible_emote(var/act_desc)
|
||||
custom_emote(2, act_desc)
|
||||
custom_emote(AUDIBLE_MESSAGE, act_desc)
|
||||
|
||||
/mob/proc/emote_dead(var/message)
|
||||
|
||||
|
||||
@@ -1,3 +1,29 @@
|
||||
var/list/_nymph_default_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/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/hiss,
|
||||
/decl/emote/audible,
|
||||
/decl/emote/audible/scretch,
|
||||
/decl/emote/audible/choke,
|
||||
/decl/emote/audible/gnarl,
|
||||
/decl/emote/audible/bug_hiss,
|
||||
/decl/emote/audible/bug_chitter,
|
||||
/decl/emote/audible/chirp
|
||||
)
|
||||
|
||||
/mob/living/carbon/alien/diona
|
||||
name = "diona nymph"
|
||||
voice_name = "diona nymph"
|
||||
@@ -20,6 +46,9 @@
|
||||
holder_type = /obj/item/weapon/holder/diona
|
||||
var/obj/item/hat
|
||||
|
||||
/mob/living/carbon/alien/diona/get_default_emotes()
|
||||
return global._nymph_default_emotes
|
||||
|
||||
/mob/living/carbon/alien/diona/Initialize()
|
||||
. = ..()
|
||||
species = GLOB.all_species[SPECIES_DIONA]
|
||||
|
||||
@@ -1,108 +1,31 @@
|
||||
/mob/living/carbon/alien/emote(var/act, var/m_type=1, var/message = null)
|
||||
var/param = null
|
||||
if(findtext(act, "-", 1, null))
|
||||
var/t1 = findtext(act, "-", 1, null)
|
||||
param = copytext(act, t1 + 1, length(act) + 1)
|
||||
act = copytext(act, 1, t1)
|
||||
var/list/_alien_default_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/hiss,
|
||||
/decl/emote/audible,
|
||||
/decl/emote/audible/deathgasp_alien,
|
||||
/decl/emote/audible/whimper,
|
||||
/decl/emote/audible/gasp,
|
||||
/decl/emote/audible/scretch,
|
||||
/decl/emote/audible/choke,
|
||||
/decl/emote/audible/moan,
|
||||
/decl/emote/audible/gnarl,
|
||||
/decl/emote/audible/chirp
|
||||
)
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
act = lowertext(act)
|
||||
|
||||
switch(act)
|
||||
if("sign")
|
||||
if(!restrained())
|
||||
var/num = null
|
||||
if(text2num(param))
|
||||
num = "the number [text2num(param)]"
|
||||
if(num)
|
||||
message = "<B>[src]</B> signs [num]."
|
||||
m_type = 1
|
||||
if("burp")
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> burps."
|
||||
m_type = 2
|
||||
if("deathgasp")
|
||||
message = "<B>[src]</B> lets out a waning guttural screech, green blood bubbling from its maw."
|
||||
m_type = 2
|
||||
if("scratch")
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> scratches."
|
||||
m_type = 1
|
||||
if("whimper")
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> whimpers."
|
||||
m_type = 2
|
||||
if("tail")
|
||||
message = "<B>[src]</B> waves its tail."
|
||||
m_type = 1
|
||||
if("gasp")
|
||||
message = "<B>[src]</B> gasps."
|
||||
m_type = 2
|
||||
if("shiver")
|
||||
message = "<B>[src]</B> shivers."
|
||||
m_type = 2
|
||||
if("drool")
|
||||
message = "<B>[src]</B> drools."
|
||||
m_type = 1
|
||||
if("scretch")
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> scretches."
|
||||
m_type = 2
|
||||
if("choke")
|
||||
message = "<B>[src]</B> chokes."
|
||||
m_type = 2
|
||||
if("moan")
|
||||
message = "<B>[src]</B> moans!"
|
||||
m_type = 2
|
||||
if("nod")
|
||||
message = "<B>[src]</B> nods its head."
|
||||
m_type = 1
|
||||
// if("sit")
|
||||
// message = "<B>[src]</B> sits down." //Larvan can't sit down, /N
|
||||
// m_type = 1
|
||||
if("sway")
|
||||
message = "<B>[src]</B> sways around dizzily."
|
||||
m_type = 1
|
||||
if("sulk")
|
||||
message = "<B>[src]</B> sulks down sadly."
|
||||
m_type = 1
|
||||
if("twitch")
|
||||
message = "<B>[src]</B> twitches."
|
||||
m_type = 1
|
||||
if("twitch_v")
|
||||
message = "<B>[src]</B> twitches violently."
|
||||
m_type = 1
|
||||
if("dance")
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> dances around happily."
|
||||
m_type = 1
|
||||
if("roll")
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> rolls."
|
||||
m_type = 1
|
||||
if("shake")
|
||||
message = "<B>[src]</B> shakes its head."
|
||||
m_type = 1
|
||||
if("gnarl")
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> gnarls and shows its teeth.."
|
||||
m_type = 2
|
||||
if("jump")
|
||||
message = "<B>[src]</B> jumps!"
|
||||
m_type = 1
|
||||
if("hiss_")
|
||||
message = "<B>[src]</B> hisses softly."
|
||||
m_type = 1
|
||||
if("collapse")
|
||||
Paralyse(2)
|
||||
message = "<B>[src]</B> collapses!"
|
||||
m_type = 2
|
||||
if("chirp")
|
||||
message = "<B>[src]</B> chirps!"
|
||||
playsound(src, 'sound/misc/nymphchirp.ogg', 50, 0)
|
||||
m_type = 2
|
||||
if("help")
|
||||
to_chat(src, "<span class='filter_say'>burp, chirp, choke, collapse, dance, drool, gasp, shiver, gnarl, jump, moan, nod, roll, scratch,\nscretch, shake, sign-#, sulk, sway, tail, twitch, whimper</span>")
|
||||
|
||||
if(!stat)
|
||||
..(act, m_type, message)
|
||||
/mob/living/carbon/alien/get_default_emotes()
|
||||
. = global._alien_default_emotes
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
container.icon_state = "mmi_dead"
|
||||
return ..(gibbed,"beeps shrilly as the MMI flatlines!")
|
||||
else
|
||||
return ..(gibbed,"no message")
|
||||
return ..(gibbed, DEATHGASP_NO_MESSAGE)
|
||||
|
||||
/mob/living/carbon/brain/gib()
|
||||
if(istype(container, /obj/item/device/mmi))
|
||||
|
||||
@@ -1,47 +1,17 @@
|
||||
/mob/living/carbon/brain/emote(var/act,var/m_type=1,var/message = null)
|
||||
if(!(container && istype(container, /obj/item/device/mmi)))//No MMI, no emotes
|
||||
return
|
||||
var/list/_brain_default_emotes = list(
|
||||
/decl/emote/audible/alarm,
|
||||
/decl/emote/audible/alert,
|
||||
/decl/emote/audible/notice,
|
||||
/decl/emote/audible/whistle,
|
||||
/decl/emote/audible/synth,
|
||||
/decl/emote/audible/beep,
|
||||
/decl/emote/audible/boop,
|
||||
/decl/emote/visible/blink,
|
||||
/decl/emote/visible/flash
|
||||
)
|
||||
|
||||
if(findtext(act, "-", 1, null))
|
||||
var/t1 = findtext(act, "-", 1, null)
|
||||
act = copytext(act, 1, t1)
|
||||
/mob/living/carbon/brain/can_emote()
|
||||
return (istype(container, /obj/item/device/mmi) && ..())
|
||||
|
||||
if(stat == DEAD)
|
||||
return
|
||||
switch(act)
|
||||
if("alarm")
|
||||
to_chat(src, "You sound an alarm.")
|
||||
message = "<B>[src]</B> sounds an alarm."
|
||||
m_type = 2
|
||||
if("alert")
|
||||
to_chat(src, "You let out a distressed noise.")
|
||||
message = "<B>[src]</B> lets out a distressed noise."
|
||||
m_type = 2
|
||||
if("notice")
|
||||
to_chat(src, "You play a loud tone.")
|
||||
message = "<B>[src]</B> plays a loud tone."
|
||||
m_type = 2
|
||||
if("flash")
|
||||
message = "The lights on <B>[src]</B> flash quickly."
|
||||
m_type = 1
|
||||
if("blink")
|
||||
message = "<B>[src]</B> blinks."
|
||||
m_type = 1
|
||||
if("whistle")
|
||||
to_chat(src, "You whistle.")
|
||||
message = "<B>[src]</B> whistles."
|
||||
m_type = 2
|
||||
if("beep")
|
||||
to_chat(src, "You beep.")
|
||||
message = "<B>[src]</B> beeps."
|
||||
m_type = 2
|
||||
if("boop")
|
||||
to_chat(src, "You boop.")
|
||||
message = "<B>[src]</B> boops."
|
||||
m_type = 2
|
||||
if("help")
|
||||
to_chat(src, "<span class='filter_say'>alarm, alert, notice, flash, blink, whistle, beep, boop</span>")
|
||||
|
||||
if(!stat)
|
||||
..(act, m_type, message)
|
||||
|
||||
/mob/living/carbon/brain/get_default_emotes()
|
||||
return global._brain_default_emotes
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null)
|
||||
var/param = null
|
||||
|
||||
@@ -856,6 +857,986 @@
|
||||
|
||||
if(message)
|
||||
custom_emote(m_type,message)
|
||||
||||||| parent of caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null)
|
||||
var/param = null
|
||||
|
||||
var/datum/gender/T = gender_datums[get_visible_gender()]
|
||||
|
||||
if(findtext(act, "-", 1, null))
|
||||
var/t1 = findtext(act, "-", 1, null)
|
||||
param = copytext(act, t1 + 1, length(act) + 1)
|
||||
act = copytext(act, 1, t1)
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
//var/m_type = 1
|
||||
|
||||
for(var/obj/item/organ/O in organs)
|
||||
for(var/obj/item/weapon/implant/I in O)
|
||||
if(I.implanted)
|
||||
I.trigger(act, src)
|
||||
|
||||
if(stat == DEAD && (act != "deathgasp"))
|
||||
return
|
||||
|
||||
if(attempt_vr(src, "handle_emote_vr", list(act, m_type, message))) return //VOREStation Add - Custom Emote Handler
|
||||
|
||||
switch(act)
|
||||
if("airguitar")
|
||||
if(!restrained())
|
||||
message = "is strumming the air and headbanging like a safari chimp."
|
||||
m_type = 1
|
||||
|
||||
//Machine-only emotes
|
||||
if("ping", "beep", "buzz", "yes", "ye", "dwoop", "no", "rcough", "rsneeze")
|
||||
|
||||
if(!isSynthetic())
|
||||
to_chat(src, "<span class='warning'>You are not a synthetic.</span>")
|
||||
return
|
||||
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
var/display_msg = "beeps"
|
||||
var/use_sound = 'sound/machines/twobeep.ogg'
|
||||
if(act == "buzz")
|
||||
display_msg = "buzzes"
|
||||
use_sound = 'sound/machines/buzz-sigh.ogg'
|
||||
else if(act == "ping")
|
||||
display_msg = "pings"
|
||||
use_sound = 'sound/machines/ping.ogg'
|
||||
else if(act == "yes" || act == "ye")
|
||||
display_msg = "emits an affirmative blip"
|
||||
use_sound = 'sound/machines/synth_yes.ogg'
|
||||
else if(act == "dwoop")
|
||||
display_msg = "chirps happily"
|
||||
use_sound = 'sound/machines/dwoop.ogg'
|
||||
else if(act == "no")
|
||||
display_msg = "emits a negative blip"
|
||||
use_sound = 'sound/machines/synth_no.ogg'
|
||||
else if(act == "rcough")
|
||||
display_msg = "emits a robotic cough"
|
||||
if(get_gender() == FEMALE)
|
||||
use_sound = pick('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
|
||||
else
|
||||
use_sound = pick('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
|
||||
else if(act == "rsneeze")
|
||||
display_msg = "emits a robotic sneeze"
|
||||
if(get_gender() == FEMALE)
|
||||
use_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
|
||||
else
|
||||
use_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
|
||||
|
||||
if(param)
|
||||
message = "[display_msg] at [param]."
|
||||
else
|
||||
message = "[display_msg]."
|
||||
playsound(src, use_sound, 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
m_type = 1
|
||||
|
||||
//Promethean-only emotes
|
||||
if("squish")
|
||||
/* VOREStation Removal Start - Eh. People can squish maybe.
|
||||
if(species.bump_flag != SLIME) //This should definitely do it.
|
||||
to_chat(src, "<span class='warning'>You are not a slime thing!</span>")
|
||||
return
|
||||
*/ //VOREStation Removal End
|
||||
playsound(src, 'sound/effects/slime_squish.ogg', 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add //Credit to DrMinky (freesound.org) for the sound.
|
||||
message = "squishes."
|
||||
m_type = 1
|
||||
|
||||
if("chirp")
|
||||
/* VOREStation Removal Start - Eh. People can chirp maybe.
|
||||
if ((species.bump_flag != SLIME) && (species.name != SPECIES_DIONA))
|
||||
to_chat(src, "<span class='warning'>You are not a diona or slime!</span>")
|
||||
return
|
||||
*/ //VOREStation Removal End
|
||||
playsound(src, 'sound/misc/nymphchirp.ogg', 50, 0)
|
||||
message = "chirps."
|
||||
m_type = 2
|
||||
|
||||
//Skrell-only emotes
|
||||
if("warble")
|
||||
if(species.name != SPECIES_SKRELL)
|
||||
to_chat(src, "<span class='warning'>You are not a Skrell!</span>")
|
||||
return
|
||||
|
||||
playsound(src, 'sound/effects/warble.ogg', 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
|
||||
message = "warbles."
|
||||
m_type = 2
|
||||
|
||||
if("blink")
|
||||
message = "blinks."
|
||||
m_type = 1
|
||||
|
||||
if("blink_r")
|
||||
message = "blinks rapidly."
|
||||
m_type = 1
|
||||
|
||||
if("bow")
|
||||
if(!buckled)
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "bows to [param]."
|
||||
else
|
||||
message = "bows."
|
||||
m_type = 1
|
||||
|
||||
if("custom")
|
||||
var/input = sanitize(input("Choose an emote to display.") as text|null)
|
||||
if(!input)
|
||||
return
|
||||
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
|
||||
if(input2 == "Visible")
|
||||
m_type = 1
|
||||
else if(input2 == "Hearable")
|
||||
if(miming)
|
||||
return
|
||||
m_type = 2
|
||||
else
|
||||
alert("Unable to use this emote, must be either hearable or visible.")
|
||||
return
|
||||
return custom_emote(m_type, input)
|
||||
|
||||
if("me")
|
||||
|
||||
//if(silent && silent > 0 && findtext(message,"\"",1, null) > 0)
|
||||
// return //This check does not work and I have no idea why, I'm leaving it in for reference.
|
||||
|
||||
if(client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
to_chat(src, "<font color='red'>You cannot send IC messages (muted).</font>")
|
||||
return
|
||||
if(stat)
|
||||
return
|
||||
if(!(message))
|
||||
return
|
||||
return custom_emote(m_type, message)
|
||||
|
||||
if("salute")
|
||||
if(!buckled)
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "salutes to [param]."
|
||||
else
|
||||
message = "salutes."
|
||||
m_type = 1
|
||||
|
||||
if("choke")
|
||||
if(miming)
|
||||
message = "clutches [T.his] throat desperately!"
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "chokes!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a strong noise."
|
||||
m_type = 2
|
||||
|
||||
if("clap")
|
||||
if(!restrained())
|
||||
message = "claps."
|
||||
playsound(src, 'sound/misc/clapping.ogg')
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("flap")
|
||||
if(!restrained())
|
||||
message = "flaps [T.his] wings."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("aflap")
|
||||
if(!restrained())
|
||||
message = "flaps [T.his] wings ANGRILY!"
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("drool")
|
||||
message = "drools."
|
||||
m_type = 1
|
||||
|
||||
if("eyebrow")
|
||||
message = "raises an eyebrow."
|
||||
m_type = 1
|
||||
|
||||
if("chuckle")
|
||||
if(miming)
|
||||
message = "appears to chuckle."
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "chuckles."
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if("twitch")
|
||||
message = "twitches."
|
||||
m_type = 1
|
||||
|
||||
if("twitch_v")
|
||||
message = "twitches violently."
|
||||
m_type = 1
|
||||
|
||||
if("faint")
|
||||
message = "faints."
|
||||
if(sleeping)
|
||||
return //Can't faint while asleep
|
||||
Sleeping(10)
|
||||
m_type = 1
|
||||
|
||||
if("cough", "coughs")
|
||||
if(miming)
|
||||
message = "appears to cough!"
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
var/robotic = 0
|
||||
m_type = 2
|
||||
if(should_have_organ(O_LUNGS))
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
|
||||
robotic = 1
|
||||
if(!robotic && !isSynthetic())
|
||||
message = "coughs!"
|
||||
if(get_gender() == FEMALE)
|
||||
if(species.female_cough_sounds)
|
||||
playsound(src, pick(species.female_cough_sounds), 120, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
else
|
||||
if(species.male_cough_sounds)
|
||||
playsound(src, pick(species.male_cough_sounds), 120, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
else
|
||||
message = "emits a robotic cough"
|
||||
var/use_sound
|
||||
if(get_gender() == FEMALE)
|
||||
use_sound = pick('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
|
||||
else
|
||||
use_sound = pick('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
|
||||
playsound(src, use_sound, 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
else
|
||||
message = "makes a strong noise."
|
||||
m_type = 2
|
||||
|
||||
if("frown")
|
||||
message = "frowns."
|
||||
m_type = 1
|
||||
|
||||
if("nod")
|
||||
message = "nods."
|
||||
m_type = 1
|
||||
|
||||
if("blush")
|
||||
message = "blushes."
|
||||
m_type = 1
|
||||
|
||||
if("wave")
|
||||
message = "waves."
|
||||
m_type = 1
|
||||
|
||||
if("gasp")
|
||||
if(miming)
|
||||
message = "appears to be gasping!"
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "gasps!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a weak noise."
|
||||
m_type = 2
|
||||
|
||||
if("deathgasp")
|
||||
message = "[species.get_death_message()]"
|
||||
m_type = 1
|
||||
|
||||
if("giggle")
|
||||
if(miming)
|
||||
message = "giggles silently!"
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "giggles."
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if("glare")
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "glares at [param]."
|
||||
else
|
||||
message = "glares."
|
||||
|
||||
if("stare")
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "stares at [param]."
|
||||
else
|
||||
message = "stares."
|
||||
|
||||
if("look")
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "looks at [param]."
|
||||
else
|
||||
message = "looks."
|
||||
m_type = 1
|
||||
|
||||
if("grin")
|
||||
message = "grins."
|
||||
m_type = 1
|
||||
|
||||
if("cry")
|
||||
if(miming)
|
||||
message = "cries."
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "cries."
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a weak noise. [T.he] [get_visible_gender() == NEUTER ? "frown" : "frowns"]." // no good, non-unwieldy alternative to this ternary at the moment
|
||||
m_type = 2
|
||||
|
||||
if("sigh")
|
||||
if(miming)
|
||||
message = "sighs."
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "sighs."
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a weak noise."
|
||||
m_type = 2
|
||||
|
||||
if("laugh")
|
||||
if(miming)
|
||||
message = "acts out a laugh."
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "laughs."
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if("mumble")
|
||||
message = "mumbles!"
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("grumble")
|
||||
if(miming)
|
||||
message = "grumbles!"
|
||||
m_type = 1
|
||||
if(!muzzled)
|
||||
message = "grumbles!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if("groan")
|
||||
if(miming)
|
||||
message = "appears to groan!"
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "groans!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a loud noise."
|
||||
m_type = 2
|
||||
|
||||
if("moan")
|
||||
if(miming)
|
||||
message = "appears to moan!"
|
||||
m_type = 1
|
||||
else
|
||||
message = "moans!"
|
||||
m_type = 2
|
||||
|
||||
if("johnny")
|
||||
var/M
|
||||
if(param)
|
||||
M = param
|
||||
if(!M)
|
||||
param = null
|
||||
else
|
||||
if(miming)
|
||||
message = "takes a drag from a cigarette and blows \"[M]\" out in smoke."
|
||||
m_type = 1
|
||||
else
|
||||
message = "says, \"[M], please. He had a family.\" [name] takes a drag from a cigarette and blows his name out in smoke."
|
||||
m_type = 2
|
||||
|
||||
if("point")
|
||||
if(!restrained())
|
||||
var/mob/M = null
|
||||
if(param)
|
||||
for(var/atom/A as mob|obj|turf|area in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
|
||||
if(!M)
|
||||
message = "points."
|
||||
else
|
||||
pointed(M)
|
||||
|
||||
if(M)
|
||||
message = "points to [M]."
|
||||
else
|
||||
m_type = 1
|
||||
|
||||
if("crack")
|
||||
if(!restrained())
|
||||
message = "cracks [T.his] knuckles."
|
||||
playsound(src, 'sound/voice/knuckles.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
m_type = 1
|
||||
|
||||
if("raise")
|
||||
if(!restrained())
|
||||
message = "raises a hand."
|
||||
m_type = 1
|
||||
|
||||
if("shake")
|
||||
message = "shakes [T.his] head."
|
||||
m_type = 1
|
||||
|
||||
if("shrug")
|
||||
message = "shrugs."
|
||||
m_type = 1
|
||||
|
||||
if("signal")
|
||||
if(!restrained())
|
||||
var/t1 = round(text2num(param))
|
||||
if(isnum(t1))
|
||||
if(t1 <= 5 && (!r_hand || !l_hand))
|
||||
message = "raises [t1] finger\s."
|
||||
else if(t1 <= 10 && (!r_hand && !l_hand))
|
||||
message = "raises [t1] finger\s."
|
||||
m_type = 1
|
||||
|
||||
if("smile")
|
||||
message = "smiles."
|
||||
m_type = 1
|
||||
|
||||
if("shiver")
|
||||
message = "shivers."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("pale")
|
||||
message = "goes pale for a second."
|
||||
m_type = 1
|
||||
|
||||
if("tremble")
|
||||
message = "trembles in fear!"
|
||||
m_type = 1
|
||||
|
||||
if("sneeze", "sneezes")
|
||||
if(miming)
|
||||
message = "sneezes."
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
var/robotic = 0
|
||||
m_type = 2
|
||||
if(should_have_organ(O_LUNGS))
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
|
||||
robotic = 1
|
||||
if(!robotic && !isSynthetic())
|
||||
message = "sneezes."
|
||||
if(get_gender() == FEMALE)
|
||||
playsound(src, species.female_sneeze_sound, 70, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
else
|
||||
playsound(src, species.male_sneeze_sound, 70, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
m_type = 2
|
||||
else
|
||||
message = "emits a robotic sneeze"
|
||||
var/use_sound
|
||||
if(get_gender() == FEMALE)
|
||||
use_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
|
||||
else
|
||||
use_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
|
||||
playsound(src, use_sound, 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
else
|
||||
message = "makes a strange noise."
|
||||
m_type = 2
|
||||
|
||||
if("sniff")
|
||||
message = "sniffs."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("snore")
|
||||
if(miming)
|
||||
message = "sleeps soundly."
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "snores."
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if("whimper")
|
||||
if(miming)
|
||||
message = "appears hurt."
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "whimpers."
|
||||
m_type = 2
|
||||
else
|
||||
message = "makes a weak noise."
|
||||
m_type = 2
|
||||
|
||||
if("wink")
|
||||
message = "winks."
|
||||
m_type = 1
|
||||
|
||||
if("yawn")
|
||||
if(!muzzled)
|
||||
message = "yawns."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("collapse")
|
||||
Paralyse(2)
|
||||
message = "collapses!"
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("hug")
|
||||
m_type = 1
|
||||
if(!restrained())
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(1, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(M == src)
|
||||
M = null
|
||||
|
||||
if(M)
|
||||
message = "hugs [M]."
|
||||
else
|
||||
message = "hugs [T.himself]."
|
||||
|
||||
if("handshake")
|
||||
m_type = 1
|
||||
if(!restrained() && !r_hand)
|
||||
var/mob/living/M = null
|
||||
if(param)
|
||||
for(var/mob/living/A in view(1, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(M == src)
|
||||
M = null
|
||||
|
||||
if(M)
|
||||
if(M.canmove && !M.r_hand && !M.restrained())
|
||||
message = "shakes hands with [M]."
|
||||
else
|
||||
message = "holds out [T.his] hand to [M]."
|
||||
|
||||
if("dap")
|
||||
m_type = 1
|
||||
if(!restrained())
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(1, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(M)
|
||||
message = "gives daps to [M]."
|
||||
else
|
||||
message = "sadly can't find anybody to give daps to, and daps [T.himself]. Shameful."
|
||||
|
||||
if("slap", "slaps")
|
||||
m_type = 1
|
||||
if(!restrained())
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(1, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(M)
|
||||
message = "<span class='danger'>slaps [M] across the face. Ouch!</span>"
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
if(ishuman(M)) //Snowflakey!
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H.wear_mask,/obj/item/clothing/mask/smokable))
|
||||
H.drop_from_inventory(H.wear_mask)
|
||||
else
|
||||
message = "<span class='danger'>slaps [T.himself]!</span>"
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
|
||||
if("scream", "screams")
|
||||
if(miming)
|
||||
message = "acts out a scream!"
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "[species.scream_verb]!"
|
||||
m_type = 2
|
||||
/* Removed, pending the location of some actually good, properly licensed sounds.
|
||||
if(get_gender() == FEMALE)
|
||||
playsound(src, "[species.female_scream_sound]", 80, 1)
|
||||
else
|
||||
playsound(src, "[species.male_scream_sound]", 80, 1) //default to male screams if no gender is present.
|
||||
*/
|
||||
else
|
||||
message = "makes a very loud noise."
|
||||
m_type = 2
|
||||
|
||||
if("snap", "snaps")
|
||||
m_type = 2
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/obj/item/organ/external/L = H.get_organ("l_hand")
|
||||
var/obj/item/organ/external/R = H.get_organ("r_hand")
|
||||
var/left_hand_good = 0
|
||||
var/right_hand_good = 0
|
||||
if(L && (!(L.status & ORGAN_DESTROYED)) && (!(L.splinted)) && (!(L.status & ORGAN_BROKEN)))
|
||||
left_hand_good = 1
|
||||
if(R && (!(R.status & ORGAN_DESTROYED)) && (!(R.splinted)) && (!(R.status & ORGAN_BROKEN)))
|
||||
right_hand_good = 1
|
||||
|
||||
if(!left_hand_good && !right_hand_good)
|
||||
to_chat(usr, "You need at least one hand in good working order to snap your fingers.")
|
||||
return
|
||||
|
||||
message = "snaps [T.his] fingers."
|
||||
playsound(src, 'sound/effects/fingersnap.ogg', 50, 1, -3, preference = /datum/client_preference/emote_noises) //VOREStation Add
|
||||
|
||||
if("swish")
|
||||
animate_tail_once()
|
||||
|
||||
if("wag", "sway")
|
||||
animate_tail_start()
|
||||
|
||||
if("qwag", "fastsway")
|
||||
animate_tail_fast()
|
||||
|
||||
if("swag", "stopsway")
|
||||
animate_tail_stop()
|
||||
|
||||
if("vomit")
|
||||
if(isSynthetic())
|
||||
to_chat(src, "<span class='warning'>You are unable to vomit.</span>")
|
||||
return
|
||||
vomit()
|
||||
return
|
||||
|
||||
if("whistle" || "whistles")
|
||||
if(!muzzled)
|
||||
if(!isSynthetic())
|
||||
message = "whistles a tune."
|
||||
playsound(src, 'sound/voice/longwhistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises) //praying this doesn't get abused
|
||||
else
|
||||
message = "whistles a robotic tune."
|
||||
playsound(src, 'sound/voice/longwhistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
else
|
||||
message = "makes a light spitting noise, a poor attempt at a whistle."
|
||||
|
||||
if("qwhistle")
|
||||
if(!muzzled)
|
||||
if(!isSynthetic())
|
||||
message = "whistles quietly."
|
||||
playsound(src, 'sound/voice/shortwhistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
else
|
||||
message = "whistles robotically."
|
||||
playsound(src, 'sound/voice/shortwhistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
else
|
||||
message = "makes a light spitting noise, a poor attempt at a whistle."
|
||||
|
||||
if("wwhistle")
|
||||
if(!muzzled)
|
||||
if(!isSynthetic())
|
||||
message = "whistles inappropriately."
|
||||
playsound(src, 'sound/voice/wolfwhistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
else
|
||||
message = "beeps inappropriately."
|
||||
playsound(src, 'sound/voice/wolfwhistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
else
|
||||
message = "makes a light spitting noise, a poor attempt at a whistle."
|
||||
|
||||
if("swhistle")
|
||||
if(!muzzled)
|
||||
if(!isSynthetic())
|
||||
message = "summon whistles."
|
||||
playsound(src, 'sound/voice/summon_whistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
else
|
||||
message = "summon whistles robotically."
|
||||
playsound(src, 'sound/voice/summon_whistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
|
||||
else
|
||||
message = "makes a light spitting noise, a poor attempt at a whistle."
|
||||
|
||||
if("flip")
|
||||
m_type = 1
|
||||
if (!src.restrained())
|
||||
//message = "performs an amazing, gravity-defying backflip before landing skillfully back to the ground."
|
||||
playsound(src.loc, 'sound/effects/bodyfall4.ogg', 50, 1)
|
||||
src.SpinAnimation(7,1)
|
||||
else
|
||||
to_chat(usr, "You can't quite do something as difficult as a backflip while so... restricted.")
|
||||
|
||||
if("spin")
|
||||
m_type = 1
|
||||
if (!src.restrained())
|
||||
//message = "spins in a dance smoothly on their feet. Wow!"
|
||||
src.spin(20, 1)
|
||||
else
|
||||
to_chat(usr, "You can't quite do something as difficult as a spin while so... restricted.")
|
||||
|
||||
if("floorspin")
|
||||
m_type = 1
|
||||
if (!src.restrained())
|
||||
//message = "gets down on the floor and spins their entire body around!"
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
set_dir(i)
|
||||
sleep(1)
|
||||
src.SpinAnimation(20,1)
|
||||
else
|
||||
to_chat(usr, "You can't quite do something as difficult as a spin while so... restricted.")
|
||||
|
||||
if("sidestep")
|
||||
m_type = 1
|
||||
if (!src.restrained())
|
||||
//message = "steps rhymatically and conservatively as they move side to side."
|
||||
playsound(src.loc, 'sound/effects/bodyfall4.ogg', 50, 1)
|
||||
var/default_pixel_x = initial(pixel_x)
|
||||
var/default_pixel_y = initial(pixel_y)
|
||||
default_pixel_x = src.default_pixel_x
|
||||
default_pixel_y = src.default_pixel_y
|
||||
|
||||
animate(src, pixel_x = 5, time = 20)
|
||||
sleep(3)
|
||||
animate(src, pixel_x = -5, time = 20)
|
||||
animate(pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2)
|
||||
else
|
||||
to_chat(usr, "Sidestepping sure seems unachieveable when you're this restricted.")
|
||||
|
||||
if("help")
|
||||
to_chat(src, "<span class='filter_say'>blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, deathgasp, drool, eyebrow, fastsway/qwag, \
|
||||
frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, \
|
||||
qwhistle, raise, salute, scream, sneeze, shake, shiver, shrug, sigh, signal-#1-10, slap-(none)/mob, smile, sneeze, sniff, snore, stare-(none)/mob, stopsway/swag, sway/wag, swish, swhistle, \
|
||||
tremble, twitch, twitch_v, vomit, whimper, wink, whistle, wwhistle, yawn. Prometheans: squish Synthetics: beep, buzz, dwoop, yes, no, rcough, rsneeze, ping. Skrell: warble</span>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='filter_say'><font color='blue'>Unusable emote '[act]'. Say *help or *vhelp for a list.</font></span>") //VOREStation Edit, mention *vhelp for Virgo-specific emotes located in emote_vr.dm.
|
||||
|
||||
if(message)
|
||||
custom_emote(m_type,message)
|
||||
=======
|
||||
var/list/_human_default_emotes = list(
|
||||
/decl/emote/visible/blink,
|
||||
/decl/emote/audible/synth,
|
||||
/decl/emote/audible/synth/ping,
|
||||
/decl/emote/audible/synth/buzz,
|
||||
/decl/emote/audible/synth/confirm,
|
||||
/decl/emote/audible/synth/deny,
|
||||
/decl/emote/visible/nod,
|
||||
/decl/emote/visible/shake,
|
||||
/decl/emote/visible/shiver,
|
||||
/decl/emote/visible/collapse,
|
||||
/decl/emote/audible/gasp,
|
||||
/decl/emote/audible/choke,
|
||||
/decl/emote/audible/sneeze,
|
||||
/decl/emote/audible/sniff,
|
||||
/decl/emote/audible/snore,
|
||||
/decl/emote/audible/whimper,
|
||||
/decl/emote/audible/whistle,
|
||||
/decl/emote/audible/whistle/quiet,
|
||||
/decl/emote/audible/whistle/wolf,
|
||||
/decl/emote/audible/whistle/summon,
|
||||
/decl/emote/audible/yawn,
|
||||
/decl/emote/audible/clap,
|
||||
/decl/emote/audible/chuckle,
|
||||
/decl/emote/audible/cough,
|
||||
/decl/emote/audible/cry,
|
||||
/decl/emote/audible/sigh,
|
||||
/decl/emote/audible/laugh,
|
||||
/decl/emote/audible/mumble,
|
||||
/decl/emote/audible/grumble,
|
||||
/decl/emote/audible/groan,
|
||||
/decl/emote/audible/moan,
|
||||
/decl/emote/audible/grunt,
|
||||
/decl/emote/audible/slap,
|
||||
/decl/emote/audible/crack,
|
||||
/decl/emote/human,
|
||||
/decl/emote/human/deathgasp,
|
||||
/decl/emote/audible/giggle,
|
||||
/decl/emote/audible/scream,
|
||||
/decl/emote/visible/airguitar,
|
||||
/decl/emote/visible/blink_r,
|
||||
/decl/emote/visible/bow,
|
||||
/decl/emote/visible/salute,
|
||||
/decl/emote/visible/flap,
|
||||
/decl/emote/visible/aflap,
|
||||
/decl/emote/visible/drool,
|
||||
/decl/emote/visible/eyebrow,
|
||||
/decl/emote/visible/twitch,
|
||||
/decl/emote/visible/dance,
|
||||
/decl/emote/visible/twitch_v,
|
||||
/decl/emote/visible/faint,
|
||||
/decl/emote/visible/frown,
|
||||
/decl/emote/visible/blush,
|
||||
/decl/emote/visible/wave,
|
||||
/decl/emote/visible/glare,
|
||||
/decl/emote/visible/stare,
|
||||
/decl/emote/visible/look,
|
||||
/decl/emote/visible/point,
|
||||
/decl/emote/visible/raise,
|
||||
/decl/emote/visible/grin,
|
||||
/decl/emote/visible/shrug,
|
||||
/decl/emote/visible/smile,
|
||||
/decl/emote/visible/pale,
|
||||
/decl/emote/visible/tremble,
|
||||
/decl/emote/visible/wink,
|
||||
/decl/emote/visible/hug,
|
||||
/decl/emote/visible/dap,
|
||||
/decl/emote/visible/signal,
|
||||
/decl/emote/visible/handshake,
|
||||
/decl/emote/visible/afold,
|
||||
/decl/emote/visible/alook,
|
||||
/decl/emote/visible/eroll,
|
||||
/decl/emote/visible/hbow,
|
||||
/decl/emote/visible/hip,
|
||||
/decl/emote/visible/holdup,
|
||||
/decl/emote/visible/hshrug,
|
||||
/decl/emote/visible/crub,
|
||||
/decl/emote/visible/erub,
|
||||
/decl/emote/visible/fslap,
|
||||
/decl/emote/visible/ftap,
|
||||
/decl/emote/visible/hrub,
|
||||
/decl/emote/visible/hspread,
|
||||
/decl/emote/visible/pocket,
|
||||
/decl/emote/visible/rsalute,
|
||||
/decl/emote/visible/rshoulder,
|
||||
/decl/emote/visible/squint,
|
||||
/decl/emote/visible/tfist,
|
||||
/decl/emote/visible/tilt,
|
||||
/decl/emote/visible/spin,
|
||||
/decl/emote/visible/sidestep,
|
||||
/decl/emote/audible/snap,
|
||||
/decl/emote/visible/vomit,
|
||||
/decl/emote/visible/floorspin,
|
||||
/decl/emote/visible/flip,
|
||||
//VOREStation Add
|
||||
/decl/emote/audible/awoo,
|
||||
/decl/emote/audible/awoo2,
|
||||
/decl/emote/audible/growl,
|
||||
/decl/emote/audible/woof,
|
||||
/decl/emote/audible/woof2,
|
||||
/decl/emote/audible/nya,
|
||||
/decl/emote/audible/mrowl,
|
||||
/decl/emote/audible/peep,
|
||||
/decl/emote/audible/chirp,
|
||||
/decl/emote/audible/hoot,
|
||||
/decl/emote/audible/weh,
|
||||
/decl/emote/audible/merp,
|
||||
/decl/emote/audible/myarp,
|
||||
/decl/emote/audible/bark,
|
||||
/decl/emote/audible/bork,
|
||||
/decl/emote/audible/mrow,
|
||||
/decl/emote/audible/hypno,
|
||||
/decl/emote/audible/hiss,
|
||||
/decl/emote/audible/rattle,
|
||||
/decl/emote/audible/squeak,
|
||||
/decl/emote/audible/geck,
|
||||
/decl/emote/audible/baa,
|
||||
/decl/emote/audible/baa2,
|
||||
/decl/emote/audible/mar,
|
||||
/decl/emote/audible/wurble,
|
||||
/decl/emote/audible/snort,
|
||||
/decl/emote/audible/meow,
|
||||
/decl/emote/audible/moo,
|
||||
/decl/emote/audible/croak,
|
||||
/decl/emote/audible/gao,
|
||||
/decl/emote/audible/cackle,
|
||||
|
||||
/decl/emote/visible/mlem,
|
||||
/decl/emote/visible/blep,
|
||||
|
||||
/decl/emote/helper/vwag,
|
||||
/decl/emote/helper/vflap
|
||||
//VOREStation Add End
|
||||
)
|
||||
|
||||
/mob/living/carbon/human/get_default_emotes()
|
||||
return global._human_default_emotes
|
||||
>>>>>>> caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
|
||||
/mob/living/carbon/human/verb/pose()
|
||||
set name = "Set Pose"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
/mob
|
||||
var/nextemote = 1
|
||||
|
||||
@@ -200,12 +201,193 @@
|
||||
if("vhelp") //Help for Virgo-specific emotes.
|
||||
to_chat(src, "vwag, vflap, mlem, blep, awoo, awoo2, growl, nya, peep, chirp, hoot, weh, merp, myarp, bark, bork, mrow, mrowl, hypno, howl, hiss, rattle, squeak, geck, baa, baa2, mar, wurble, snort, meow, moo, croak, gao, cackle, nsay, nme, flip, roarbark") //CHOMP Addition: adds howl to list since YW didn't
|
||||
return TRUE
|
||||
||||||| parent of caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
/mob
|
||||
var/nextemote = 1
|
||||
|
||||
if(message)
|
||||
custom_emote(m_type,message)
|
||||
return TRUE
|
||||
/mob/living/carbon/human/proc/handle_emote_vr(var/act,var/m_type=1,var/message = null)
|
||||
//Reduces emote spamming
|
||||
if(nextemote >= world.time)// || user.stat != CONSCIOUS
|
||||
return 1
|
||||
nextemote = world.time + 12
|
||||
|
||||
switch(act)
|
||||
if("vwag")
|
||||
if(toggle_tail(message = 1))
|
||||
m_type = 1
|
||||
message = "[wagging ? "starts" : "stops"] wagging their tail."
|
||||
else
|
||||
return 1
|
||||
if("vflap")
|
||||
if(toggle_wing(message = 1))
|
||||
m_type = 1
|
||||
message = "[flapping ? "starts" : "stops"] flapping their wings."
|
||||
else
|
||||
return 1
|
||||
if("mlem")
|
||||
message = "mlems [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] tongue up over [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] nose. Mlem."
|
||||
m_type = 1
|
||||
if("blep")
|
||||
message = "bleps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] tongue out. Blep."
|
||||
m_type = 1
|
||||
if("awoo")
|
||||
m_type = 2
|
||||
message = "lets out an awoo."
|
||||
playsound(src, 'sound/voice/awoo.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("awoo2")
|
||||
m_type = 2
|
||||
message = "lets out an awoo."
|
||||
playsound(src, 'sound/voice/long_awoo.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("growl")
|
||||
m_type = 2
|
||||
message = "lets out a growl."
|
||||
playsound(src, 'sound/voice/growl.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("woof")
|
||||
m_type = 2
|
||||
message = "lets out a woof."
|
||||
playsound(src, 'sound/voice/woof.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("woof2")
|
||||
m_type = 2
|
||||
message = "lets out a woof."
|
||||
playsound(src, 'sound/voice/woof2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("nya")
|
||||
message = "lets out a nya."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/nya.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("mrowl")
|
||||
message = "mrowls."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/mrow.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("peep")
|
||||
message = "peeps like a bird."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/peep.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("chirp")
|
||||
message = "chirps!"
|
||||
playsound(src, 'sound/misc/nymphchirp.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
|
||||
m_type = 2
|
||||
if("hoot")
|
||||
message = "hoots!"
|
||||
playsound(src, 'sound/voice/hoot.ogg', 50, 1, ,-1, preference = /datum/client_preference/emote_noises)
|
||||
m_type = 2
|
||||
if("weh")
|
||||
message = "lets out a weh."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/weh.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("merp")
|
||||
message = "lets out a merp."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/merp.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("myarp")
|
||||
message = "lets out a myarp."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/myarp.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("bark")
|
||||
message = "lets out a bark."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/bark2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("bork")
|
||||
m_type = 2
|
||||
message = "lets out a bork."
|
||||
playsound(src, 'sound/voice/bork.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if ("mrow")
|
||||
m_type = 2
|
||||
message = "lets out a mrow."
|
||||
playsound(src, 'sound/voice/mrow.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if ("hypno")
|
||||
m_type = 2
|
||||
message = "lets out a mystifying tone."
|
||||
playsound(src, 'sound/voice/hypno.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("hiss")
|
||||
message = "lets out a hiss."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/hiss.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("rattle")
|
||||
message = "rattles!"
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/rattle.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("squeak")
|
||||
message = "lets out a squeak."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/effects/mouse_squeak.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("geck")
|
||||
message = "geckers!"
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/geck.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("baa")
|
||||
message = "lets out a baa."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/baa.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("baa2")
|
||||
message = "bleats."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/baa2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("deathgasp2")
|
||||
message = "[species.get_death_message()]"
|
||||
m_type = 1
|
||||
playsound(src, 'sound/voice/deathgasp2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("mar")
|
||||
message = "lets out a mar."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/mar.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("wurble")
|
||||
message = "lets out a wurble."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/wurble.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
if("snort")
|
||||
message = "snorts!"
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/Snort.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
|
||||
if("meow")
|
||||
message = "gently meows!"
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/Meow.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
|
||||
if("moo")
|
||||
message = "takes a breath and lets out a moo."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/Moo.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
|
||||
if("croak")
|
||||
message = "rumbles their throat, puffs their cheeks and croaks."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/Croak.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
|
||||
if("gao")
|
||||
message = "lets out a gao."
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/gao.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
|
||||
if("cackle")
|
||||
message = "cackles hysterically!"
|
||||
m_type = 2
|
||||
playsound(src, 'sound/voice/YeenCackle.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
|
||||
if("nsay")
|
||||
nsay()
|
||||
return TRUE
|
||||
if("nme")
|
||||
nme()
|
||||
return TRUE
|
||||
if("flip")
|
||||
var/list/involved_parts = list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)
|
||||
//Check if they are physically capable
|
||||
if(sleeping || resting || buckled || weakened || restrained() || involved_parts.len < 2)
|
||||
to_chat(src, "<span class='warning'>You can't *flip in your current state!</span>")
|
||||
return 1
|
||||
else
|
||||
nextemote += 12 //Double delay
|
||||
handle_flip_vr()
|
||||
message = "does a flip!"
|
||||
m_type = 1
|
||||
if("vhelp") //Help for Virgo-specific emotes.
|
||||
to_chat(src, "vwag, vflap, mlem, blep, awoo, awoo2, growl, nya, peep, chirp, hoot, weh, merp, myarp, bark, bork, mrow, mrowl, hypno, hiss, rattle, squeak, geck, baa, baa2, mar, wurble, snort, meow, moo, croak, gao, cackle, nsay, nme, flip")
|
||||
return TRUE
|
||||
=======
|
||||
/mob/living/carbon/human/verb/toggle_resizing_immunity()
|
||||
set name = "Toggle Resizing Immunity"
|
||||
set desc = "Toggles your ability to resist resizing attempts"
|
||||
set category = "IC"
|
||||
>>>>>>> caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
|
||||
resizable = !resizable
|
||||
to_chat(src, "<span class='notice'>You are now [resizable ? "susceptible" : "immune"] to being resized.</span>")
|
||||
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/handle_flip_vr()
|
||||
var/original_density = density
|
||||
|
||||
@@ -1165,6 +1165,9 @@
|
||||
//A slew of bits that may be affected by our species change
|
||||
regenerate_icons()
|
||||
|
||||
// Update our available emote list.
|
||||
update_emotes()
|
||||
|
||||
if(species)
|
||||
//if(mind) //VOREStation Removal
|
||||
//apply_traits() //VOREStation Removal
|
||||
|
||||
@@ -81,7 +81,6 @@
|
||||
|
||||
var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life()
|
||||
|
||||
var/miming = null //Toggle for the mime's abilities.
|
||||
var/special_voice = "" // For changing our voice. Used by a symptom.
|
||||
|
||||
var/last_dam = -1 //Used for determining if we need to process all organs or just some or even none.
|
||||
@@ -156,4 +155,3 @@
|
||||
|
||||
// Custom Species Name
|
||||
var/custom_species
|
||||
|
||||
|
||||
@@ -98,7 +98,8 @@
|
||||
// This is the 'mechanical' check for synthetic-ness, not appearance
|
||||
// Returns the company that made the synthetic
|
||||
/mob/living/carbon/human/isSynthetic()
|
||||
if(synthetic) return synthetic //Your synthetic-ness is not going away
|
||||
if(synthetic)
|
||||
return synthetic //Your synthetic-ness is not going away
|
||||
var/obj/item/organ/external/T = organs_by_name[BP_TORSO]
|
||||
if(T && T.robotic >= ORGAN_ROBOT)
|
||||
src.verbs += /mob/living/carbon/human/proc/self_diagnostics
|
||||
@@ -107,9 +108,9 @@
|
||||
src.verbs += /mob/living/carbon/human/proc/setmonitor_state
|
||||
var/datum/robolimb/R = all_robolimbs[T.model]
|
||||
synthetic = R
|
||||
update_emotes()
|
||||
return synthetic
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
// Would an onlooker know this person is synthetic?
|
||||
// Based on sort of logical reasoning, 'Look at head, look at torso'
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
speech_sounds = list('sound/voice/shriek1.ogg')
|
||||
speech_chance = 20
|
||||
|
||||
scream_verb = "shrieks"
|
||||
scream_verb_1p = "shriek"
|
||||
scream_verb_3p = "shrieks"
|
||||
male_scream_sound = 'sound/voice/shriek1.ogg'
|
||||
female_scream_sound = 'sound/voice/shriek1.ogg'
|
||||
male_cough_sounds = list('sound/voice/shriekcough.ogg')
|
||||
@@ -85,7 +86,11 @@
|
||||
/datum/mob_descriptor/height = -1,
|
||||
/datum/mob_descriptor/build = 1,
|
||||
/datum/mob_descriptor/vox_markings = 0
|
||||
)
|
||||
)
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/audible/vox_shriek
|
||||
)
|
||||
|
||||
/datum/species/vox/get_random_name(var/gender)
|
||||
var/datum/language/species_language = GLOB.all_languages[default_language]
|
||||
|
||||
@@ -78,9 +78,20 @@
|
||||
var/list/assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //VOREStation Edit
|
||||
|
||||
//Soundy emotey things.
|
||||
<<<<<<< HEAD
|
||||
var/scream_verb = "screams"
|
||||
var/male_scream_sound = list('sound/effects/mob_effects/m_scream_1.ogg','sound/effects/mob_effects/m_scream_2.ogg','sound/effects/mob_effects/m_scream_3.ogg','sound/effects/mob_effects/m_scream_4.ogg') //CHOMpedit start : Added tgstation screams
|
||||
var/female_scream_sound = list('sound/effects/mob_effects/f_scream_1.ogg','sound/effects/mob_effects/f_scream_2.ogg','sound/effects/mob_effects/f_scream_3.ogg','sound/effects/mob_effects/f_scream_4.ogg') //CHOMPedit end
|
||||
||||||| parent of caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
var/scream_verb = "screams"
|
||||
var/male_scream_sound //= 'sound/goonstation/voice/male_scream.ogg' Removed due to licensing, replace!
|
||||
var/female_scream_sound //= 'sound/goonstation/voice/female_scream.ogg' Removed due to licensing, replace!
|
||||
=======
|
||||
var/scream_verb_1p = "scream"
|
||||
var/scream_verb_3p = "screams"
|
||||
var/male_scream_sound //= 'sound/goonstation/voice/male_scream.ogg' Removed due to licensing, replace!
|
||||
var/female_scream_sound //= 'sound/goonstation/voice/female_scream.ogg' Removed due to licensing, replace!
|
||||
>>>>>>> caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
var/male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
|
||||
var/female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg')
|
||||
var/male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg'
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
if(config.show_human_death_message)
|
||||
return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message)
|
||||
else
|
||||
return "no message"
|
||||
return DEATHGASP_NO_MESSAGE
|
||||
|
||||
/datum/species/proc/get_ssd(var/mob/living/carbon/human/H)
|
||||
if(H)
|
||||
|
||||
@@ -122,6 +122,15 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
|
||||
var/heal_rate = 0.5 // Temp. Regen per tick.
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/audible/squish,
|
||||
/decl/emote/audible/chirp,
|
||||
/decl/emote/visible/bounce,
|
||||
/decl/emote/visible/jiggle,
|
||||
/decl/emote/visible/lightup,
|
||||
/decl/emote/visible/vibrate
|
||||
)
|
||||
|
||||
/datum/species/shapeshifter/promethean/New()
|
||||
..()
|
||||
prometheans = src
|
||||
|
||||
@@ -163,6 +163,16 @@
|
||||
/datum/mob_descriptor/build = 2
|
||||
)
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/human/swish,
|
||||
/decl/emote/human/wag,
|
||||
/decl/emote/human/sway,
|
||||
/decl/emote/human/qwag,
|
||||
/decl/emote/human/fastsway,
|
||||
/decl/emote/human/swag,
|
||||
/decl/emote/human/stopsway
|
||||
)
|
||||
|
||||
/datum/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
|
||||
@@ -256,6 +266,16 @@
|
||||
O_INTESTINE = /obj/item/organ/internal/intestine
|
||||
)
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/human/swish,
|
||||
/decl/emote/human/wag,
|
||||
/decl/emote/human/sway,
|
||||
/decl/emote/human/qwag,
|
||||
/decl/emote/human/fastsway,
|
||||
/decl/emote/human/swag,
|
||||
/decl/emote/human/stopsway
|
||||
)
|
||||
|
||||
/datum/species/tajaran/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
|
||||
@@ -548,6 +568,11 @@
|
||||
|
||||
genders = list(PLURAL)
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/audible/chirp,
|
||||
/decl/emote/audible/multichirp
|
||||
)
|
||||
|
||||
/datum/species/diona/can_understand(var/mob/other)
|
||||
if(istype(other, /mob/living/carbon/alien/diona))
|
||||
return TRUE
|
||||
|
||||
@@ -144,8 +144,16 @@
|
||||
descriptors = list(
|
||||
/datum/mob_descriptor/height = -3,
|
||||
/datum/mob_descriptor/build = -3
|
||||
<<<<<<< HEAD
|
||||
)
|
||||
|
||||
||||||| parent of caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
)
|
||||
|
||||
=======
|
||||
)
|
||||
|
||||
>>>>>>> caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
var/static/list/flight_bodyparts = list(
|
||||
BP_L_ARM,
|
||||
BP_R_ARM,
|
||||
@@ -157,6 +165,12 @@
|
||||
/obj/item/clothing/suit/straight_jacket
|
||||
)
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/audible/teshsqueak,
|
||||
/decl/emote/audible/teshchirp,
|
||||
/decl/emote/audible/teshtrill
|
||||
)
|
||||
|
||||
/datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
|
||||
@@ -164,7 +178,7 @@
|
||||
/datum/species/teshari/handle_falling(mob/living/carbon/human/H, atom/hit_atom, damage_min, damage_max, silent, planetary)
|
||||
|
||||
// Tesh can glide to save themselves from some falls. Basejumping bird
|
||||
// without parachute, or falling bird without free wings goes splat.
|
||||
// without parachute, or falling bird without free wings, goes splat.
|
||||
|
||||
// Are we landing from orbit, or handcuffed/unconscious/tied to something?
|
||||
if(planetary || !istype(H) || H.incapacitated(INCAPACITATION_DEFAULT|INCAPACITATION_DISABLED))
|
||||
|
||||
@@ -438,38 +438,5 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
/mob/proc/GetVoice()
|
||||
return name
|
||||
|
||||
/mob/living/emote(var/act, var/type, var/message) //emote code is terrible, this is so that anything that isn't
|
||||
if(stat) //already snowflaked to shit can call the parent and handle emoting sanely
|
||||
return FALSE
|
||||
|
||||
if(..(act, type, message))
|
||||
return TRUE
|
||||
|
||||
if(act && type && message)
|
||||
log_emote(message, src)
|
||||
|
||||
for(var/mob/M in dead_mob_list)
|
||||
if(!M.client)
|
||||
continue
|
||||
|
||||
if(isnewplayer(M))
|
||||
continue
|
||||
|
||||
if(isobserver(M) && M.is_preference_enabled(/datum/client_preference/ghost_sight))
|
||||
M.show_message(message)
|
||||
|
||||
switch(type)
|
||||
if(1) // Visible
|
||||
visible_message(message)
|
||||
return TRUE
|
||||
if(2) // Audible
|
||||
audible_message(message)
|
||||
return TRUE
|
||||
else
|
||||
if(act == "help")
|
||||
return // Mobs handle this individually
|
||||
to_chat(src, "<span class='warning'>Unusable emote '[act]'. Say *help for a list.</span>")
|
||||
|
||||
|
||||
/mob/proc/speech_bubble_appearance()
|
||||
return "normal"
|
||||
|
||||
@@ -1,113 +1,13 @@
|
||||
/mob/living/silicon/emote(var/act, var/m_type = 1,var/message = null)
|
||||
var/param = null
|
||||
if(findtext(act, "-", 1, null))
|
||||
var/t1 = findtext(act, "-", 1, null)
|
||||
param = copytext(act, t1 + 1, length(act) + 1)
|
||||
act = copytext(act, 1, t1)
|
||||
var/list/_silicon_default_emotes = list(
|
||||
/decl/emote/audible/synth,
|
||||
/decl/emote/audible/synth/ping,
|
||||
/decl/emote/audible/synth/buzz,
|
||||
/decl/emote/audible/synth/confirm,
|
||||
/decl/emote/audible/synth/deny,
|
||||
/decl/emote/audible/synth/dwoop,
|
||||
/decl/emote/audible/synth/security,
|
||||
/decl/emote/audible/synth/security/halt
|
||||
)
|
||||
|
||||
if(findtext(act, "s", -1) && !findtext(act, "_", -2))//Removes ending s's unless they are prefixed with a '_'
|
||||
act = copytext(act, 1, length(act))
|
||||
|
||||
switch(act)
|
||||
if("beep")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<b>[src]</b> beeps at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> beeps."
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 50, 0)
|
||||
m_type = 1
|
||||
|
||||
if("ping")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<b>[src]</b> pings at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> pings."
|
||||
playsound(src, 'sound/machines/ping.ogg', 50, 0)
|
||||
m_type = 1
|
||||
|
||||
if("buzz")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<b>[src]</b> buzzes at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> buzzes."
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
m_type = 1
|
||||
|
||||
if("yes", "ye")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<b>[src]</b> emits an affirmative blip at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> emits an affirmative blip."
|
||||
playsound(src, 'sound/machines/synth_yes.ogg', 50, 0)
|
||||
m_type = 1
|
||||
|
||||
if("dwoop")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<b>[src]</b> chirps happily at [param]"
|
||||
else
|
||||
message = "<b>[src]</b> chirps happily."
|
||||
playsound(src, 'sound/machines/dwoop.ogg', 50, 0)
|
||||
m_type = 1
|
||||
|
||||
if("no")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<b>[src]</b> emits a negative blip at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> emits a negative blip."
|
||||
playsound(src, 'sound/machines/synth_no.ogg', 50, 0)
|
||||
m_type = 1
|
||||
|
||||
..(act, m_type, message)
|
||||
/mob/living/silicon/get_default_emotes()
|
||||
return global._silicon_default_emotes
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
/mob/living/silicon/robot/emote(var/act,var/m_type=1,var/message = null)
|
||||
var/param = null
|
||||
if(findtext(act, "-", 1, null))
|
||||
@@ -153,3 +154,194 @@
|
||||
to_chat(src, "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitch_s, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look, beep, ping, \nbuzz, law, halt, yes, dwoop, no")
|
||||
|
||||
..(act, m_type, message)
|
||||
||||||| parent of caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
/mob/living/silicon/robot/emote(var/act,var/m_type=1,var/message = null)
|
||||
var/param = null
|
||||
if(findtext(act, "-", 1, null))
|
||||
var/t1 = findtext(act, "-", 1, null)
|
||||
param = copytext(act, t1 + 1, length(act) + 1)
|
||||
act = copytext(act, 1, t1)
|
||||
|
||||
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
|
||||
act = copytext(act,1,length(act))
|
||||
|
||||
switch(act)
|
||||
if("salute")
|
||||
if(!src.buckled)
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "<b>[src]</b> salutes to [param]."
|
||||
else
|
||||
message = "<b>[src]</b> salutes."
|
||||
m_type = 1
|
||||
if("bow")
|
||||
if(!src.buckled)
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "<b>[src]</b> bows to [param]."
|
||||
else
|
||||
message = "<b>[src]</b> bows."
|
||||
m_type = 1
|
||||
|
||||
if("clap")
|
||||
if(!src.restrained())
|
||||
message = "<b>[src]</b> claps."
|
||||
m_type = 2
|
||||
if("flap")
|
||||
if(!src.restrained())
|
||||
message = "<b>[src]</b> flaps its wings."
|
||||
m_type = 2
|
||||
|
||||
if("aflap")
|
||||
if(!src.restrained())
|
||||
message = "<b>[src]</b> flaps its wings ANGRILY!"
|
||||
m_type = 2
|
||||
|
||||
if("twitch")
|
||||
message = "<b>[src]</b> twitches."
|
||||
m_type = 1
|
||||
|
||||
if("twitch_v")
|
||||
message = "<b>[src]</b> twitches violently."
|
||||
m_type = 1
|
||||
|
||||
if("nod")
|
||||
message = "<b>[src]</b> nods."
|
||||
m_type = 1
|
||||
|
||||
if("deathgasp")
|
||||
message = "<b>[src]</b> shudders violently for a moment, then becomes motionless, its eyes slowly darkening."
|
||||
m_type = 1
|
||||
|
||||
if("glare")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "<b>[src]</b> glares at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> glares."
|
||||
|
||||
if("stare")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "<b>[src]</b> stares at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> stares."
|
||||
|
||||
if("look")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "<b>[src]</b> looks at [param]."
|
||||
else
|
||||
message = "<b>[src]</b> looks."
|
||||
m_type = 1
|
||||
|
||||
if("law")
|
||||
if(istype(module,/obj/item/weapon/robot_module/robot/security) || istype(module,/obj/item/weapon/robot_module/robot/knine)) //VOREStation Add - K9
|
||||
message = "<b>[src]</b> shows its legal authorization barcode."
|
||||
|
||||
playsound(src, 'sound/voice/biamthelaw.ogg', 50, 0)
|
||||
m_type = 2
|
||||
else
|
||||
to_chat(src, "You are not THE LAW, pal.")
|
||||
|
||||
if("halt")
|
||||
if(istype(module,/obj/item/weapon/robot_module/robot/security) || istype(module,/obj/item/weapon/robot_module/robot/knine)) //VOREStation Add - K9
|
||||
message = "<b>[src]</b> <B>'s</B> speakers skreech, \"Halt! Security!\"."
|
||||
|
||||
playsound(src, 'sound/voice/halt.ogg', 50, 0)
|
||||
m_type = 2
|
||||
else
|
||||
to_chat(src, "You are not security.")
|
||||
//Vorestation addition start
|
||||
if("bark")
|
||||
if (istype(module,/obj/item/weapon/robot_module/robot/knine) || istype(module,/obj/item/weapon/robot_module/robot/medihound) || istype(module,/obj/item/weapon/robot_module/robot/scrubpup) || istype(module,/obj/item/weapon/robot_module/robot/ert) || istype(module,/obj/item/weapon/robot_module/robot/science) || istype(module,/obj/item/weapon/robot_module/robot/engiedog) || istype(module,/obj/item/weapon/robot_module/robot/clerical/brodog) || istype(module,/obj/item/weapon/robot_module/robot/kmine) )
|
||||
message = "<b>[src]</b> lets out a bark."
|
||||
|
||||
playsound(src, 'sound/voice/bark2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
|
||||
m_type = 2
|
||||
else
|
||||
to_chat(src, "You're not a dog!")
|
||||
//Vorestation addition end
|
||||
|
||||
|
||||
|
||||
if("help")
|
||||
to_chat(src, "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitch_s, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look, beep, ping, \nbuzz, law, halt, yes, dwoop, no")
|
||||
|
||||
..(act, m_type, message)
|
||||
=======
|
||||
var/list/_robot_default_emotes = list(
|
||||
/decl/emote/audible/clap,
|
||||
/decl/emote/visible/bow,
|
||||
/decl/emote/visible/salute,
|
||||
/decl/emote/visible/flap,
|
||||
/decl/emote/visible/aflap,
|
||||
/decl/emote/visible/twitch,
|
||||
/decl/emote/visible/twitch_v,
|
||||
/decl/emote/visible/dance,
|
||||
/decl/emote/visible/nod,
|
||||
/decl/emote/visible/shake,
|
||||
/decl/emote/visible/glare,
|
||||
/decl/emote/visible/look,
|
||||
/decl/emote/visible/stare,
|
||||
/decl/emote/visible/deathgasp_robot,
|
||||
/decl/emote/visible/spin,
|
||||
/decl/emote/visible/sidestep,
|
||||
/decl/emote/audible/synth,
|
||||
/decl/emote/audible/synth/ping,
|
||||
/decl/emote/audible/synth/buzz,
|
||||
/decl/emote/audible/synth/confirm,
|
||||
/decl/emote/audible/synth/deny,
|
||||
/decl/emote/audible/synth/dwoop,
|
||||
/decl/emote/audible/synth/security,
|
||||
/decl/emote/audible/synth/security/halt,
|
||||
//VOREStation Add
|
||||
/decl/emote/visible/mlem,
|
||||
/decl/emote/visible/blep
|
||||
//VOREStation Add End
|
||||
)
|
||||
|
||||
/mob/living/silicon/robot/get_default_emotes()
|
||||
return global._robot_default_emotes
|
||||
>>>>>>> caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/ai/emote(var/act, var/type, var/message)
|
||||
/mob/living/silicon/ai/emote(var/act, var/m_type, var/message)
|
||||
var/obj/machinery/hologram/holopad/T = holo
|
||||
if(T && T.masters[src]) //Is the AI using a holopad?
|
||||
. = holopad_emote(message)
|
||||
|
||||
@@ -1,3 +1,32 @@
|
||||
var/list/_cat_default_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,
|
||||
/decl/emote/audible/purr,
|
||||
/decl/emote/audible/purrlong
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/passive/cat
|
||||
name = "cat"
|
||||
desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers."
|
||||
@@ -28,6 +57,9 @@
|
||||
update_icon()
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/animal/passive/cat/get_default_emotes()
|
||||
return global._cat_default_emotes
|
||||
|
||||
/mob/living/simple_mob/animal/passive/cat/handle_special()
|
||||
if(!stat && prob(2)) // spooky
|
||||
var/mob/observer/dead/spook = locate() in range(src, 5)
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
// The top-level slime defines. Xenobio slimes and feral slimes will inherit from this.
|
||||
var/list/_slime_default_emotes = list(
|
||||
/decl/emote/audible/moan,
|
||||
/decl/emote/visible/twitch,
|
||||
/decl/emote/visible/sway,
|
||||
/decl/emote/visible/shiver,
|
||||
/decl/emote/visible/bounce,
|
||||
/decl/emote/visible/jiggle,
|
||||
/decl/emote/visible/lightup,
|
||||
/decl/emote/visible/vibrate,
|
||||
/decl/emote/slime,
|
||||
/decl/emote/slime/pout,
|
||||
/decl/emote/slime/sad,
|
||||
/decl/emote/slime/angry,
|
||||
/decl/emote/slime/frown,
|
||||
/decl/emote/slime/smile
|
||||
)
|
||||
|
||||
// The top-level slime defines. Xenobio slimes and feral slimes will inherit from this.
|
||||
/mob/living/simple_mob/slime
|
||||
name = "slime"
|
||||
desc = "It's a slime."
|
||||
@@ -64,6 +80,9 @@
|
||||
|
||||
can_enter_vent_with = list(/obj/item/clothing/head)
|
||||
|
||||
/mob/living/simple_mob/slime/get_default_emotes()
|
||||
return global._slime_default_emotes
|
||||
|
||||
/datum/say_list/slime
|
||||
speak = list("Blorp...", "Blop...")
|
||||
emote_see = list("bounces", "jiggles", "sways")
|
||||
|
||||
@@ -137,6 +137,6 @@
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/mob/living/voice/custom_emote(var/m_type=1,var/message = null,var/range=world.view)
|
||||
/mob/living/voice/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message = null, var/range = world.view)
|
||||
if(!comm) return
|
||||
..(m_type,message,comm.video_range)
|
||||
|
||||
+19
-13
@@ -42,6 +42,7 @@
|
||||
lastarea = get_area(src)
|
||||
hook_vr("mob_new",list(src)) //VOREStation Code
|
||||
update_transform() // Some mobs may start bigger or smaller than normal.
|
||||
update_emotes()
|
||||
return ..()
|
||||
|
||||
/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
|
||||
@@ -49,19 +50,19 @@
|
||||
if(!client && !teleop) return
|
||||
|
||||
if (type)
|
||||
if((type & 1) && (is_blind() || paralysis) )//Vision related
|
||||
if((type & VISIBLE_MESSAGE) && (is_blind() || paralysis) )//Vision related
|
||||
if (!( alt ))
|
||||
return
|
||||
else
|
||||
msg = alt
|
||||
type = alt_type
|
||||
if ((type & 2) && is_deaf())//Hearing related
|
||||
if ((type & AUDIBLE_MESSAGE) && is_deaf())//Hearing related
|
||||
if (!( alt ))
|
||||
return
|
||||
else
|
||||
msg = alt
|
||||
type = alt_type
|
||||
if ((type & 1) && (sdisabilities & BLIND))
|
||||
if ((type & VISIBLE_MESSAGE) && (sdisabilities & BLIND))
|
||||
return
|
||||
// Added voice muffling for Issue 41.
|
||||
if(stat == UNCONSCIOUS || sleeping > 0)
|
||||
@@ -77,14 +78,17 @@
|
||||
// message is the message output to anyone who can see e.g. "[src] does something!"
|
||||
// self_message (optional) is what the src mob sees e.g. "You do something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null)
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null, var/range = world.view)
|
||||
if(self_message)
|
||||
if(LAZYLEN(exclude_mobs))
|
||||
exclude_mobs |= src
|
||||
else
|
||||
exclude_mobs = list(src)
|
||||
src.show_message(self_message, 1, blind_message, 2)
|
||||
. = ..(message, blind_message, exclude_mobs)
|
||||
// Transfer messages about what we are doing to upstairs
|
||||
if(shadow)
|
||||
shadow.visible_message(message, self_message, blind_message, exclude_mobs, range)
|
||||
. = ..(message, blind_message, exclude_mobs, range) // Really not ideal that atom/visible_message has different arg numbering :(
|
||||
|
||||
// Returns an amount of power drawn from the object (-1 if it's not viable).
|
||||
// If drain_check is set it will not actually drain power, just return a value.
|
||||
@@ -99,7 +103,7 @@
|
||||
// self_message (optional) is what the src mob hears.
|
||||
// deaf_message (optional) is what deaf people will see.
|
||||
// hearing_distance (optional) is the range, how many tiles away the message can be heard.
|
||||
/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message)
|
||||
/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message, var/radio_message)
|
||||
|
||||
var/range = hearing_distance || world.view
|
||||
var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE)
|
||||
@@ -107,16 +111,21 @@
|
||||
var/list/hearing_mobs = hear["mobs"]
|
||||
var/list/hearing_objs = hear["objs"]
|
||||
|
||||
for(var/obj in hearing_objs)
|
||||
var/obj/O = obj
|
||||
O.show_message(message, 2, deaf_message, 1)
|
||||
if(radio_message)
|
||||
for(var/obj in hearing_objs)
|
||||
var/obj/O = obj
|
||||
O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null)
|
||||
else
|
||||
for(var/obj in hearing_objs)
|
||||
var/obj/O = obj
|
||||
O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
|
||||
|
||||
for(var/mob in hearing_mobs)
|
||||
var/mob/M = mob
|
||||
var/msg = message
|
||||
if(self_message && M==src)
|
||||
msg = self_message
|
||||
M.show_message(msg, 2, deaf_message, 1)
|
||||
M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
|
||||
|
||||
/mob/proc/findname(msg)
|
||||
for(var/mob/M in mob_list)
|
||||
@@ -576,9 +585,6 @@
|
||||
/mob/proc/get_gender()
|
||||
return gender
|
||||
|
||||
/mob/proc/get_visible_gender()
|
||||
return gender
|
||||
|
||||
/mob/proc/see(message)
|
||||
if(!is_active())
|
||||
return 0
|
||||
|
||||
@@ -105,11 +105,6 @@
|
||||
verb = "asks"
|
||||
return verb
|
||||
|
||||
|
||||
/mob/proc/emote(var/act, var/type, var/message)
|
||||
if(act == "me")
|
||||
return custom_emote(type, message)
|
||||
|
||||
/mob/proc/get_ear()
|
||||
// returns an atom representing a location on the map from which this
|
||||
// mob can hear things
|
||||
|
||||
@@ -113,12 +113,6 @@
|
||||
if(shadow)
|
||||
shadow.set_dir(new_dir)
|
||||
|
||||
// Transfer messages about what we are doing to upstairs
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null)
|
||||
. = ..()
|
||||
if(shadow)
|
||||
shadow.visible_message(message, self_message, blind_message, exclude_mobs)
|
||||
|
||||
/mob/zshadow/set_typing_indicator(var/state)
|
||||
if(!typing_indicator)
|
||||
init_typing_indicator("typing")
|
||||
|
||||
@@ -45,14 +45,14 @@
|
||||
/datum/nifsoft/soulcatcher/install()
|
||||
if((. = ..()))
|
||||
nif.set_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) //Required on install, because other_flags aren't sufficient for our complicated settings.
|
||||
nif.human.verbs |= /mob/living/carbon/human/proc/nsay
|
||||
nif.human.verbs |= /mob/living/carbon/human/proc/nme
|
||||
nif.human.verbs |= /mob/living/carbon/human/nsay
|
||||
nif.human.verbs |= /mob/living/carbon/human/nme
|
||||
|
||||
/datum/nifsoft/soulcatcher/uninstall()
|
||||
QDEL_LIST_NULL(brainmobs)
|
||||
if((. = ..()) && nif && nif.human) //Sometimes NIFs are deleted outside of a human
|
||||
nif.human.verbs -= /mob/living/carbon/human/proc/nsay
|
||||
nif.human.verbs -= /mob/living/carbon/human/proc/nme
|
||||
nif.human.verbs -= /mob/living/carbon/human/nsay
|
||||
nif.human.verbs -= /mob/living/carbon/human/nme
|
||||
|
||||
/datum/nifsoft/soulcatcher/proc/save_settings()
|
||||
if(!nif)
|
||||
@@ -476,20 +476,26 @@
|
||||
|
||||
///////////////////
|
||||
//Verbs for humans
|
||||
/mob/living/carbon/human/proc/nsay(message as text|null)
|
||||
/mob/proc/nsay(message as text|null)
|
||||
set name = "NSay"
|
||||
set desc = "Speak into your NIF's Soulcatcher."
|
||||
set category = "IC"
|
||||
|
||||
to_chat(src, SPAN_WARNING("You must be a humanoid with a NIF implanted to use that."))
|
||||
|
||||
/mob/living/carbon/human/nsay(message as text|null)
|
||||
if(stat != CONSCIOUS)
|
||||
to_chat(src,SPAN_WARNING("You can't use NSay while unconscious."))
|
||||
return
|
||||
if(!nif)
|
||||
to_chat(src,"<span class='warning'>You can't use NSay without a NIF.</span>")
|
||||
to_chat(src,SPAN_WARNING("You can't use NSay without a NIF."))
|
||||
return
|
||||
var/datum/nifsoft/soulcatcher/SC = nif.imp_check(NIF_SOULCATCHER)
|
||||
if(!SC)
|
||||
to_chat(src,"<span class='warning'>You need the Soulcatcher software to use NSay.</span>")
|
||||
to_chat(src,SPAN_WARNING("You need the Soulcatcher software to use NSay."))
|
||||
return
|
||||
if(!SC.brainmobs.len)
|
||||
to_chat(src,"<span class='warning'>You need a loaded mind to use NSay.</span>")
|
||||
to_chat(src,SPAN_WARNING("You need a loaded mind to use NSay."))
|
||||
return
|
||||
if(!message)
|
||||
message = input("Type a message to say.","Speak into Soulcatcher") as text|null
|
||||
@@ -497,20 +503,26 @@
|
||||
var/sane_message = sanitize(message)
|
||||
SC.say_into(sane_message,src)
|
||||
|
||||
/mob/living/carbon/human/proc/nme(message as text|null)
|
||||
/mob/proc/nme(message as text|null)
|
||||
set name = "NMe"
|
||||
set desc = "Emote into your NIF's Soulcatcher."
|
||||
set category = "IC"
|
||||
|
||||
to_chat(src, SPAN_WARNING("You must be a humanoid with a NIF implanted to use that."))
|
||||
|
||||
/mob/living/carbon/human/nme(message as text|null)
|
||||
if(stat != CONSCIOUS)
|
||||
to_chat(src,SPAN_WARNING("You can't use NMe while unconscious."))
|
||||
return
|
||||
if(!nif)
|
||||
to_chat(src,"<span class='warning'>You can't use NMe without a NIF.</span>")
|
||||
to_chat(src,SPAN_WARNING("You can't use NMe without a NIF."))
|
||||
return
|
||||
var/datum/nifsoft/soulcatcher/SC = nif.imp_check(NIF_SOULCATCHER)
|
||||
if(!SC)
|
||||
to_chat(src,"<span class='warning'>You need the Soulcatcher software to use NMe.</span>")
|
||||
to_chat(src,SPAN_WARNING("You need the Soulcatcher software to use NMe."))
|
||||
return
|
||||
if(!SC.brainmobs.len)
|
||||
to_chat(src,"<span class='warning'>You need a loaded mind to use NMe.</span>")
|
||||
to_chat(src,SPAN_WARNING("You need a loaded mind to use NMe."))
|
||||
return
|
||||
|
||||
if(!message)
|
||||
@@ -563,7 +575,7 @@
|
||||
QDEL_NULL(eyeobj)
|
||||
soulcatcher.notify_into("[src] ended AR projection.")
|
||||
|
||||
/mob/living/carbon/brain/caught_soul/verb/nsay(message as text|null)
|
||||
/mob/living/carbon/brain/caught_soul/verb/nsay_brain(message as text|null)
|
||||
set name = "NSay"
|
||||
set desc = "Speak into the NIF's Soulcatcher (circumventing AR speaking)."
|
||||
set category = "Soulcatcher"
|
||||
@@ -574,7 +586,7 @@
|
||||
var/sane_message = sanitize(message)
|
||||
soulcatcher.say_into(sane_message,src,null)
|
||||
|
||||
/mob/living/carbon/brain/caught_soul/verb/nme(message as text|null)
|
||||
/mob/living/carbon/brain/caught_soul/verb/nme_brain(message as text|null)
|
||||
set name = "NMe"
|
||||
set desc = "Emote into the NIF's Soulcatcher (circumventing AR speaking)."
|
||||
set category = "Soulcatcher"
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -2206,8 +2206,37 @@
|
||||
#include "code\modules\economy\price_list_yw.dm"
|
||||
#include "code\modules\economy\retail_scanner.dm"
|
||||
#include "code\modules\economy\TradeDestinations.dm"
|
||||
<<<<<<< HEAD
|
||||
||||||| parent of caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
#include "code\modules\economy\vending.dm"
|
||||
#include "code\modules\economy\vending_machines.dm"
|
||||
=======
|
||||
#include "code\modules\economy\vending.dm"
|
||||
#include "code\modules\economy\vending_machines.dm"
|
||||
#include "code\modules\emotes\definitions\audible_furry_vr.dm"
|
||||
#include "code\modules\emotes\definitions\helpers_vr.dm"
|
||||
#include "code\modules\emotes\definitions\visible_vr.dm"
|
||||
>>>>>>> caff594797... Merge pull request #10050 from VOREStation/upstream-merge-7987
|
||||
#include "code\modules\entopics_vr\alternate_appearance.dm"
|
||||
#include "code\modules\entopics_vr\entopics.dm"
|
||||
#include "code\modules\emotes\emote_define.dm"
|
||||
#include "code\modules\emotes\emote_mob.dm"
|
||||
#include "code\modules\emotes\definitions\_mob.dm"
|
||||
#include "code\modules\emotes\definitions\_species.dm"
|
||||
#include "code\modules\emotes\definitions\audible.dm"
|
||||
#include "code\modules\emotes\definitions\audible_cough.dm"
|
||||
#include "code\modules\emotes\definitions\audible_scream.dm"
|
||||
#include "code\modules\emotes\definitions\audible_slap.dm"
|
||||
#include "code\modules\emotes\definitions\audible_snap.dm"
|
||||
#include "code\modules\emotes\definitions\audible_sneeze.dm"
|
||||
#include "code\modules\emotes\definitions\audible_whistle.dm"
|
||||
#include "code\modules\emotes\definitions\exertion.dm"
|
||||
#include "code\modules\emotes\definitions\human.dm"
|
||||
#include "code\modules\emotes\definitions\slimes.dm"
|
||||
#include "code\modules\emotes\definitions\synthetics.dm"
|
||||
#include "code\modules\emotes\definitions\visible.dm"
|
||||
#include "code\modules\emotes\definitions\visible_animated.dm"
|
||||
#include "code\modules\emotes\definitions\visible_vomit.dm"
|
||||
#include "code\modules\error_handler\_defines.dm"
|
||||
#include "code\modules\error_handler\error_handler.dm"
|
||||
#include "code\modules\error_handler\error_viewer.dm"
|
||||
|
||||
Reference in New Issue
Block a user