diff --git a/code/__DEFINES/emotes_defines.dm b/code/__DEFINES/emotes_defines.dm index f654bb678bb..082862266e5 100644 --- a/code/__DEFINES/emotes_defines.dm +++ b/code/__DEFINES/emotes_defines.dm @@ -76,7 +76,7 @@ #define EMOTE_ACT_STOP_EXECUTION 1 /// List of emotes useable by ghosties -#define USABLE_DEAD_EMOTES list("*flip", "*spin") +#define USABLE_DEAD_EMOTES list("*flip", "*spin", "*jump") // Strings used for the rock paper scissors emote and status effect #define RPS_EMOTE_ROCK "rock" diff --git a/code/datums/keybindings/emote_keybinds.dm b/code/datums/keybindings/emote_keybinds.dm index bde88ae0da9..97da98e7915 100644 --- a/code/datums/keybindings/emote_keybinds.dm +++ b/code/datums/keybindings/emote_keybinds.dm @@ -17,6 +17,10 @@ linked_emote = /datum/emote/spin name = "Spin" +/datum/keybinding/emote/jump + linked_emote = /datum/emote/jump + name = "Jump" + /datum/keybinding/emote/blush linked_emote = /datum/emote/living/blush name = "Blush" @@ -41,10 +45,6 @@ linked_emote = /datum/emote/living/dance name = "Dance" -/datum/keybinding/emote/jump - linked_emote = /datum/emote/living/jump - name = "Jump" - /datum/keybinding/emote/deathgasp linked_emote = /datum/emote/living/deathgasp name = "Deathgasp" diff --git a/code/modules/mob/living/living_emote.dm b/code/modules/mob/living/living_emote.dm index 3c6f799e2fe..cc57152ac08 100644 --- a/code/modules/mob/living/living_emote.dm +++ b/code/modules/mob/living/living_emote.dm @@ -56,11 +56,6 @@ key_third_person = "dances" message = "dances around happily." -/datum/emote/living/jump - key = "jump" - key_third_person = "jumps" - message = "jumps!" - /datum/emote/living/deathgasp key = "deathgasp" key_third_person = "deathgasps" diff --git a/code/modules/mob/mob_emote.dm b/code/modules/mob/mob_emote.dm index 28ad98a0d3b..86bb84300dc 100644 --- a/code/modules/mob/mob_emote.dm +++ b/code/modules/mob/mob_emote.dm @@ -200,3 +200,47 @@ if(istype(L)) L.Dizzy(24 SECONDS) L.Confused(24 SECONDS) + +/datum/emote/jump + key = "jump" + key_third_person = "jumps" + message = "jumps!" + emote_type = EMOTE_VISIBLE | EMOTE_FORCE_NO_RUNECHAT + mob_type_allowed_typecache = list(/mob/living, /mob/dead/observer) + mob_type_blacklist_typecache = list(/mob/living/brain, /mob/camera, /mob/living/silicon/ai) + mob_type_ignore_stat_typecache = list(/mob/dead/observer) + cooldown = 0.25 SECONDS // bhop until you're stamina-less if you want lmao + audio_cooldown = 0.25 SECONDS + +/datum/emote/jump/run_emote(mob/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + + jump_animation(user) + if(isliving(user)) + var/mob/living/L = user + L.adjustStaminaLoss(30) + +/datum/emote/jump/proc/jump_animation(mob/user) + var/original_transform = user.transform + animate(user, transform = user.transform.Translate(0, 8), time = 0.15 SECONDS, flags = ANIMATION_PARALLEL, easing = QUAD_EASING|EASE_OUT) + animate(transform = original_transform, time = 0.15 SECONDS, easing = QUAD_EASING|EASE_IN) + +/datum/emote/jump/get_sound(mob/user) + return 'sound/weapons/thudswoosh.ogg' + +// Avoids playing sounds if we're a ghost +/datum/emote/jump/should_play_sound(mob/user, intentional) + if(isliving(user)) + return ..() + return FALSE + +/datum/emote/jump/can_run_emote(mob/user, status_check, intentional) + if(user.buckled || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !isturf(user.loc)) + return FALSE + if(isliving(user)) + var/mob/living/L = user + if(IS_HORIZONTAL(L)) + return FALSE + return ..()