mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 20:17:15 +01:00
Ported the Bay/Nebula emote system.
This commit is contained in:
committed by
Aronai Sieyes
parent
f65ba71e80
commit
8d4801b827
@@ -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,8 @@
|
||||
#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.
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
#define DEATHGASP_NO_MESSAGE "no message"
|
||||
>>>>>>> d40a022... Merge pull request #7987 from MistakeNot4892/chirp
|
||||
|
||||
+22
-10
@@ -490,8 +490,9 @@
|
||||
// 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)
|
||||
|
||||
<<<<<<< HEAD
|
||||
//VOREStation Edit
|
||||
var/list/see
|
||||
if(isbelly(loc))
|
||||
@@ -500,6 +501,9 @@
|
||||
else
|
||||
see = get_mobs_and_objs_in_view_fast(get_turf(src),world.view,remote_ghosts = FALSE)
|
||||
//VOREStation Edit End
|
||||
=======
|
||||
var/list/see = get_mobs_and_objs_in_view_fast(get_turf(src), range, remote_ghosts = FALSE)
|
||||
>>>>>>> d40a022... Merge pull request #7987 from MistakeNot4892/chirp
|
||||
|
||||
var/list/seeing_mobs = see["mobs"]
|
||||
var/list/seeing_objs = see["objs"]
|
||||
@@ -508,20 +512,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 +533,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 +656,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
|
||||
|
||||
@@ -552,9 +552,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,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,62 @@
|
||||
/decl/emote/human
|
||||
key = "vomit"
|
||||
|
||||
/decl/emote/human/check_user(var/mob/living/carbon/human/user)
|
||||
return (istype(user) && user.check_has_mouth() && !user.isSynthetic())
|
||||
|
||||
/decl/emote/human/do_emote(var/mob/living/carbon/human/user)
|
||||
user.vomit()
|
||||
|
||||
/decl/emote/human/deathgasp
|
||||
key = "deathgasp"
|
||||
|
||||
/decl/emote/human/deathgasp/do_emote(mob/living/carbon/human/user)
|
||||
if(istype(user) && user.species.get_death_message(user) == DEATHGASP_NO_MESSAGE)
|
||||
to_chat(user, SPAN_WARNING("Your species has no deathgasp."))
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/decl/emote/human/deathgasp/get_emote_message_3p(var/mob/living/carbon/human/user)
|
||||
return "USER [user.species.get_death_message(user)]"
|
||||
|
||||
/decl/emote/human/swish
|
||||
key = "swish"
|
||||
|
||||
/decl/emote/human/swish/do_emote(var/mob/living/carbon/human/user)
|
||||
user.animate_tail_once()
|
||||
|
||||
/decl/emote/human/wag
|
||||
key = "wag"
|
||||
|
||||
/decl/emote/human/wag/do_emote(var/mob/living/carbon/human/user)
|
||||
user.animate_tail_start()
|
||||
|
||||
/decl/emote/human/sway
|
||||
key = "sway"
|
||||
|
||||
/decl/emote/human/sway/do_emote(var/mob/living/carbon/human/user)
|
||||
user.animate_tail_start()
|
||||
|
||||
/decl/emote/human/qwag
|
||||
key = "qwag"
|
||||
|
||||
/decl/emote/human/qwag/do_emote(var/mob/living/carbon/human/user)
|
||||
user.animate_tail_fast()
|
||||
|
||||
/decl/emote/human/fastsway
|
||||
key = "fastsway"
|
||||
|
||||
/decl/emote/human/fastsway/do_emote(var/mob/living/carbon/human/user)
|
||||
user.animate_tail_fast()
|
||||
|
||||
/decl/emote/human/swag
|
||||
key = "swag"
|
||||
|
||||
/decl/emote/human/swag/do_emote(var/mob/living/carbon/human/user)
|
||||
user.animate_tail_stop()
|
||||
|
||||
/decl/emote/human/stopsway
|
||||
key = "stopsway"
|
||||
|
||||
/decl/emote/human/stopsway/do_emote(var/mob/living/carbon/human/user)
|
||||
user.animate_tail_stop()
|
||||
@@ -0,0 +1,32 @@
|
||||
/decl/emote/slime
|
||||
key = "nomood"
|
||||
var/mood
|
||||
|
||||
/decl/emote/slime/do_extra(var/mob/living/simple_mob/slime/user)
|
||||
. = ..()
|
||||
if(istype(user))
|
||||
user.mood = mood
|
||||
user.update_icon()
|
||||
|
||||
/decl/emote/slime/check_user(var/atom/user)
|
||||
return isslime(user)
|
||||
|
||||
/decl/emote/slime/pout
|
||||
key = "pout"
|
||||
mood = "pout"
|
||||
|
||||
/decl/emote/slime/sad
|
||||
key = "sad"
|
||||
mood = "sad"
|
||||
|
||||
/decl/emote/slime/angry
|
||||
key = "angry"
|
||||
mood = "angry"
|
||||
|
||||
/decl/emote/slime/frown
|
||||
key = "frown"
|
||||
mood = "mischevous"
|
||||
|
||||
/decl/emote/slime/smile
|
||||
key = "smile"
|
||||
mood = ":3"
|
||||
@@ -0,0 +1,51 @@
|
||||
/decl/emote/audible/synth
|
||||
key = "beep"
|
||||
emote_message_3p = "beeps."
|
||||
emote_sound = 'sound/machines/twobeep.ogg'
|
||||
|
||||
/decl/emote/audible/synth/check_user(var/mob/living/user)
|
||||
if(istype(user) && user.isSynthetic())
|
||||
return ..()
|
||||
return FALSE
|
||||
|
||||
/decl/emote/audible/synth/ping
|
||||
key = "ping"
|
||||
emote_message_3p = "pings."
|
||||
emote_sound = 'sound/machines/ping.ogg'
|
||||
|
||||
/decl/emote/audible/synth/buzz
|
||||
key = "buzz"
|
||||
emote_message_3p = "buzzes."
|
||||
emote_sound = 'sound/machines/buzz-sigh.ogg'
|
||||
|
||||
/decl/emote/audible/synth/confirm
|
||||
key = "confirm"
|
||||
emote_message_3p = "emits an affirmative blip."
|
||||
emote_sound = 'sound/machines/synth_yes.ogg'
|
||||
|
||||
/decl/emote/audible/synth/deny
|
||||
key = "deny"
|
||||
emote_message_3p = "emits a negative blip."
|
||||
emote_sound = 'sound/machines/synth_no.ogg'
|
||||
|
||||
/decl/emote/audible/synth/security
|
||||
key = "law"
|
||||
emote_message_3p = "shows USER_HIS legal authorization barcode."
|
||||
emote_message_3p_target = "shows TARGET USER_THEIR legal authorization barcode."
|
||||
emote_sound = 'sound/voice/biamthelaw.ogg'
|
||||
|
||||
/decl/emote/audible/synth/security/check_user(var/mob/living/silicon/robot/user)
|
||||
return (istype(user) && istype(user.module, /obj/item/weapon/robot_module/robot/security))
|
||||
|
||||
/decl/emote/audible/synth/security/halt
|
||||
key = "halt"
|
||||
emote_message_3p = "USER's speakers skreech, \"Halt! Security!\"."
|
||||
emote_sound = 'sound/voice/halt.ogg'
|
||||
|
||||
/decl/emote/audible/synth/dwoop
|
||||
key = "dwoop"
|
||||
emote_message_1p_target = "You chirp happily at TARGET!"
|
||||
emote_message_1p = "You chirp happily."
|
||||
emote_message_3p_target = "chirps happily at TARGET!"
|
||||
emote_message_3p = "chirps happily."
|
||||
emote_sound = 'sound/machines/dwoop.ogg'
|
||||
@@ -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,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)
|
||||
|
||||
/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,175 @@
|
||||
/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(input("Enter an emote to display.") as text|null)
|
||||
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)
|
||||
|
||||
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,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
// All mobs should have custom emote, really..
|
||||
//m_type == 1 --> visual.
|
||||
//m_type == 2 --> audible
|
||||
@@ -53,12 +54,14 @@
|
||||
if(O)
|
||||
O.see_emote(src, message, m_type)
|
||||
|
||||
=======
|
||||
>>>>>>> d40a022... Merge pull request #7987 from MistakeNot4892/chirp
|
||||
// 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
|
||||
|
||||
@@ -838,6 +839,106 @@
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
/mob/living/carbon/human/get_default_emotes()
|
||||
return global._human_default_emotes
|
||||
>>>>>>> d40a022... Merge pull request #7987 from MistakeNot4892/chirp
|
||||
|
||||
/mob/living/carbon/human/verb/pose()
|
||||
set name = "Set Pose"
|
||||
|
||||
@@ -1162,6 +1162,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
|
||||
@@ -106,9 +107,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')
|
||||
@@ -86,7 +87,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]
|
||||
|
||||
@@ -75,7 +75,8 @@
|
||||
var/list/assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //VOREStation Edit
|
||||
|
||||
//Soundy emotey things.
|
||||
var/scream_verb = "screams"
|
||||
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!
|
||||
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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -119,6 +119,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
|
||||
|
||||
@@ -160,6 +160,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)
|
||||
@@ -250,6 +260,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)
|
||||
@@ -533,6 +553,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
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
descriptors = list(
|
||||
/datum/mob_descriptor/height = -3,
|
||||
/datum/mob_descriptor/build = -3
|
||||
)
|
||||
)
|
||||
|
||||
var/static/list/flight_bodyparts = list(
|
||||
BP_L_ARM,
|
||||
@@ -152,6 +152,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)
|
||||
@@ -159,7 +165,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))
|
||||
|
||||
@@ -433,38 +433,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,34 @@
|
||||
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
|
||||
)
|
||||
|
||||
/mob/living/silicon/robot/get_default_emotes()
|
||||
return global._robot_default_emotes
|
||||
>>>>>>> d40a022... Merge pull request #7987 from MistakeNot4892/chirp
|
||||
|
||||
@@ -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")
|
||||
|
||||
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.
@@ -2071,6 +2071,24 @@
|
||||
#include "code\modules\economy\vending_machines.dm"
|
||||
#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