diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index c69349b1ea65..0961b0876e3f 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -104,6 +104,8 @@
#define TRAIT_PHOTOGRAPHER "photographer"
#define TRAIT_MUSICIAN "musician"
#define TRAIT_LIGHT_DRINKER "light_drinker"
+#define TRAIT_EMPATH "empath"
+#define TRAIT_FRIENDLY "friendly"
// common trait sources
#define TRAIT_GENERIC "generic"
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index 35dfaa4e3db2..f28b953901f2 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -149,7 +149,6 @@
timeout = 30
hidden = TRUE
-
/datum/mood_event/notcreepingsevere//not hidden since it's so severe
description = "THEY NEEEEEEED OBSESSIONNNN!!\n"
mood_change = -30
@@ -176,6 +175,14 @@
description = "Bags never sit right on my back, this hurts like hell!\n"
mood_change = -15
+/datum/mood_event/sad_empath
+ description = "Someone seems upset...\n"
+ mood_change = -2
+ timeout = 600
+
+/datum/mood_event/sad_empath/add_effects(mob/sadtarget)
+ description = "[sadtarget.name] seems upset...\n"
+
//These are unused so far but I want to remember them to use them later
/datum/mood_event/cloned_corpse
description = "I recently saw my own corpse...\n"
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index ba1478e55695..7d7adc3d7d37 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -3,6 +3,22 @@
mood_change = 1
timeout = 1200
+/datum/mood_event/betterhug
+ description = "Someone was very nice to me.\n"
+ mood_change = 3
+ timeout = 3000
+
+/datum/mood_event/betterhug/add_effects(mob/friend)
+ description = "[friend.name] was very nice to me.\n"
+
+/datum/mood_event/besthug
+ description = "Someone is great to be around, they make me feel so happy!\n"
+ mood_change = 5
+ timeout = 3000
+
+/datum/mood_event/besthug/add_effects(mob/friend)
+ description = "[friend.name] is great to be around, [friend.p_they()] makes me feel so happy!\n"
+
/datum/mood_event/arcade
description = "I beat the arcade game!\n"
mood_change = 3
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index 88e6668dde42..74a840709bc8 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -35,6 +35,14 @@
lose_text = "You no longer feel like drinking would ease your pain."
medical_record_text = "Patient has unusually efficient liver metabolism and can slowly regenerate wounds by drinking alcoholic beverages."
+/datum/quirk/empath
+ name = "Empath"
+ desc = "Whether it's a sixth sense or careful study of body language, it only takes you a quick glance at someone to understand how they feel."
+ value = 2
+ mob_trait = TRAIT_EMPATH
+ gain_text = "You feel in tune with those around you."
+ lose_text = "You feel isolated from others."
+
/datum/quirk/freerunning
name = "Freerunning"
desc = "You're great at quick moves! You can climb tables more quickly."
@@ -43,6 +51,15 @@
gain_text = "You feel lithe on your feet!"
lose_text = "You feel clumsy again."
+/datum/quirk/friendly
+ name = "Friendly"
+ desc = "You give the best hugs, especially when you're in the right mood."
+ value = 1
+ mob_trait = TRAIT_FRIENDLY
+ gain_text = "You want to hug someone."
+ lose_text = "You no longer feel compelled to hug others."
+ mood_quirk = TRUE
+
/datum/quirk/jolly
name = "Jolly"
desc = "You sometimes just feel happy, for no reason at all."
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index c23d9688d12a..12f6f43c85c4 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -273,6 +273,12 @@
M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \
"You hug [src] to make [p_them()] feel better!")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug)
+ if(M.has_trait(TRAIT_FRIENDLY))
+ GET_COMPONENT_FROM(mood, /datum/component/mood, M)
+ if (mood.sanity >= SANITY_GREAT)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/besthug, M)
+ else if (mood.sanity >= SANITY_DISTURBED)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/betterhug, M)
for(var/datum/brain_trauma/trauma in M.get_traumas())
trauma.on_hug(M, src)
AdjustStun(-60)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 255bceefdb9b..b25e94e9b815 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -1,4 +1,4 @@
-/mob/living/carbon/human/examine(mob/user) //User is the person being examined
+/mob/living/carbon/human/examine(mob/user)
//this is very slightly better than it was because you can use it more places. still can't do \his[src] though.
var/t_He = p_they(TRUE)
var/t_His = p_their(TRUE)
@@ -258,6 +258,22 @@
if(91.01 to INFINITY)
msg += "[t_He] [t_is] a shitfaced, slobbering wreck.\n"
+ if(user.has_trait(TRAIT_EMPATH) && !appears_dead && (src != user))
+ if (a_intent != INTENT_HELP)
+ msg += "[t_He] seem[p_s()] to be on guard.\n"
+ if (getOxyLoss() >= 10)
+ msg += "[t_He] seem[p_s()] winded.\n"
+ if (getToxLoss() >= 10)
+ msg += "[t_He] seem[p_s()] sickly.\n"
+ GET_COMPONENT_FROM(mood, /datum/component/mood, src)
+ if(mood.sanity <= SANITY_DISTURBED)
+ msg += "[t_He] seem[p_s()] distressed.\n"
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "empath", /datum/mood_event/sad_empath, src)
+ if (has_trait(TRAIT_BLIND))
+ msg += "[t_He] appear[p_s()] to be staring off into space.\n"
+ if (has_trait(TRAIT_DEAF))
+ msg += "[t_He] appear[p_s()] to not be responding to noises.\n"
+
msg += ""
if(!appears_dead)