Added more drake emotes and sounds, thanks Spook.

This commit is contained in:
MistakeNot4892
2023-02-04 06:55:04 +11:00
parent e00b208c90
commit fc62d6ca63
23 changed files with 199 additions and 40 deletions

View File

@@ -15,7 +15,7 @@
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)
/decl/emote/audible/slap/do_extra(mob/user, atom/target)
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/H = target

View File

@@ -39,6 +39,13 @@
emote_cooldown = 20 SECONDS
broadcast_distance = 65
/decl/emote/audible/whistle/summon/broadcast_emote_to(var/send_sound, var/mob/target, var/direction)
if((. = ..()))
to_chat(target, SPAN_NOTICE("You hear a piercing whistle from somewhere to the [dir2text(direction)]."))
/decl/emote/audible/whistle/summon/broadcast_emote_to(var/send_sound, var/mob/target, var/origin_z, var/direction)
. = ..()
if (.)
var/turf/T = get_turf(target)
if(!T || T.z == origin_z)
to_chat(target, SPAN_NOTICE("You hear a piercing whistle from somewhere to the [dir2text(direction)]."))
else if(T.z < origin_z)
to_chat(target, SPAN_NOTICE("You hear a piercing whistle from somewhere above you, to the [dir2text(direction)]."))
else
to_chat(target, SPAN_NOTICE("You hear a piercing whistle from somewhere below you, to the [dir2text(direction)]."))

View File

@@ -2,11 +2,12 @@
key = "nomood"
var/mood
/decl/emote/slime/do_extra(var/mob/living/simple_mob/slime/user)
/decl/emote/slime/do_extra(mob/user, atom/target)
. = ..()
if(istype(user))
user.mood = mood
user.update_icon()
if(istype(user, /mob/living/simple_mob/slime))
var/mob/living/simple_mob/slime/user_slime = user
user_slime.mood = mood
user_slime.update_icon()
/decl/emote/slime/mob_can_use(var/atom/user)
return ..() && isslime(user)

View File

@@ -53,7 +53,7 @@
key = "collapse"
emote_message_3p = "collapses!"
/decl/emote/visible/collapse/do_extra(var/mob/user)
/decl/emote/visible/collapse/do_extra(mob/user, atom/target)
..()
if(istype(user))
user.Paralyse(2)
@@ -114,7 +114,7 @@
key = "faint"
emote_message_3p = "faints."
/decl/emote/visible/faint/do_extra(var/mob/user)
/decl/emote/visible/faint/do_extra(mob/user, atom/target)
. = ..()
if(istype(user) && !user.sleeping)
user.Sleeping(10)

View File

@@ -4,7 +4,7 @@
emote_message_3p = "spins!"
emote_delay = 2 SECONDS
/decl/emote/visible/spin/do_extra(mob/user)
/decl/emote/visible/spin/do_extra(mob/user, atom/target)
if(istype(user))
user.spin(20, 1)
@@ -14,7 +14,7 @@
emote_message_3p = "steps rhythmically and moves side to side."
emote_delay = 1.2 SECONDS
/decl/emote/visible/sidestep/do_extra(mob/user)
/decl/emote/visible/sidestep/do_extra(mob/user, atom/target)
if(istype(user))
animate(user, pixel_x = 5, time = 5)
sleep(3)
@@ -28,7 +28,7 @@
emote_sound = 'sound/effects/bodyfall4.ogg'
emote_delay = 1.2 SECONDS
/decl/emote/visible/flip/do_extra(mob/user)
/decl/emote/visible/flip/do_extra(mob/user, atom/target)
. = ..()
if(istype(user))
user.SpinAnimation(7,1)
@@ -73,7 +73,7 @@
if(!QDELETED(user))
user.SpinAnimation(10,1)
/decl/emote/visible/floorspin/do_extra(mob/user)
/decl/emote/visible/floorspin/do_extra(mob/user, atom/target)
. = ..()
if(istype(user))
spin_dir(user)

View File

@@ -1,7 +1,7 @@
// 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.
// - USER_THEM / TARGET_THEM / USER_THEIR / TARGET_THEIR / USER_THEY / TARGET_THEY
// will be replaced with a gender-appropriate version of the same.
// - Impaired messages do not do any substitutions.
var/global/list/emotes_by_key
@@ -94,6 +94,9 @@ var/global/list/emotes_by_key
LAZYINITLIST(.)
.["broadcast"] = broadcast_sound
/decl/emote/proc/finalize_target(var/atom/target)
return TRUE
/decl/emote/proc/do_emote(var/atom/user, var/extra_params)
if(ismob(user) && check_restraints)
@@ -127,7 +130,7 @@ var/global/list/emotes_by_key
target_dist = new_target_dist
target = thing
if(!target)
if(!finalize_target(user, target))
to_chat(user, SPAN_WARNING("You cannot see a '[extra_params]' within range."))
return FALSE
@@ -176,8 +179,10 @@ var/global/list/emotes_by_key
if(istype(target))
var/datum/gender/target_gender = gender_datums[target.get_visible_gender()]
. = replacetext(., "TARGET_THEM", target_gender.him)
. = replacetext(., "TARGET_THEY", target_gender.he)
. = replacetext(., "TARGET_THEIR", target_gender.his)
. = replacetext(., "TARGET_SELF", target_gender.himself)
. = replacetext(., "TARGET_S", target_gender.s)
. = replacetext(., "TARGET", "<b>\the [target]</b>")
/decl/emote/proc/replace_user_tokens(var/msg, var/atom/user)
@@ -185,8 +190,10 @@ var/global/list/emotes_by_key
if(istype(user))
var/datum/gender/user_gender = gender_datums[user.get_visible_gender()]
. = replacetext(., "USER_THEM", user_gender.him)
. = replacetext(., "USER_THEY", user_gender.he)
. = replacetext(., "USER_THEIR", user_gender.his)
. = replacetext(., "USER_SELF", user_gender.himself)
. = replacetext(., "USER_S", user_gender.s)
. = replacetext(., "USER", "<b>\the [user]</b>")
/decl/emote/proc/get_radio_message(var/atom/user)
@@ -194,7 +201,7 @@ var/global/list/emotes_by_key
return emote_message_radio_synthetic
return emote_message_radio
/decl/emote/proc/do_extra(var/atom/user, var/atom/target)
/decl/emote/proc/do_extra(mob/user, atom/target)
return
/decl/emote/proc/do_sound(var/atom/user)
@@ -251,9 +258,9 @@ var/global/list/emotes_by_key
continue
if(!isnull(broadcast_distance) && get_dist(reference_point, user_turf) > broadcast_distance)
continue
broadcast_emote_to(sound_to_broadcast, listener, direction)
broadcast_emote_to(sound_to_broadcast, listener, user_turf.z, direction)
/decl/emote/proc/broadcast_emote_to(var/send_sound, var/mob/target, var/direction)
/decl/emote/proc/broadcast_emote_to(var/send_sound, var/mob/target, var/origin_z, var/direction)
var/turf/sound_origin = get_turf(target)
target.playsound_local(get_step(sound_origin, direction) || sound_origin, send_sound, broadcast_volume)
return TRUE

View File

@@ -12,7 +12,7 @@ You can eat glowing tree fruit to fuel your <b>ranged spitting attack</b> and <b
icon_dead = "doggo_lying"
icon_rest = "doggo_lying"
projectileverb = "spits"
friendly = list("headbutts", "grooms", "play-bites", "rubs against")
friendly = list("sniffs")
bitesize = 10 // chomp
gender = NEUTER
@@ -161,10 +161,32 @@ You can eat glowing tree fruit to fuel your <b>ranged spitting attack</b> and <b
return ..()
/mob/living/simple_mob/animal/sif/grafadreka/get_available_emotes()
if (!is_baby)
return global._default_mob_emotes | /decl/emote/audible/drake_howl
return global._default_mob_emotes
if(is_baby)
var/static/list/_baby_drake_emotes = list(
/decl/emote/audible/drake_hatchling_growl,
/decl/emote/audible/drake_hatchling_whine,
/decl/emote/audible/drake_hatchling_yelp,
/decl/emote/audible/drake_warn/hatchling,
/decl/emote/audible/drake_sneeze
)
return global._default_mob_emotes | _baby_drake_emotes
else
var/static/list/_adult_drake_emotes = list(
/decl/emote/audible/drake_warble,
/decl/emote/audible/drake_purr,
/decl/emote/audible/drake_grumble,
/decl/emote/audible/drake_huff,
/decl/emote/audible/drake_rattle,
/decl/emote/audible/drake_warn,
/decl/emote/audible/drake_rumble,
/decl/emote/audible/drake_roar,
/decl/emote/audible/drake_sneeze,
/decl/emote/visible/drake_headbutt
)
return global._default_mob_emotes | _adult_drake_emotes
/mob/living/simple_mob/animal/sif/grafadreka/lay_down()

View File

@@ -0,0 +1,136 @@
/decl/emote/audible/drake_roar
key = "droar"
emote_message_3p = "inflates USER_THEIR throat, lifts USER_THEIR head up, and releases a resonating, bone-shaking roar."
emote_sound = 'sound/voice/drakes/drake_roar.ogg'
broadcast_sound = 'sound/voice/drakes/drake_roar.ogg'
emote_cooldown = 20 SECONDS
broadcast_distance = 90
/decl/emote/audible/drake_roar/broadcast_emote_to(send_sound, mob/target, var/origin_z, direction)
. = ..()
if (.)
var/turf/T = get_turf(target)
if(!T || T.z == origin_z)
to_chat(target, SPAN_NOTICE("You hear a resonant bellowing roar from somewhere to the [dir2text(direction)]."))
else if(T.z < origin_z)
to_chat(target, SPAN_NOTICE("You hear a resonant bellowing roar from somewhere above you, to the [dir2text(direction)]."))
else
to_chat(target, SPAN_NOTICE("You hear a resonant bellowing roar from somewhere below you, to the [dir2text(direction)]."))
/decl/emote/audible/drake_warble
key = "dwarble"
emote_message_3p = "warbles happily."
// emote_sound = 'sound/voice/drakes/drake_warble.ogg'
/decl/emote/audible/drake_purr
key = "dpurr"
emote_message_3p = "emits a low, rumbling purr."
emote_message_3p_target = "emits a low, rumbling purr as USER_THEY rubUSER_S USER_THEIR head against TARGET."
// emote_sound = 'sound/voice/drakes/drake_purr.ogg'
// Do some bespoke adjacency checking since we want this to be more granular than a straight range check.
/decl/emote/audible/drake_purr/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
. = ..()
if(. == emote_message_3p_target && target && !user.Adjacent(target))
. = "half-lids their eyes at TARGET and emits a low, rumbling purr."
/decl/emote/audible/drake_grumble
key = "dgrumble"
emote_message_3p = "grumbles unhappily."
emote_message_3p_target = "grumbles unhappily at TARGET."
emote_sound = 'sound/voice/drakes/drake_grumble.ogg'
/decl/emote/audible/drake_huff
key = "dhuff"
emote_message_3p = "huffs!"
emote_message_3p_target = "huffs at TARGET!"
emote_sound = 'sound/voice/drakes/drake_huff.ogg'
/decl/emote/audible/drake_warn
key = "dwarn"
emote_message_1p = "You fill your throat sacs with spittle, preparing to attack."
emote_message_1p_target = "You stare at TARGET as you fill your throat sacs with spittle, preparing to attack."
emote_message_3p = "works USER_THEIR throat, making a horrible wet noise..."
emote_message_3p_target = "stares intently at TARGET, working USER_THEIR throat to make a horrible wet noise..."
emote_sound = 'sound/voice/drakes/drake_warn.ogg'
/decl/emote/audible/drake_warn/hatchling
key = "hwarn"
emote_sound = 'sound/voice/drakes/hatchling_warn.ogg'
/decl/emote/audible/drake_warn/Initialize()
. = ..()
emote_message_1p = SPAN_WARNING(emote_message_1p)
emote_message_1p_target = SPAN_WARNING(emote_message_1p_target)
emote_message_3p = SPAN_WARNING(emote_message_3p)
emote_message_3p_target = SPAN_WARNING(emote_message_3p_target)
/decl/emote/audible/drake_rattle
key = "drattle"
emote_message_1p = "You bark a challenge and rattle your neck-spines threateningly."
emote_message_1p_target = "You challenge TARGET with a sharp bark, rattling your neck-spines threateningly."
emote_message_3p = "barks sharply and rattles USER_THEIR neck-spines!"
emote_message_3p_target = "barks sharply at TARGET, rattling USER_THEIR neck-spines!"
emote_sound = 'sound/voice/drakes/drake_rattle.ogg'
/decl/emote/audible/drake_rattle/Initialize()
. = ..()
emote_message_1p = SPAN_WARNING(emote_message_1p)
emote_message_1p_target = SPAN_WARNING(emote_message_1p_target)
emote_message_3p = SPAN_WARNING(emote_message_3p)
emote_message_3p_target = SPAN_WARNING(emote_message_3p_target)
/decl/emote/visible/drake_headbutt
key = "headbutt"
emote_message_3p = "waves USER_THEIR head around energetically."
emote_message_3p_target = "headbutts TARGET!"
check_range = 1
emote_cooldown = 5 SECONDS
/decl/emote/visible/drake_headbutt/finalize_target(var/mob/user, var/atom/target)
return user.Adjacent(target) && ..()
/decl/emote/visible/drake_headbutt/do_extra(mob/user, atom/target)
. = ..()
// Copied from disarm.
if(!isliving(target) || prob(75))
return
var/mob/living/victim = target
var/datum/species/species = victim.get_species()
if(species?.flags & NO_SLIP)
return
var/obj/item/clothing/shoes = victim.get_equipped_item(slot_shoes)
if(istype(shoes) && (shoes.item_flags & NOSLIP))
return
var/armor_check = victim.run_armor_check(user.zone_sel?.selecting || BP_TORSO, "melee")
if(armor_check < 60)
victim.apply_effect(3, WEAKEN, armor_check)
playsound(victim, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
/decl/emote/audible/drake_rumble
key = "drumble"
emote_message_3p = "rumbles in the depths of USER_THEIR chest."
emote_sound = 'sound/voice/drakes/drake_rumble.ogg'
/decl/emote/audible/drake_hatchling_growl
key = "hgrowl"
emote_message_3p = "voices a high-pitched growl!"
emote_sound = 'sound/voice/drakes/hatchling_growl.ogg'
/decl/emote/audible/drake_hatchling_whine
key = "hwhine"
emote_message_3p = "whines plaintively!"
emote_sound = 'sound/voice/drakes/hatchling_whine.ogg'
/decl/emote/audible/drake_hatchling_yelp
key = "hyelp"
emote_message_3p = "yelps!"
emote_sound = 'sound/voice/drakes/hatchling_yelp.ogg'
/decl/emote/audible/drake_sneeze
key = "dsneeze"
emote_message_1p = "You sneeze!"
emote_message_3p = "sneezes!"
emote_sound = 'sound/voice/drakes/drake_sneeze.ogg'

View File

@@ -45,7 +45,7 @@ Field studies suggest analytical abilities on par with some species of cepholapo
/datum/say_list/grafadreka
speak = list("Chff!", "Skhh.", "Rrrss...")
emote_see = list("scratches its ears","grooms its spines", "sways its tail", "claws at the ground")
emote_hear = list("hisses", "rattles", "rasps", "barks")
emote_hear = list("hisses", "rattles", "rasps", "barks", "warbles")
/decl/mob_organ_names/grafadreka
@@ -63,21 +63,6 @@ Field studies suggest analytical abilities on par with some species of cepholapo
)
/decl/emote/audible/drake_howl
key = "dhowl"
emote_message_3p = "lifts USER_THEIR head up and gives an eerie howl."
emote_sound = 'sound/effects/drakehowl_close.ogg'
broadcast_sound ='sound/effects/drakehowl_far.ogg'
emote_cooldown = 20 SECONDS
broadcast_distance = 90
/decl/emote/audible/drake_howl/broadcast_emote_to(send_sound, mob/target, direction)
. = ..()
if (.)
to_chat(target, SPAN_NOTICE("You hear an eerie howl from somewhere to the [dir2text(direction)]."))
/obj/item/projectile/drake_spit
name = "drake spit"
icon_state = "ice_1"