diff --git a/code/datums/quirks/negative.dm b/code/datums/quirks/negative.dm
index 808f28d88fe..5bdb6854e4b 100644
--- a/code/datums/quirks/negative.dm
+++ b/code/datums/quirks/negative.dm
@@ -750,6 +750,7 @@
/datum/quirk/bad_touch/proc/uncomfortable_touch()
SIGNAL_HANDLER
+ new /obj/effect/temp_visual/annoyed(quirk_holder.loc)
var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood)
if(mood.sanity <= SANITY_NEUTRAL)
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "bad_touch", /datum/mood_event/very_bad_touch)
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
index bc09eb7225b..8505730cd56 100644
--- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -391,6 +391,18 @@
pixel_y = rand(-4,4)
animate(src, pixel_y = pixel_y + 32, alpha = 0, time = 25)
+/obj/effect/temp_visual/annoyed
+ name = "annoyed"
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "annoyed"
+ duration = 25
+
+/obj/effect/temp_visual/annoyed/Initialize(mapload)
+ . = ..()
+ pixel_x = rand(-4,0)
+ pixel_y = rand(8,12)
+ animate(src, pixel_y = pixel_y + 16, alpha = 0, time = duration)
+
/obj/effect/temp_visual/love_heart
name = "love heart"
icon = 'icons/effects/effects.dmi'
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 59ab12447ab..12dc2a87180 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -450,6 +450,9 @@
null, "You hear a soft patter.", DEFAULT_MESSAGE_RANGE, list(M, src))
to_chat(M, "You give [src] a pat on the head to make [p_them()] feel better!")
to_chat(src, "[M] gives you a pat on the head to make you feel better! ")
+
+ if(HAS_TRAIT(src, TRAIT_BADTOUCH))
+ to_chat(M, "[src] looks visibly upset as you pat [p_them()] on the head.")
else
SEND_SIGNAL(src, COMSIG_CARBON_HUGGED, M)
@@ -489,6 +492,9 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/besthug, M)
else if (hugger_mood.sanity >= SANITY_DISTURBED)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/betterhug, M)
+
+ if(HAS_TRAIT(src, TRAIT_BADTOUCH))
+ to_chat(M, "[src] looks visibly upset as you hug [p_them()].")
AdjustStun(-60)
AdjustKnockdown(-60)
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 4df910d6ec5..9a5874954af 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ