diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 18ecc5942c..2bc634bb61 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -289,6 +289,13 @@
#define TRAIT_WATER_SPONGE "water_sponge"
#define TRAIT_FATROUSAL "fatrousal"
+//GS13 Port
+#define TRAIT_HEADPAT_SLUT "headpat_slut"
+#define TRAIT_NEVER_CLONE "donotclone"
+#define TRAIT_HEAT "heat"
+#define TRAIT_DISTANT "headpat_hater"
+#define TRAIT_CUM_PLUS "cum_plus"
+
// mobility flag traits
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
// BUT FOR NOW, THESE ARE HOOKED TO DO update_mobility() VIA COMSIG IN living_mobility.dm
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index 680d48f8bf..22cff78624 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -335,3 +335,9 @@
description = "Those darn savages!\n"
mood_change = -5
timeout = 2 MINUTES
+
+//GS13 Port
+/datum/mood_event/lewd_headpat
+ description = "I love headpats so much!\n"
+ mood_change = 3
+ timeout = 2 MINUTES
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index 5b00d2e71e..e0793e952a 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -190,7 +190,7 @@
// Get targets
var/obj/item/organ/eyes/old_eyes = quirk_holder.getorganslot(ORGAN_SLOT_EYES)
var/obj/item/organ/eyes/robotic/glow/new_eyes = new
-
+
// Replace eyes
qdel(old_eyes)
new_eyes.Insert(quirk_holder)
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 6a68334c85..659fccdb1e 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -464,6 +464,15 @@ GLOBAL_LIST_EMPTY(family_heirlooms)
lose_text = "Your mind finally feels calm."
medical_record_text = "Patient's mind is in a vulnerable state, and cannot recover from traumatic events."
+//GS13 Port
+//Port from Shadow
+/datum/quirk/donotclone
+ name = "DNC"
+ desc = "You have filed a Do Not Clone order, stating that you do not wish to be cloned. You can still be revived by other means."
+ value = -2
+ mob_trait = TRAIT_NEVER_CLONE
+ medical_record_text = "Patient has a DNC (Do not clone) order on file, and cannot be cloned as a result."
+
/datum/quirk/blindness
name = "Blind"
desc = "You are completely blind, nothing can counteract this."
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index e5a41c7b7b..20caf514ea 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -162,6 +162,7 @@
gain_text = "You feel like munching on a can of soda."
lose_text = "You no longer feel like you should be eating trash."
mob_trait = TRAIT_TRASHCAN
+ medical_record_text = "Patient has been observed eating inedible garbage."
// GS13 EDIT START
/datum/quirk/trashcan/add()
@@ -188,3 +189,59 @@
/datum/quirk/dullahan/post_add()
quirk_holder.AddComponent(/datum/component/dullahan)
+
+//GS13 Port
+/datum/quirk/inheat
+ name = "In Heat"
+ desc = "Your system burns with the desire to be bred, your body will betray you and alert others' to your desire when examining you. Satisfying your lust will make you happy, but ignoring it may cause you to become sad and needy."
+ value = 0
+ mob_trait = TRAIT_HEAT
+ gain_text = "You body burns with the desire to be bred."
+ lose_text = "You feel more in control of your body and thoughts."
+
+/datum/quirk/headpat_slut
+ name = "Headpat Slut"
+ desc = "You like headpats, alot, maybe even a little bit too much. Headpats give you a bigger mood boost and cause arousal"
+ mob_trait = TRAIT_HEADPAT_SLUT
+ value = 0
+ medical_record_text = "Patient seems overly affectionate."
+
+/datum/quirk/headpat_hater
+ name = "Distant"
+ desc = "You don't seem to show much care for being touched. Whether it's because you're reserved or due to self control, you won't wag your tail outside of your own control should you possess one."
+ mob_trait = TRAIT_DISTANT
+ value = 0
+ medical_record_text = "Patient cares little with or dislikes being touched."
+
+/datum/quirk/universal_diet
+ name = "Universal diet"
+ desc = "You are fine with eating just about anything normally edible, you have no strong dislikes in food. Toxic food will still hurt you, though."
+ value = 0
+ gain_text = "You feel like you can eat any food type."
+ lose_text = "You start to dislike certain food types again."
+ medical_record_text = "Patient reports no strong dietary dislikes."
+
+/datum/quirk/universal_diet/add()
+ var/mob/living/carbon/human/H = quirk_holder
+ var/datum/species/species = H.dna.species
+ species.disliked_food = null
+
+/datum/quirk/universal_diet/remove()
+ var/mob/living/carbon/human/H = quirk_holder
+ if(H)
+ var/datum/species/species = H.dna.species
+ species.disliked_food = initial(species.disliked_food)
+
+/datum/quirk/fatness_liker //GS13
+ name = "Fat Affinity"
+ desc = "You like being fat, alot, maybe even a little bit too much. Being fat gives you a bigger mood boost."
+ mob_trait = TRAIT_FAT_GOOD
+ value = 0
+ medical_record_text = "Patient seems overly content with gaining weight."
+
+/datum/quirk/fatness_hater //GS13
+ name = "Fat Aversion"
+ desc = "You dislike being fat. Being fat brings your mood down, alot."
+ mob_trait = TRAIT_FAT_BAD
+ value = 0
+ medical_record_text = "Patient seems distressed by gaining weight."
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index e9bdce6679..9b2d5b6f5d 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -413,6 +413,11 @@
if(!can_scan(dna, mob_occupant, FALSE, has_bank_account))
return
+ if(HAS_TRAIT(mob_occupant, TRAIT_NEVER_CLONE))
+ scantemp = "Subject has an active DNC record on file. Unable to clone."
+ playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
+ return
+
var/datum/data/record/R = new()
if(dna.species)
// We store the instance rather than the path, because some
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index e6aa6abf45..ce240c0e35 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -297,19 +297,39 @@
else if(check_zone(M.zone_selected) == BODY_ZONE_HEAD)
var/datum/species/S
if(ishuman(src))
+ var/mob/living/carbon/human/H = src
S = dna.species
- M.visible_message("[M] gives [src] a pat on the head to make [p_them()] feel better!", \
- "You give [src] a pat on the head to make [p_them()] feel better!", target = src,
- target_message = "[M] gives you a pat on the head to make you feel better!")
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat)
+ if(HAS_TRAIT(src, TRAIT_DISTANT)) //No mood buff since you're not really liking it.
+ M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better! They seem annoyed...", \
+ "You give [H] a pat on the head to make [p_them()] feel better! They seem annoyed as they're now glaring towards you...")
+ H.adjustArousal(-5) //Why are you touching me?
+ if(prob(5))
+ M.visible_message("[H] quickly twists [M]\'s arm!", \
+ "Your arm gets twisted in [H]\'s grasp. Maybe you should have taken the hint...")
+ playsound(get_turf(H), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ M.emote("scream")
+ M.dropItemToGround(M.get_active_held_item())
+ M.apply_damage(50, STAMINA, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
+ M.Knockdown(60)//STOP TOUCHING ME! For those spam head pat individuals
+ else if(HAS_TRAIT(H, TRAIT_HEADPAT_SLUT))
+ M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better! They seem incredibly pleased!", \
+ "You give [H] a pat on the head to make [p_them()] feel better! They seem to like it way too much")
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "lewd_headpat", /datum/mood_event/lewd_headpat)
+ H.adjustArousal(5) //Headpats are hot af
+ else
+ M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better!", \
+ "You give [H] a pat on the head to make [p_them()] feel better!")
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat)
+
friendly_check = TRUE
- if(!(client?.prefs.cit_toggles & NO_AUTO_WAG))
- if(S?.can_wag_tail(src) && !dna.species.is_wagging_tail())
- var/static/list/many_tails = list("tail_human", "tail_lizard", "mam_tail")
- for(var/T in many_tails)
- if(S.mutant_bodyparts[T] && dna.features[T] != "None")
- emote("wag")
+ if(!(HAS_TRAIT(src, TRAIT_DISTANT)))
+ if(!(client?.prefs.cit_toggles & NO_AUTO_WAG))
+ if(S?.can_wag_tail(src) && !dna.species.is_wagging_tail())
+ var/static/list/many_tails = list("tail_human", "tail_lizard", "mam_tail")
+ for(var/T in many_tails)
+ if(S.mutant_bodyparts[T] && dna.features[T] != "None")
+ emote("wag")
else if(check_zone(M.zone_selected) == BODY_ZONE_R_ARM || check_zone(M.zone_selected) == BODY_ZONE_L_ARM)
if((pulling == M) && (grab_state == GRAB_PASSIVE))
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index d727d9cfff..4aeb1daa86 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -107,6 +107,11 @@
if(wear_id)
. += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)]."
+ //GS13 Port
+ //Heat Detection
+ //if(breedable)
+ if(HAS_TRAIT(src, TRAIT_HEAT))
+ . += "[t_He] [t_is] currently in heat."
//Status effects
var/effects_exam = status_effect_examines()
if(!isnull(effects_exam))
diff --git a/hyperstation/code/modules/traits.dm b/hyperstation/code/modules/traits.dm
index 60d97af45a..cd0844fffb 100644
--- a/hyperstation/code/modules/traits.dm
+++ b/hyperstation/code/modules/traits.dm
@@ -5,7 +5,6 @@
name = "Extra productive genitals"
desc = "Your lower bits produce more and hold more than normal."
value = 0
- category = CATEGORY_SEXUAL
mob_trait = TRAIT_CUM_PLUS
gain_text = "You feel pressure in your groin."
lose_text = "You feel a weight lifted from your groin."
diff --git a/tgstation.dme b/tgstation.dme
index 9a03dfd2cd..ccc42eae71 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4075,6 +4075,7 @@
#include "hyperstation\code\modules\resize\sizechems.dm"
#include "hyperstation\code\modules\resize\sizegun.dm"
#include "hyperstation\code\modules\surgery\organs\augments_arms.dm"
+#include "hyperstation\code\modules\traits.dm"
#include "hyperstation\code\obj\ashtray.dm"
#include "hyperstation\code\obj\decal.dm"
#include "hyperstation\code\obj\fleshlight.dm"