diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 94606273befe5f..fd3d1fc0a27db9 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -59,6 +59,8 @@
#define TRAIT_SKITTISH "skittish"
#define TRAIT_POOR_AIM "poor_aim"
#define TRAIT_PROSOPAGNOSIA "prosopagnosia"
+#define TRAIT_DOG_PERSON "dog_person" //you like dogs more than cats!
+#define TRAIT_CAT_PERSON "cat_person" //you like cats more than dogs!
// common trait sources
#define TRAIT_GENERIC "generic"
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index 54eb74f10f7c50..a075ffa6e8b8a1 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -23,6 +23,31 @@
mood_change = 3
timeout = 3000
+/datum/mood_event/pet_corgi_dogperson
+ description = "WHO'S A GOOD BOY? IS IT YOU? ARE YOU THE GOOD BOY???\n"
+ mood_change = 5
+ timeout = 3000
+
+/datum/mood_event/pet_corgi_catperson
+ description = "Hehe, dogs are cute.\n"
+ mood_change = 1
+ timeout = 3000
+
+/datum/mood_event/pet_cat
+ description = "I pet a cat, and it didn't even bite me!\n"
+ mood_change = 3
+ timeout = 3000
+
+/datum/mood_event/pet_cat_catperson
+ description = "I pet a cat and it was FLUFFY.\n"
+ mood_change = 5
+ timeout = 3000
+
+/datum/mood_event/pet_cat_dogperson
+ description = "Are all cats this content to laze around?\n" //yes.
+ mood_change = 1
+ timeout = 3000
+
/datum/mood_event/honk
description = "Maybe clowns aren't so bad after all. Honk!\n"
mood_change = 2
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index 5b0fbefe107c26..302ec42ac306c6 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -12,6 +12,14 @@
+/datum/trait/cat_person
+ name = "Cat Person"
+ desc = "You are a firm believer in the theory that cats are the fluffiest animal in the universe."
+ value = 0
+ mob_trait = TRAIT_CAT_PERSON
+
+
+
/datum/trait/deviant_tastes
name = "Deviant Tastes"
desc = "You dislike food that most people enjoy, and find delicious what they don't."
@@ -34,6 +42,14 @@
+/datum/trait/dog_person
+ name = "Dog Person"
+ desc = "You get along very well with dogs. You love them SO MUCH."
+ value = 0
+ mob_trait = TRAIT_DOG_PERSON
+
+
+
/datum/trait/monochromatic
name = "Monochromacy"
desc = "You suffer from full colorblindness, and perceive nearly the entire world in blacks and whites."
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 75e7b668ea5eae..bfb73023373e23 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -234,11 +234,20 @@
if("harm")
wuv(-1, M)
-/mob/living/simple_animal/pet/cat/proc/wuv(change, mob/M)
+/mob/living/simple_animal/pet/cat/proc/wuv(change, mob/living/M)
if(change)
if(change > 0)
if(M && stat != DEAD)
new /obj/effect/temp_visual/heart(loc)
+ if(M.has_trait(TRAIT_CAT_PERSON))
+ if(M.has_trait(TRAIT_DOG_PERSON))
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_cat)
+ else
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_cat_catperson)
+ else if(M.has_trait(TRAIT_DOG_PERSON))
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_cat_dogperson)
+ else
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_cat)
emote("me", 1, "purrs!")
else
if(M && stat != DEAD)
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 90532829dfc999..b9eab0cf389c39 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -220,7 +220,7 @@
//Many hats added, Some will probably be removed, just want to see which ones are popular.
// > some will probably be removed
-/mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user)
+/mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/living/user)
if(istype(item_to_add, /obj/item/grenade/plastic)) // last thing he ever wears, I guess
item_to_add.afterattack(src,user,1)
@@ -232,7 +232,15 @@
return
if(!item_to_add)
user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.")
- user.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
+ if(user.has_trait(TRAIT_DOG_PERSON))
+ if(user.has_trait(TRAIT_CAT_PERSON))
+ user.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi)
+ else
+ user.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi_dogperson)
+ else if(user.has_trait(TRAIT_CAT_PERSON))
+ user.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi_catperson)
+ else
+ user.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi)
return
if(user && !user.temporarilyRemoveItemFromInventory(item_to_add))
@@ -609,13 +617,21 @@
if("harm")
wuv(-1,M)
-/mob/living/simple_animal/pet/dog/proc/wuv(change, mob/M)
+/mob/living/simple_animal/pet/dog/proc/wuv(change, mob/living/M)
if(change)
if(change > 0)
if(M && stat != DEAD) // Added check to see if this mob (the dog) is dead to fix issue 2454
new /obj/effect/temp_visual/heart(loc)
emote("me", 1, "yaps happily!")
- M.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
+ if(M.has_trait(TRAIT_DOG_PERSON))
+ if(M.has_trait(TRAIT_CAT_PERSON))
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi)
+ else
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi_dogperson)
+ else if(M.has_trait(TRAIT_CAT_PERSON))
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi_catperson)
+ else
+ M.SendSignal(COMSIG_ADD_MOOD_EVENT, "wuv", /datum/mood_event/pet_corgi)
else
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
emote("me", 1, "growls!")