diff --git a/code/__SPLURTCODE/DEFINES/zeros/traits.dm b/code/__SPLURTCODE/DEFINES/zeros/traits.dm
index e6e13f9963..b1d1b3ef64 100644
--- a/code/__SPLURTCODE/DEFINES/zeros/traits.dm
+++ b/code/__SPLURTCODE/DEFINES/zeros/traits.dm
@@ -7,3 +7,5 @@
#define TRAIT_IN_HEAT "in_heat"
#define TRAIT_HEAT_DETECT "heat_detect"
#define TRAIT_ILLITERATE "illiterate"
+
+#define TRAIT_DUMB4CUM "dumb4cum"
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 7fb1dd0065..116e213416 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -779,6 +779,10 @@ GLOBAL_LIST_EMPTY(PDAs)
return t
/obj/item/pda/proc/send_message(mob/living/user, list/obj/item/pda/targets, everyone)
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't focus on anything but cum right now!")
+ return
+
var/message = msg_input(user)
if(!message || !targets.len)
return
@@ -861,7 +865,7 @@ GLOBAL_LIST_EMPTY(PDAs)
else
L = get(src, /mob/living/silicon)
- if(L && L.stat != UNCONSCIOUS)
+ if(L && L.stat != UNCONSCIOUS && !HAS_TRAIT(L, TRAIT_DUMB4CUM))
var/hrefstart
var/hrefend
if (isAI(L))
diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm
index 8573324b56..a97874b1c0 100644
--- a/code/game/objects/items/implants/implantcase.dm
+++ b/code/game/objects/items/implants/implantcase.dm
@@ -24,6 +24,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on the side of [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/t = stripped_input(user, "What would you like the label to be?", name, null)
if(user.get_active_held_item() != W)
return
diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm
index 578d8595dd..c921942541 100644
--- a/code/game/objects/items/implants/implanter.dm
+++ b/code/game/objects/items/implants/implanter.dm
@@ -45,6 +45,9 @@
if(!user.is_literate())
to_chat(user, "You prod at [src] with [W]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/t = stripped_input(user, "What would you like the label to be?", name, null)
if(user.get_active_held_item() != W)
return
diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm
index 67bc28b2ea..e83c88db8f 100644
--- a/code/game/objects/items/signs.dm
+++ b/code/game/objects/items/signs.dm
@@ -21,6 +21,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/txt = stripped_input(user, "What would you like to write on the sign?", "Sign Label", null , 30)
if(txt && user.canUseTopic(src, BE_CLOSE))
label = txt
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 09441a577e..706c2f65fe 100644
--- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm
+++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
@@ -20,6 +20,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/t = stripped_input(user, "What would you like the label to be?", name, null, 53)
if(user.get_active_held_item() != I)
return
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 69206f0d08..59d60f2812 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -85,6 +85,9 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
if(!user.is_literate())
to_chat(user, "You scribble illegibly on the side of [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/t = stripped_input(user, "What would you like the label to be?", text("[]", name), null)
if (user.get_active_held_item() != P)
return
diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm
index df00f873b5..16ae047729 100644
--- a/code/modules/events/holiday/vday.dm
+++ b/code/modules/events/holiday/vday.dm
@@ -55,6 +55,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/recipient = stripped_input(user, "Who is receiving this valentine?", "To:", null , 20)
var/sender = stripped_input(user, "Who is sending this valentine?", "From:", null , 20)
if(!user.canUseTopic(src, BE_CLOSE))
diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm
index 9d0e38cdec..0a4fde4171 100644
--- a/code/modules/food_and_drinks/pizzabox.dm
+++ b/code/modules/food_and_drinks/pizzabox.dm
@@ -195,6 +195,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/obj/item/pizzabox/box = boxes.len ? boxes[boxes.len] : src
box.boxtag += stripped_input(user, "Write on [box]'s tag:", box, "", 30)
if(!user.canUseTopic(src, BE_CLOSE))
diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm
index 77db8dbe3f..59766fad1d 100644
--- a/code/modules/games/cas.dm
+++ b/code/modules/games/cas.dm
@@ -147,6 +147,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
if(!blank)
to_chat(user, "You cannot write on that card.")
return
diff --git a/code/modules/library/lib_codex_gigas.dm b/code/modules/library/lib_codex_gigas.dm
index 26fa5b6f3d..7eabdb9d3a 100644
--- a/code/modules/library/lib_codex_gigas.dm
+++ b/code/modules/library/lib_codex_gigas.dm
@@ -27,6 +27,9 @@
if(!user.is_literate())
to_chat(user, "You skim through the book but can't comprehend any of it.")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
if(inUse)
to_chat(user, "Someone else is reading it.")
if(ishuman(user))
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index d558c2994f..ca5e3b78c2 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -113,6 +113,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on the side of [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/newname = stripped_input(user, "What would you like to title this bookshelf?")
if(!user.canUseTopic(src, BE_CLOSE))
return
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index f59ed15c88..3a036c2bb8 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -591,6 +591,9 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
if(!is_literate())
to_chat(src, "You try to read [O], but can't comprehend any of it.")
return
+ if(HAS_TRAIT(src, TRAIT_DUMB4CUM))
+ to_chat(src, "You try reading [O] but only warm seed comes to your mind.")
+ return
return TRUE
/mob/proc/checkloadappearance()
diff --git a/code/modules/newscaster/newspaper.dm b/code/modules/newscaster/newspaper.dm
index 0afb36a7e7..57fa8ae913 100644
--- a/code/modules/newscaster/newspaper.dm
+++ b/code/modules/newscaster/newspaper.dm
@@ -158,6 +158,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
if(scribble_page == curr_page)
to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?")
else
diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm
index f46d4bf029..fef3bbdade 100644
--- a/code/modules/paperwork/contract.dm
+++ b/code/modules/paperwork/contract.dm
@@ -190,6 +190,9 @@
if(!user.IsAdvancedToolUser() || !user.is_literate())
to_chat(user, "You don't know how to read or write.")
return 0
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
if(user.mind != target)
to_chat(user, "Your signature simply slides off the sheet, it seems this contract is not meant for you to sign.")
return 0
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index d69da4d797..707ff06a8f 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -46,6 +46,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on the cover of [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/inputvalue = stripped_input(user, "What would you like to label the folder?", "Folder Labelling", "", MAX_NAME_LEN)
diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm
index c363c549de..4f39ccb048 100644
--- a/code/modules/photography/photos/photo.dm
+++ b/code/modules/photography/photos/photo.dm
@@ -57,6 +57,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/txt = stripped_input(user, "What would you like to write on the back?", "Photo Writing", "", 128)
if(txt && user.canUseTopic(src, BE_CLOSE))
scribble = txt
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 87349058a4..6548727746 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -89,6 +89,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on the label of [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/t = stripped_input(user, "What would you like to label the blood pack?", name, null, 53)
if(!user.canUseTopic(src, BE_CLOSE))
return
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 008e093b74..572fb392df 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -36,6 +36,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on the side of [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/str = stripped_input(user, "Label text?", "Set label", "", MAX_NAME_LEN)
if(!user.canUseTopic(src, BE_CLOSE))
return
@@ -122,6 +125,9 @@
if(!user.is_literate())
to_chat(user, "You scribble illegibly on the side of [src]!")
return
+ if(HAS_TRAIT(user, TRAIT_DUMB4CUM))
+ to_chat(user, "You can't think of anything but cum right now.")
+ return
var/str = stripped_input(user, "Label text?", "Set label", "", MAX_NAME_LEN)
if(!user.canUseTopic(src, BE_CLOSE))
return
diff --git a/modular_splurt/code/datums/mood_events/needs_events.dm b/modular_splurt/code/datums/mood_events/needs_events.dm
index da5a575ebb..3cce41244d 100644
--- a/modular_splurt/code/datums/mood_events/needs_events.dm
+++ b/modular_splurt/code/datums/mood_events/needs_events.dm
@@ -5,3 +5,12 @@
return
description = span_nicegreen("MORE FOOD!!! MORE FOOD!!! MORE FOOD!!!")
mood_change = 8
+
+/datum/mood_event/cum_craving
+ description = "I... NEED... CUM...\n"
+ mood_change = -20
+
+/datum/mood_event/cum_stuffed
+ description = "It feels so good inside me!\n"
+ mood_change = 8
+ timeout = 5 MINUTES
diff --git a/modular_splurt/code/datums/traits/negative.dm b/modular_splurt/code/datums/traits/negative.dm
index 45dafa4261..0953aaadd4 100644
--- a/modular_splurt/code/datums/traits/negative.dm
+++ b/modular_splurt/code/datums/traits/negative.dm
@@ -167,3 +167,42 @@
to_chat(quirk_holder, span_lewd(pick(notices)))
notice_delay = world.time + 15 SECONDS
+
+/datum/quirk/dumb4cum
+ name = "Dumb For Cum"
+ desc = "You just like cum, it's heat, it's smell, it's... Taste."
+ value = -3
+ gain_text = "You suddenly start craving some seed inside of you."
+ lose_text = "It didn't even taste that good, really!"
+ medical_record_text = "Patient seems to drool for seminal fluid."
+ var/craving_after = 15 MINUTES
+ var/timer
+
+/datum/quirk/dumb4cum/on_spawn()
+ . = ..()
+ timer = addtimer(CALLBACK(src, .proc/crave), craving_after, TIMER_STOPPABLE)
+
+/datum/quirk/dumb4cum/proc/crave()
+ var/list/hungry_phrases = list(
+ "Your stomach rumbles a bit and cum comes to your mind.",\
+ "Urgh, you really should get some cum...",\
+ "Some jizz wouldn't sit bad right now!",\
+ "You're starting to long for more cum."
+ )
+ to_chat(quirk_holder, "[pick(hungry_phrases)]")
+
+ if(quirk_holder.stat == CONSCIOUS)
+ quirk_holder.emote("sigh")
+ ADD_TRAIT(quirk_holder, TRAIT_PACIFISM, type)
+ ADD_TRAIT(quirk_holder, TRAIT_DUMB4CUM, type)
+ SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "cum_craving", /datum/mood_event/cum_craving)
+
+/datum/quirk/dumb4cum/proc/uncrave()
+ REMOVE_TRAIT(quirk_holder, TRAIT_PACIFISM, type)
+ REMOVE_TRAIT(quirk_holder, TRAIT_DUMB4CUM, type)
+ SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "cum_craving")
+ SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "cum_stuffed", /datum/mood_event/cum_stuffed)
+
+ deltimer(timer)
+ timer = null
+ timer = addtimer(CALLBACK(src, .proc/crave), craving_after, TIMER_STOPPABLE)
diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/other_reagents.dm
new file mode 100644
index 0000000000..ed82baba1b
--- /dev/null
+++ b/modular_splurt/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -0,0 +1,7 @@
+/datum/reagent/consumable/semen/on_mob_add(mob/living/carbon/M)
+ . = ..()
+ var/datum/quirk/dumb4cum/d4c
+ for(var/datum/quirk/Q in M.roundstart_quirks)
+ if(Q.type == /datum/quirk/dumb4cum)
+ d4c = Q
+ d4c.uncrave()
diff --git a/tgstation.dme b/tgstation.dme
index 77b56e7213..4dfef7f1c6 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4588,6 +4588,7 @@
#include "modular_splurt\code\modules\reagents\chemistry\reagents\drug_reagents.dm"
#include "modular_splurt\code\modules\reagents\chemistry\reagents\enlargement.dm"
#include "modular_splurt\code\modules\reagents\chemistry\reagents\food_reagents.dm"
+#include "modular_splurt\code\modules\reagents\chemistry\reagents\other_reagents.dm"
#include "modular_splurt\code\modules\reagents\chemistry\recipes\drugs.dm"
#include "modular_splurt\code\modules\reagents\chemistry\recipes\lewd.dm"
#include "modular_splurt\code\modules\reagents\reagent_containers\bottle.dm"