From db05dd184d01d6e1d8caad2175b0bb2fefa0b861 Mon Sep 17 00:00:00 2001
From: NiklasNeighbor <121561587+NiklasNeighbor@users.noreply.github.com>
Date: Mon, 13 Oct 2025 01:02:01 +0200
Subject: [PATCH] Gives optional customizable lines of Flavor text for
different stages of mechanical arousal (#4801)
## About The Pull Request
Adds three new small input fields in the Character Lore section.
these are short flavor text for low, medium, and high arousal.
they will show up when being examined while mechnically aroused and both
the examiner and examined have ERP interactions turned on in their
prefs.
Leaving the fields blank also stops any flavor text from showing up for
that arousal level
From what I can tell the implemented feature works fine.
Minor issue remains in that the fields to enter these flavor texts are
ordered a bit weird. If anyone who knows how fix that, please tell me.
## Why It's Good For The Game
Currently, mechanical arousal has either no impact or is annoying and
distracting.
This change hopes to make mechanical arousal actually add to the
roleplay rather than distracting from it.
This should hopefully also make the arousal system actually usable for
other features.
## Proof Of Testing
From what I can tell the implemented feature works fine.
Screenshots/Videos
## Changelog
:cl:
add: Added the ability to set short Flavor Text for three levels of
mechanical arousal.
/:cl:
---
.../lewd_items/code/lewd_arousal/arousal.dm | 13 +++++++++
.../modules/client/flavor_text/flavor_text.dm | 27 +++++++++++++++++++
.../bubbers/species_features.tsx | 18 +++++++++++++
3 files changed, 58 insertions(+)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm
index 92b4af17559..3d34568869e 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm
@@ -49,3 +49,16 @@
return TRUE
+
+/mob/living/carbon/human/examine(mob/user)
+ . = ..()
+ if(src.client?.prefs.read_preference(/datum/preference/toggle/erp) && user.client.prefs.read_preference(/datum/preference/toggle/erp))
+ if (arousal > AROUSAL_HIGH && src.dna.features["high_arousal"])
+ . += span_userlove(src.dna.features["high_arousal"])
+ return
+ if (arousal > AROUSAL_LOW && src.dna.features["medium_arousal"])
+ . += span_userlove(src.dna.features["medium_arousal"])
+ return
+ if (arousal > AROUSAL_NONE && src.dna.features["low_arousal"])
+ . += span_purple(src.dna.features["low_arousal"])
+ return
diff --git a/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm b/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm
index a7dc7a4b3c1..a3091df0cbc 100644
--- a/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm
+++ b/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm
@@ -24,6 +24,33 @@
/datum/preference/text/flavor_text_nsfw/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
target.dna.features["flavor_text_nsfw"] = value
+/datum/preference/text/low_arousal
+ category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
+ savefile_identifier = PREFERENCE_CHARACTER
+ savefile_key = "low_arousal_text"
+ maximum_value_length = 100
+
+/datum/preference/text/low_arousal/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
+ target.dna.features["low_arousal"] = value
+
+/datum/preference/text/medium_arousal
+ category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
+ savefile_identifier = PREFERENCE_CHARACTER
+ savefile_key = "medium_arousal_text"
+ maximum_value_length = 100
+
+/datum/preference/text/medium_arousal/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
+ target.dna.features["medium_arousal"] = value
+
+/datum/preference/text/high_arousal
+ category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
+ savefile_identifier = PREFERENCE_CHARACTER
+ savefile_key = "high_arousal_text"
+ maximum_value_length = 100
+
+/datum/preference/text/high_arousal/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
+ target.dna.features["high_arousal"] = value
+
//This is just a silicon variant of the NSFW flavor text.
/datum/preference/text/flavor_text_nsfw/silicon
savefile_key = "silicon_flavor_text_nsfw"
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/bubbers/species_features.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/bubbers/species_features.tsx
index 3132a17532c..631ec1e8170 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/bubbers/species_features.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/bubbers/species_features.tsx
@@ -92,6 +92,24 @@ export const flavor_text_nsfw: Feature = {
component: FeatureTextInput,
};
+export const low_arousal_text: Feature = {
+ name: 'Arousal Flavor - Low',
+ description: 'How your character can be perceived to be slightly aroused',
+ component: FeatureShortTextInput,
+};
+
+export const medium_arousal_text: Feature = {
+ name: 'Arousal Flavor - Medium',
+ description: 'How your character can be perceived to be somewhat aroused',
+ component: FeatureShortTextInput,
+};
+
+export const high_arousal_text: Feature = {
+ name: 'Arousal Flavor - Strong',
+ description: 'How your character can be perceived to be highly aroused',
+ component: FeatureShortTextInput,
+};
+
export const silicon_flavor_text_nsfw: Feature = {
name: 'Silicon NSFW Flavor Text',
description: