diff --git a/code/__DEFINES/~skyrat_defines/traits.dm b/code/__DEFINES/~skyrat_defines/traits.dm
index 8b625ebe8da..91c3dc3a57f 100644
--- a/code/__DEFINES/~skyrat_defines/traits.dm
+++ b/code/__DEFINES/~skyrat_defines/traits.dm
@@ -15,6 +15,12 @@
/// This makes trait makes it so that the person cannot be infected by the zombie virus.
#define TRAIT_MUTANT_IMMUNE "mutant_immune"
+//AdditionalEmotes *turf traits
+#define TRAIT_WATER_ASPECT "water_aspect"
+#define TRAIT_WEBBING_ASPECT "webbing_aspect"
+#define TRAIT_FLORAL_ASPECT "floral_aspect"
+#define TRAIT_ASH_ASPECT "ash_aspect"
+
// Trait sources
#define GHOSTROLE_TRAIT "ghostrole" // SKYRAT EDIT ADDITION -- Ghost Cafe Traits
diff --git a/code/__HELPERS/~skyrat_helpers/is_helpers.dm b/code/__HELPERS/~skyrat_helpers/is_helpers.dm
index 86764b533a2..68a5072b559 100644
--- a/code/__HELPERS/~skyrat_helpers/is_helpers.dm
+++ b/code/__HELPERS/~skyrat_helpers/is_helpers.dm
@@ -13,3 +13,7 @@
#define isroundstartslime(A) (is_species(A,/datum/species/jelly/roundstartslime))
#define ishorrorling(A) (istype(A, /mob/living/simple_animal/hostile/true_changeling))
+
+#define isaquatic(A) (is_species(A,/datum/species/aquatic))
+#define isakula(A) (is_species(A,/datum/species/akula))
+#define ishumanoid(A) (is_species(A,/datum/species/humanoid))
diff --git a/modular_skyrat/master_files/code/datums/traits/good.dm b/modular_skyrat/master_files/code/datums/traits/good.dm
index 7b8deeec460..d5d34524fae 100644
--- a/modular_skyrat/master_files/code/datums/traits/good.dm
+++ b/modular_skyrat/master_files/code/datums/traits/good.dm
@@ -8,3 +8,40 @@
gain_text = "The ground doesn't feel so rough on your feet anymore."
lose_text = "You start feeling the ridges and imperfections on the ground."
medical_record_text = "Patient's feet are more resilient against traction."
+
+//AdditionalEmotes *turf quirks
+/datum/quirk/water_aspect
+ name = "Water aspect (Emotes)"
+ desc = "(Aquatic innate) Underwater societies are home to you, space ain't much different. (Say *turf to cast)"
+ value = 2
+ mob_trait = TRAIT_WATER_ASPECT
+ gain_text = "You feel like you can control water."
+ lose_text = "Somehow, you've lost your ability to control water!"
+ medical_record_text = "Patient holds a collection of nanobots designed to synthesize H2O."
+
+/datum/quirk/webbing_aspect
+ name = "Webbing aspect (Emotes)"
+ desc = "(Insect innate) Insect folk capable of weaving aren't unfamiliar with receiving envy from those lacking a natural 3D printer. (Say *turf to cast)"
+ value = 2
+ mob_trait = TRAIT_WEBBING_ASPECT
+ gain_text = "You could easily spin a web."
+ lose_text = "Somehow, you've lost your ability to weave."
+ medical_record_text = "Patient has the ability to weave webs with naturally synthesized silk."
+
+/datum/quirk/floral_aspect
+ name = "Floral aspect (Emotes)"
+ desc = "(Podperson innate) Kudzu research isn't pointless, rapid photosynthesis technology is here! (Say *turf to cast)"
+ value = 2
+ mob_trait = TRAIT_FLORAL_ASPECT
+ gain_text = "You feel like you can grow vines."
+ lose_text = "Somehow, you've lost your ability to rapidly photosynthesize."
+ medical_record_text = "Patient can rapidly photosynthesize to grow vines."
+
+/datum/quirk/ash_aspect
+ name = "Ash aspect (Emotes)"
+ desc = "(Lizard innate) The ability to forge ash and flame, a mighty power - yet mostly used for theatrics. (Say *turf to cast)"
+ value = 2
+ mob_trait = TRAIT_ASH_ASPECT
+ gain_text = "There is a forge smouldering inside of you."
+ lose_text = "Somehow, you've lost your ability to breathe fire."
+ medical_record_text = "Patients possess a fire breathing gland commonly found in lizard folk."
diff --git a/modular_skyrat/master_files/icons/effects/overlay_effects.dmi b/modular_skyrat/master_files/icons/effects/overlay_effects.dmi
new file mode 100644
index 00000000000..58bacc0104a
Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/overlay_effects.dmi differ
diff --git a/modular_skyrat/master_files/icons/effects/turf_effects.dmi b/modular_skyrat/master_files/icons/effects/turf_effects.dmi
new file mode 100644
index 00000000000..2256c840a71
Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/turf_effects.dmi differ
diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi b/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi
new file mode 100644
index 00000000000..5cc9fb66b74
Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi differ
diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi b/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi
new file mode 100644
index 00000000000..1a1a917c184
Binary files /dev/null and b/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi differ
diff --git a/modular_skyrat/master_files/sound/effects/weave.ogg b/modular_skyrat/master_files/sound/effects/weave.ogg
new file mode 100644
index 00000000000..5a9d3e7d2ac
Binary files /dev/null and b/modular_skyrat/master_files/sound/effects/weave.ogg differ
diff --git a/modular_skyrat/master_files/sound/effects/wing_flap.ogg b/modular_skyrat/master_files/sound/effects/wing_flap.ogg
new file mode 100644
index 00000000000..2eda6d4ccb0
Binary files /dev/null and b/modular_skyrat/master_files/sound/effects/wing_flap.ogg differ
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
index 7309c192ada..d365b5608db 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
@@ -73,6 +73,10 @@
if(HS.hardsuit_tail_colors)
return FALSE
return TRUE
+ if(H.owned_turf) //we do a lil' emoting
+ var/list/used_in_turf = list("tail")
+ if(H.owned_turf.name in used_in_turf)
+ return TRUE
return FALSE
/datum/sprite_accessory/tails/none
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
index b0cda2ce0b9..0de965e9bd7 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
@@ -14,6 +14,10 @@
/datum/sprite_accessory/taur/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD)
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
return TRUE
+ if(H.owned_turf)
+ var/list/used_in_turf = list("tail")
+ if(H.owned_turf.name in used_in_turf)
+ return TRUE
return FALSE
/datum/sprite_accessory/taur/none
diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm b/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm
new file mode 100644
index 00000000000..4393cd76747
--- /dev/null
+++ b/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm
@@ -0,0 +1,79 @@
+/datum/emote
+ var/overlay_emote = 'modular_skyrat/master_files/icons/effects/overlay_effects.dmi'
+
+/datum/emote/living/sweatdrop
+ key = "sweatdrop"
+ key_third_person = "sweatdrops"
+
+/datum/emote/living/sweatdrop/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(iscarbon(user) || issilicon(user))
+ var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "sweatdrop", ABOVE_MOB_LAYER)
+ overlay.pixel_x = 10
+ overlay.pixel_y = 10
+ flick_overlay_static(overlay, user, 50)
+ playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg', 25, TRUE)
+
+/datum/emote/living/exclaim
+ key = "exclaim"
+ key_third_person = "exclaims"
+
+/datum/emote/living/exclaim/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(iscarbon(user) || issilicon(user))
+ var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "exclamation", ABOVE_MOB_LAYER)
+ overlay.pixel_x = 10
+ overlay.pixel_y = 28
+ flick_overlay_static(overlay, user, 50)
+ playsound(get_turf(user), 'sound/machines/chime.ogg', 25, TRUE)
+
+
+/datum/emote/living/realize
+ key = "realize"
+ key_third_person = "realizes"
+
+/datum/emote/living/realize/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(iscarbon(user) || issilicon(user))
+ var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "realize", ABOVE_MOB_LAYER)
+ overlay.pixel_y = 15
+ flick_overlay_static(overlay, user, 50)
+ playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/realize.ogg', 25, TRUE)
+
+/datum/emote/living/annoyed
+ key = "annoyed"
+ key_third_person = "is annoyed"
+
+/datum/emote/living/annoyed/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(iscarbon(user) || issilicon(user))
+ var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "annoyed", ABOVE_MOB_LAYER)
+ overlay.pixel_x = 10
+ overlay.pixel_y = 10
+ flick_overlay_static(overlay, user, 50)
+ playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg', 25, TRUE)
+
+/datum/emote/living/blush
+ key = "blush"
+ key_third_person = "blushes"
+
+/datum/emote/living/blush/run_emote(mob/living/carbon/human/user, params, type_override, intentional)
+ . = ..()
+ if(iscarbon(user))
+ var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "blush", ABOVE_MOB_LAYER)
+ flick_overlay_static(overlay, user, 50)
+ playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/blush.ogg', 25, TRUE)
+
+/datum/emote/living/glasses
+ key = "glasses"
+ key_third_person = "glasses"
+ message = "pushes up their glasses."
+
+/datum/emote/living/glasses/run_emote(mob/living/carbon/human/user, params, type_override, intentional)
+ . = ..()
+ var/obj/O = user.get_item_by_slot(ITEM_SLOT_EYES)
+ if(istype(O, /obj/item/clothing/glasses))
+ var/mutable_appearance/overlay = mutable_appearance(overlay_emote, "glasses", ABOVE_MOB_LAYER)
+ flick_overlay_static(overlay, user, 10)
+ else
+ return FALSE
diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm
new file mode 100644
index 00000000000..4c4cf68859e
--- /dev/null
+++ b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm
@@ -0,0 +1,215 @@
+var/current_turf
+
+/mob/living
+ var/obj/owned_turf
+ var/list/allowed_turfs = list()
+
+/datum/emote/living/mark_turf
+ key = "turf"
+ key_third_person = "turf"
+ cooldown = 4 SECONDS
+
+/datum/emote/living/mark_turf/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ var/mob/living/carbon/human/human_user = user
+
+ if(ishuman(user))
+ //feet
+ if(!(DIGITIGRADE in human_user.dna.species.species_traits) && !(human_user.dna.species.mutant_bodyparts["taur"]))
+ user.allowed_turfs += "footprint"
+
+ if((DIGITIGRADE in human_user.dna.species.species_traits) || human_user.dna.species.mutant_bodyparts["taur"])
+ user.allowed_turfs += list("pawprint", "hoofprint", "clawprint")
+
+ //species & taurs
+ if(islizard(user) || issynthliz(user) || HAS_TRAIT(user, TRAIT_ASH_ASPECT))
+ user.allowed_turfs += "smoke"
+ user.allowed_turfs -= list("pawprint", "hoofprint")
+
+ if(isplasmaman(user))
+ if(human_user.w_uniform && istype(human_user.w_uniform, /obj/item/clothing/under/plasmaman))
+ user.allowed_turfs += "holoseat"
+
+ if(isroundstartslime(user) || isslimeperson(user) || isjellyperson(user))
+ user.allowed_turfs += "slime"
+
+ if(isxenohybrid(user))
+ user.allowed_turfs += "xenoresin"
+
+ if(isinsect(user) || HAS_TRAIT(user, TRAIT_WEBBING_ASPECT))
+ user.allowed_turfs += "web"
+
+ if(isaquatic(user) || isakula(user) || HAS_TRAIT(user, TRAIT_WATER_ASPECT))
+ user.allowed_turfs += "water"
+
+ if(ispodperson(user) || ispodweak(user) || HAS_TRAIT(user, TRAIT_FLORAL_ASPECT))
+ user.allowed_turfs += "vines"
+
+ if(isipc(user) || issynthanthro(user) || issynthhuman(user) || issynthliz(user))
+ if(human_user.dna.species.mutant_bodyparts["taur"])
+ user.allowed_turfs += "holobed" //taurs get the holobed instead
+ else
+ user.allowed_turfs += "holoseat"
+
+ //wings
+ if(istype(user.getorganslot(ORGAN_SLOT_WINGS), /obj/item/organ/wings/moth))
+ user.allowed_turfs += "dust" //moth's dust ✨
+
+ //body parts
+ if(istype(user.getorganslot(ORGAN_SLOT_TAIL), /obj/item/organ/tail))
+ var/list/fluffy_tails = list("Tamamo Kitsune Tails", "Sergal", "Fox", "Fox (Alt 2)", "Fox (Alt 3)", "Fennec", "Red Panda", "Husky", "Skunk", "Lunasune", "Squirrel", "Wolf", "Stripe", "Kitsune", "Leopard", "Bat (Long)")
+ if(human_user.dna.species.mutant_bodyparts["tail"][MUTANT_INDEX_NAME] in fluffy_tails)
+ user.allowed_turfs += "tails"
+
+ if(human_user.dna.species.mutant_bodyparts["taur"])
+ var/list/snake_taurs = list("Naga", "Cybernetic Naga")
+ if(human_user.dna.species.mutant_bodyparts["taur"][MUTANT_INDEX_NAME] in snake_taurs)
+ user.allowed_turfs -= list("pawprint", "hoofprint", "clawprint")
+ if(!(human_user.wear_suit && istype(human_user.wear_suit, /obj/item/clothing/suit/space/hardsuit)))
+ user.allowed_turfs += "constrict"
+
+ //clothing
+ var/obj/item/shoes = user.get_item_by_slot(ITEM_SLOT_FEET)
+ if(istype(shoes, /obj/item/clothing/shoes))
+ if(!human_user.dna.species.mutant_bodyparts["taur"])
+ user.allowed_turfs += "shoeprint"
+
+ if(issilicon(user))
+ user.allowed_turfs += list("holoseat", "holobed", "borgmat")
+
+
+ var/list/display_turf = list()
+ for(var/choice in user.allowed_turfs)
+
+ var/datum/radial_menu_choice/option = new
+ option.image = image(icon = 'modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi', icon_state = initial(choice))
+
+ display_turf[initial(choice)] = option
+
+ sortList(display_turf)
+ var/chosen_turf = show_radial_menu(user, user, display_turf, custom_check = CALLBACK(src, .proc/check_menu, user))
+
+ if(QDELETED(src) || QDELETED(user) || !chosen_turf)
+ return FALSE
+
+ if(do_after(user,10))
+ current_turf = chosen_turf
+
+ var/obj/turf_icon = /obj/structure/mark_turf
+ user.owned_turf = new turf_icon(get_turf(user))
+ user.owned_turf.dir = user.dir
+
+ if(ishuman(user))
+ human_user.update_mutant_bodyparts()
+
+ var/list/DNA_trail = list("shoeprint", "footprint", "pawprint", "hoofprint", "clawprint")
+ if(current_turf in DNA_trail) //These turfs leave clues of their owner
+ user.owned_turf.add_fingerprint(user)
+
+
+ var/list/colorable = list("dust", "slime", "vines", "footprint", "pawprint", "hoofprint", "clawprint")
+ if(current_turf in colorable) //These turfs are simply colored after their owner's primary
+ if(ishumanbasic(user) || ishumanoid(user))
+ user.owned_turf.color = "#" + human_user.dna.features["skin_color"]
+ else
+ user.owned_turf.color = "#" + human_user.dna.features["mcolor"]
+
+
+ var/list/body_part = list("tails", "constrict")
+ if(current_turf in body_part) //These turfs can be a body part and need color/size applied
+ var/key = null
+
+ var/list/tail_emotes = list("tails")
+ if(current_turf in tail_emotes)
+ key = "tail"
+ var/list/taur_emotes = list("constrict")
+ if(current_turf in taur_emotes)
+ key = "taur"
+
+ //coloring
+ var/list/finished_list = list()
+ var/list/color_list = human_user.dna.species.mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] //identify color
+ var/datum/sprite_accessory/sprite_type = GLOB.sprite_accessories[key][human_user.dna.species.mutant_bodyparts[key][MUTANT_INDEX_NAME]] //identify type
+
+ switch(sprite_type.color_src)
+ if(USE_MATRIXED_COLORS)
+ finished_list += ReadRGB("[color_list[1]]0")
+ finished_list += ReadRGB("[color_list[2]]0")
+ finished_list += ReadRGB("[color_list[3]]0")
+ if(USE_ONE_COLOR)
+ finished_list += ReadRGB("[color_list[1]]0")
+ finished_list += ReadRGB("[color_list[1]]0")
+ finished_list += ReadRGB("[color_list[1]]0")
+
+ finished_list += list(0,0,0,255)
+ for(var/index in 1 to finished_list.len)
+ finished_list[index] /= 255
+
+ user.owned_turf.color = finished_list
+ if(isroundstartslime(user) || isslimeperson(user) || isjellyperson(user))
+ user.owned_turf.alpha = 130
+
+ //scaling
+ var/atom/movable/owned_turf = user.owned_turf
+ var/change_multiplier = human_user.dna.features["body_size"] / BODY_SIZE_NORMAL
+ var/translate = ((change_multiplier-1) * 32)/2
+ owned_turf.transform = owned_turf.transform.Scale(change_multiplier)
+ owned_turf.transform = owned_turf.transform.Translate(0, translate)
+ owned_turf.appearance_flags = PIXEL_SCALE
+
+ RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/turf_owner, override = TRUE)
+
+ return ..()
+
+/datum/emote/living/mark_turf/select_message_type(mob/living/user, intentional)
+ . = ..()
+
+ if(current_turf == "web")
+ user.spin(8, 1) //Ssspin a web
+
+ /* Commented out to preserve text.
+ Voter decision to exclude pre-determined messages, can still use this area to apply animation onto the user!
+
+ . = "neatly spins a web beneath them."
+ if("water")
+ . = "submerges their surroundings in a pool of water."
+ if("vines")
+ . = "sprouts vines reaching down beneath them."
+ if("dust")
+ . = "flutters their wings, scattering their dust around."
+ if("smoke")
+ . = "expirates a mist of ashes around them."
+ if("slime")
+ . = "splits their gel, forming an oozing shape."
+ if("xenoresin")
+ . = "secretes thick resin, covering the ground beneath them."
+ if("holoseat")
+ . = "artificially summons a seat beneath them."
+ if("holobed")
+ . = "artificially summons a bed beneath them."
+ if("borgmat")
+ . = "dispenses a soft mat, rolling it out beneath them."
+ */
+
+
+
+
+ current_turf = null
+ LAZYCLEARLIST(user.allowed_turfs)
+
+
+/datum/emote/living/mark_turf/proc/check_menu(mob/living/user)
+ if(user.owned_turf != null)
+ return FALSE
+ if(isspaceturf(get_turf(user)))
+ return FALSE
+ if(user.buckled)
+ return FALSE
+ else
+ return TRUE
+
+/datum/emote/living/mark_turf/proc/turf_owner(mob/living/user)
+ UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
+
+ var/obj/owned_turf = user.owned_turf
+ INVOKE_ASYNC(owned_turf, /obj/structure/mark_turf/proc/turf_check, user)
diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm
new file mode 100644
index 00000000000..d26e223e56c
--- /dev/null
+++ b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm
@@ -0,0 +1,192 @@
+/obj/structure/mark_turf
+ name = "turf"
+ icon = 'modular_skyrat/master_files/icons/effects/turf_effects.dmi'
+ desc = "It's turf." //Debug stuff, won't be seen
+ anchored = TRUE
+ density = FALSE
+ max_integrity = 15
+
+/obj/structure/mark_turf/Initialize()
+ . = ..()
+
+ switch(current_turf)
+ if("web")
+ name = "hand-sewn web"
+ desc = "It's a sticky web."
+ icon_state = pick("stickyweb1", "stickyweb2")
+ playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/weave.ogg', 25, TRUE)
+
+ if("vines")
+ name = "sprouted vines"
+ desc = "It's an entanglement of vines."
+ icon_state = pick("kudzu1", "kudzu1", "kudzu3")
+ playsound(get_turf(src), 'sound/creatures/venus_trap_hurt.ogg', 25, TRUE)
+
+
+ if("water")
+ name = "puddle of water"
+ desc = "It's a patch of water."
+ icon_state = "water"
+ src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "water_top", ABOVE_MOB_LAYER))
+ flick_overlay_static(image('modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi', "splash", ABOVE_MOB_LAYER), src, 20)
+ playsound(get_turf(src), 'modular_skyrat/sound/effects/watersplash.ogg', 25, TRUE)
+
+ if("smoke")
+ name = "blazing mist"
+ desc = "It's a storm of smoke."
+ icon_state = "smoke"
+ src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "smoke_top", ABOVE_MOB_LAYER))
+ playsound(get_turf(src), 'sound/effects/wounds/sizzle2.ogg', 25, TRUE)
+
+ if("xenoresin")
+ name = "resin"
+ desc = "Looks like some kind of thick resin."
+ icon_state = "xenoresin"
+ playsound(get_turf(src), 'sound/effects/splat.ogg', 25, TRUE)
+
+ if("holobed")
+ name = "physical hologram"
+ desc = "It's a hologram of a pet bed."
+ icon_state = "holobed"
+ playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE)
+
+ if("holoseat")
+ name = "physical hologram"
+ desc = "It's a hologram of a barstool."
+ icon_state = "holoseat"
+ src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "holoseat_top", ABOVE_MOB_LAYER))
+ playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE)
+
+ if("slime")
+ name = "pile of oozing slime"
+ desc = "It's just a bunch of slime."
+ alpha = 155
+ playsound(get_turf(src), 'sound/misc/soggy.ogg', 25, TRUE)
+ switch(rand(1,1000))
+ if(-INFINITY to 400)
+ icon_state = "slimeobj1"
+ src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj1_top", ABOVE_MOB_LAYER))
+ if(400 to 800)
+ icon_state = "slimeobj2"
+ src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj2_top", ABOVE_MOB_LAYER))
+ if(800 to 980)
+ icon_state = "slimeobj3"
+ src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj3_top", ABOVE_MOB_LAYER))
+ if(980 to INFINITY)
+ name = "slime bust" //rare obj/item/statuebust
+ desc = "A priceless slime bust, the kind that belongs in a museum."
+ icon_state = "slimeobj4"
+ AddElement(/datum/element/art, GREAT_ART)
+ else
+ return
+
+ if("dust")
+ name = "cloud of dust"
+ desc = "It's a cloud of glittering moth's dust."
+ icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "dust"
+ pixel_x = -16
+ src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "dust_top", ABOVE_MOB_LAYER))
+ playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/wing_flap.ogg', 25, TRUE)
+
+ if("borgmat")
+ name = "soft-foam mat"
+ desc = "It's a rolled out mat, doesn't include wireless charging."
+ icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "borgmat"
+ pixel_x = -16
+ pixel_y = -4
+ playsound(get_turf(src), 'sound/items/handling/taperecorder_pickup.ogg', 25, TRUE)
+
+ //bodyparts
+ if("tails")
+ name = "tail"
+ desc = "It's a fluffy tail."
+ icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "tails"
+ pixel_x = -16 //correcting the offset for 64
+ var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "tails_top", ABOVE_MOB_LAYER)
+ overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
+ src.add_overlay(overlay)
+ playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 25, TRUE)
+
+ if("constrict")
+ name = "tail"
+ desc = "It's a scaly tail."
+ icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "naga"
+ pixel_x = -16
+ var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "naga_top", ABOVE_MOB_LAYER)
+ overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
+ src.add_overlay(overlay)
+ playsound(get_turf(src), 'modular_skyrat/modules/emotes/sound/emotes/hiss.ogg', 25, TRUE)
+
+ //prints
+ if("pawprint")
+ name = "pawprint"
+ desc = "It's a pawprint left on the ground."
+ icon_state = pick("pawprint", "pawprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+
+ if("hoofprint")
+ name = "hoofprint"
+ desc = "It's a hoofprint left on the ground."
+ icon_state = pick("hoofprint", "hoofprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+ if("footprint")
+ name = "footprint"
+ desc = "It's a footprint left on the ground."
+ icon_state = pick("footprint", "footprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+
+ if("clawprint")
+ name = "clawprint"
+ desc = "It's a clawprint left on the ground."
+ icon_state = pick("clawprint", "clawprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+
+ if("shoeprint")
+ name = "shoeprint"
+ desc = "It's a shoeprint left on the ground."
+ icon_state = pick("shoeprint", "shoeprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/floor1.ogg',
+ 'sound/effects/footstep/floor2.ogg',
+ 'sound/effects/footstep/floor3.ogg',
+ 'sound/effects/footstep/floor4.ogg',
+ 'sound/effects/footstep/floor5.ogg'), 50, TRUE)
+
+ else
+ return
+
+/obj/structure/mark_turf/proc/turf_check(mob/living/user) //This gets called when a player leaves their turf
+ var/list/no_trail = list("tail", "constrict")
+ var/list/long_trail = list("pawprint", "hoofprint", "clawprint", "footprint", "shoeprint")
+
+ if(user.owned_turf.name in no_trail)
+ QDEL_NULL(src)
+ if(user.owned_turf.name in long_trail)
+ QDEL_IN(src, 150 SECONDS)
+ user.owned_turf = null
+ else
+ QDEL_IN(src, 15 SECONDS)
+ user.owned_turf = null
+
+ if(ishuman(user))
+ var/mob/living/carbon/human/human_user = user
+ human_user.update_mutant_bodyparts()
diff --git a/modular_skyrat/modules/emotes/readme.md b/modular_skyrat/modules/emotes/readme.md
index c9edafcce4e..c4110c97c7a 100644
--- a/modular_skyrat/modules/emotes/readme.md
+++ b/modular_skyrat/modules/emotes/readme.md
@@ -1,6 +1,7 @@
https://github.com/Skyrat-SS13/Skyrat-tg/pull/892
https://github.com/Skyrat-SS13/Skyrat-tg/pull/1925
https://github.com/Skyrat-SS13/Skyrat-tg/pull/2320
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/6259
## Title: All the emotes.
@@ -49,4 +50,7 @@ modular_skyrat/modules/emotes/code/emotes.dm | `#define EMOTE_DELAY`
- refactoring code
- adjusting existing sound files
- adding more emotes
+- TheOOZ Additional emotes
+ - overlay emotes
+ - turf emotes
- VOREstation - a couple of the soundfiles and emote texts
diff --git a/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg b/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg
new file mode 100644
index 00000000000..d303a8815a1
Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg differ
diff --git a/modular_skyrat/modules/emotes/sound/emotes/blush.ogg b/modular_skyrat/modules/emotes/sound/emotes/blush.ogg
new file mode 100644
index 00000000000..482a2a8ecda
Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/blush.ogg differ
diff --git a/modular_skyrat/modules/emotes/sound/emotes/realize.ogg b/modular_skyrat/modules/emotes/sound/emotes/realize.ogg
new file mode 100644
index 00000000000..c88593b329f
Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/realize.ogg differ
diff --git a/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg b/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg
new file mode 100644
index 00000000000..3c5a8ae80d1
Binary files /dev/null and b/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index daa466ffb9d..30dc4421534 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4110,6 +4110,9 @@
#include "modular_skyrat\modules\emotes\code\scream_emote.dm"
#include "modular_skyrat\modules\emotes\code\silicon_emotes.dm"
#include "modular_skyrat\modules\emotes\code\synth_emotes.dm"
+#include "modular_skyrat\modules\emotes\code\additionalemotes\overlay_emote.dm"
+#include "modular_skyrat\modules\emotes\code\additionalemotes\turf_emote.dm"
+#include "modular_skyrat\modules\emotes\code\additionalemotes\turf_list.dm"
#include "modular_skyrat\modules\encounters\enclave_pirates.dm"
#include "modular_skyrat\modules\ERT_Factions\FTU\code\items.dm"
#include "modular_skyrat\modules\ERT_Factions\FTU\code\projectiles.dm"