diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index a370e3f633b..e21e8588d1f 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -723,23 +723,6 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/is_muzzled()
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
-/mob/living/carbon/proc/spin(spintime, speed)
- spawn()
- var/D = dir
- while(spintime >= speed)
- sleep(speed)
- switch(D)
- if(NORTH)
- D = EAST
- if(SOUTH)
- D = WEST
- if(EAST)
- D = SOUTH
- if(WEST)
- D = NORTH
- dir = D
- spintime -= speed
-
/mob/living/carbon/resist_buckle()
spawn(0)
resist_muzzle()
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index c8171bcc47c..076ae3b7157 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -28,5 +28,5 @@
var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
var/co2overloadtime = null
-
+ var/highfiving = FALSE
blood_volume = BLOOD_VOLUME_NORMAL
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 89f8b9a5c9d..fcc73b3ef6b 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -86,7 +86,7 @@
on_CD = handle_emote_CD(50) //longer cooldown
if("fart", "farts", "flip", "flips", "snap", "snaps")
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
- if("cough", "coughs", "slap", "slaps")
+ if("cough", "coughs", "slap", "slaps", "highfive")
on_CD = handle_emote_CD()
if("sneeze", "sneezes")
on_CD = handle_emote_CD()
@@ -802,11 +802,46 @@
continue
M.reagents.add_reagent("jenkem", 1)
+ if("hem")
+ message = "[src] hems."
+
+ if("spin")
+ spin(20, 1)
+ message = "[src] spins around dizzily!"
+
+ if("highfive")
+ if(restrained())
+ return
+ if(highfiving)
+ to_chat(src, "You give up on the high-five.")
+ highfiving = FALSE
+ return
+ highfiving = TRUE
+ for(var/mob/living/carbon/C in orange(1))
+ if(C.highfiving)
+ if(C.mind.special_role == "Wizard" && mind.special_role == "Wizard")
+ visible_message("[name] and [C.name] high-five EPICALLY!")
+ for(var/atom/A in orange(5))
+ if(A == C)
+ continue
+ A.ex_act(rand(1, 2))
+ break
+ visible_message("[name] and [C.name] high-five!")
+ C.highfiving = FALSE
+ highfiving = FALSE
+ playsound('sound/effects/snap.ogg', 50)
+ break
+ if(highfiving)
+ visible_message("[name] requests a highfive.", "You request a highfive.")
+ if(do_after(src, 25, target = src))
+ visible_message("[name] was left hanging. Embarrassing.", "You are left hanging. How embarrassing!")
+ highfiving = FALSE
+
if("help")
var/emotelist = "aflap(s), airguitar, blink(s), blink(s)_r, blush(es), bow(s)-(none)/mob, burp(s), choke(s), chuckle(s), clap(s), collapse(s), cough(s),cry, cries, custom, dance, dap(s)(none)/mob," \
+ " deathgasp(s), drool(s), eyebrow, fart(s), faint(s), flap(s), flip(s), frown(s), gasp(s), giggle(s), glare(s)-(none)/mob, grin(s), groan(s), grumble(s), grin(s)," \
- + " handshake-mob, hug(s)-(none)/mob, johnny, jump, laugh(s), look(s)-(none)/mob, moan(s), mumble(s), nod(s), pale(s), point(s)-atom, quiver(s), raise(s), salute(s)-(none)/mob, scream(s), shake(s)," \
- + " shiver(s), shrug(s), sigh(s), signal(s)-#1-10,slap(s)-(none)/mob, smile(s),snap(s), sneeze(s), sniff(s), snore(s), stare(s)-(none)/mob, swag(s), tremble(s), twitch(es), twitch(es)_s," \
+ + " handshake-mob, hug(s)-(none)/mob, hem, highfive, johnny, jump, laugh(s), look(s)-(none)/mob, moan(s), mumble(s), nod(s), pale(s), point(s)-atom, quiver(s), raise(s), salute(s)-(none)/mob, scream(s), shake(s)," \
+ + " shiver(s), shrug(s), sigh(s), signal(s)-#1-10,slap(s)-(none)/mob, spin, smile(s),snap(s), sneeze(s), sniff(s), snore(s), stare(s)-(none)/mob, swag(s), tremble(s), twitch(es), twitch(es)_s," \
+ " wag(s), wave(s), whimper(s), wink(s), yawn(s)"
switch(species.name)
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index bf7f413708f..a5006aa1bcf 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -156,9 +156,11 @@
m_type = 1
message = "[src] does a flip!"
src.SpinAnimation(5,1)
-
+ if("spin")
+ spin(20, 1)
+ message = "[src] spins around dizzily!"
if("help")
- to_chat(src, "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitches, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look,\n law, halt")
+ to_chat(src, "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitches, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, spin, look,\n law, halt")
..(act, m_type, message)
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index bf4ac4a1664..c80c66a6640 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -461,10 +461,7 @@
if(prob(1))
custom_emote(1, pick("dances around.","chases its tail!"))
- spawn(0)
- for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
- dir = i
- sleep(1)
+ spin(20, 1)
/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
name = "Corgi meat"
@@ -549,10 +546,7 @@
if(!resting && !buckled)
if(prob(1))
custom_emote(1, pick("dances around.","chases her tail."))
- spawn(0)
- for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
- dir = i
- sleep(1)
+ spin(20, 1)
/mob/living/simple_animal/pet/corgi/attack_hand(mob/living/carbon/human/M)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm
index a20c7b73d5f..52769f9dba6 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm
@@ -6,6 +6,4 @@
for(var/mob/O in oviewers(src, null))
if((O.client && !( O.blinded )))
to_chat(O, text("[] [pick("dances around","chases its tail")].", src))
- for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
- dir = i
- sleep(1)
+ spin(20, 1)
\ No newline at end of file
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 03bc97c2d73..a4503fa6cce 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1237,3 +1237,20 @@ var/list/slot_equipment_priority = list( \
attack_log += new_log
last_log = world.timeofday
+
+/mob/proc/spin(spintime, speed)
+ set waitfor = 0
+ var/D = dir
+ while(spintime >= speed)
+ sleep(speed)
+ switch(D)
+ if(NORTH)
+ D = EAST
+ if(SOUTH)
+ D = WEST
+ if(EAST)
+ D = SOUTH
+ if(WEST)
+ D = NORTH
+ setDir(D)
+ spintime -= speed
\ No newline at end of file