mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-21 07:12:29 +00:00
187 lines
7.5 KiB
Plaintext
187 lines
7.5 KiB
Plaintext
//Main code edits
|
|
/datum/quirk/social_anxiety
|
|
value = -3
|
|
//mob_trait = TRAIT_ANXIOUS //Not in the code yet, neither are its implementations
|
|
processing_quirk = FALSE //small fixes for big mistakes
|
|
|
|
/datum/quirk/social_anxiety/add()
|
|
. = ..()
|
|
RegisterSignal(quirk_holder, COMSIG_MOB_SAY, .proc/handle_speech)
|
|
|
|
/datum/quirk/social_anxiety/remove()
|
|
. = ..()
|
|
UnregisterSignal(quirk_holder, COMSIG_MOB_SAY)
|
|
|
|
/datum/quirk/social_anxiety/proc/handle_speech(datum/source, list/speech_args)
|
|
SIGNAL_HANDLER
|
|
|
|
if(HAS_TRAIT(quirk_holder, TRAIT_FEARLESS))
|
|
return
|
|
|
|
var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood)
|
|
var/moodmod
|
|
if(mood)
|
|
moodmod = (1+0.02*(50-(max(50, mood.mood_level*(7-mood.sanity_level))))) //low sanity levels are better, they max at 6
|
|
else
|
|
moodmod = (1+0.02*(50-(max(50, 0.1*quirk_holder.nutrition))))
|
|
var/nearby_people = 0
|
|
for(var/mob/living/carbon/human/H in oview(3, quirk_holder))
|
|
if(H.client)
|
|
nearby_people++
|
|
var/message = speech_args[SPEECH_MESSAGE]
|
|
if(message)
|
|
var/list/message_split = splittext(message, " ")
|
|
var/list/new_message = list()
|
|
var/mob/living/carbon/human/quirker = quirk_holder
|
|
for(var/word in message_split)
|
|
if(prob(max(5,(nearby_people*12.5*moodmod))) && word != message_split[1]) //Minimum 1/20 chance of filler
|
|
new_message += pick("uh,","erm,","um,")
|
|
if(prob(min(5,(0.05*(nearby_people*12.5)*moodmod)))) //Max 1 in 20 chance of cutoff after a succesful filler roll, for 50% odds in a 15 word sentence
|
|
quirker.silent = max(3, quirker.silent)
|
|
to_chat(quirker, span_danger("You feel self-conscious and stop talking. You need a moment to recover!"))
|
|
break
|
|
if(prob(max(5,(nearby_people*12.5*moodmod)))) //Minimum 1/20 chance of stutter
|
|
// Add a short stutter, THEN treat our word
|
|
quirker.stuttering = max(0.25, quirker.stuttering)
|
|
new_message += quirker.treat_message(word)
|
|
|
|
else
|
|
new_message += word
|
|
|
|
message = jointext(new_message, " ")
|
|
var/mob/living/carbon/human/quirker = quirk_holder
|
|
if(prob(min(50,(0.50*(nearby_people*12.5)*moodmod)))) //Max 50% chance of not talking
|
|
if(dumb_thing)
|
|
to_chat(quirker, span_userdanger("You think of a dumb thing you said a long time ago and scream internally."))
|
|
dumb_thing = FALSE //only once per life
|
|
if(prob(1))
|
|
new/obj/item/reagent_containers/food/snacks/pastatomato(get_turf(quirker)) //now that's what I call spaghetti code
|
|
else
|
|
to_chat(quirk_holder, span_warning("You think that wouldn't add much to the conversation and decide not to say it."))
|
|
if(prob(min(25,(0.25*(nearby_people*12.75)*moodmod)))) //Max 25% chance of silence stacks after succesful not talking roll
|
|
to_chat(quirker, span_danger("You retreat into yourself. You <i>really</i> don't feel up to talking."))
|
|
quirker.silent = max(5, quirker.silent)
|
|
speech_args[SPEECH_MESSAGE] = pick("Uh.","Erm.","Um.")
|
|
else
|
|
speech_args[SPEECH_MESSAGE] = message
|
|
|
|
//Own stuff
|
|
/datum/quirk/no_guns
|
|
name = "Fat-Fingered"
|
|
desc = "Due to the shape of your hands, width of your fingers or just not having fingers at all, you're unable to fire guns without accommodation."
|
|
value = -2
|
|
mob_trait = TRAIT_CHUNKYFINGERS
|
|
gain_text = span_notice("Your fingers feel... thick.")
|
|
lose_text = span_notice("Your fingers feel normal again.")
|
|
|
|
/datum/quirk/illiterate
|
|
name = "Illiterate"
|
|
desc = "You can't read nor write, plain and simple."
|
|
value = -1
|
|
mob_trait = TRAIT_ILLITERATE
|
|
gain_text = span_notice("The knowledge of how to read seems to escape from you.")
|
|
lose_text = "<span class='notice'>Written words suddenly make sense again."
|
|
|
|
/datum/quirk/flimsy
|
|
name = "Flimsy"
|
|
desc = "Your body is a little more fragile then most, decreasing total health by 20%."
|
|
value = -2
|
|
medical_record_text = "Patient has abnormally low capacity for injury."
|
|
gain_text = "<span class='notice'>You feel like you could break with a single hit."
|
|
lose_text = "<span class='notice'>You feel more durable."
|
|
|
|
/datum/quirk/flimsy/add()
|
|
quirk_holder.maxHealth *= 0.8
|
|
|
|
/datum/quirk/flimsy/remove() //how do admins even remove traits?
|
|
if(!quirk_holder)
|
|
return
|
|
quirk_holder.maxHealth *= 1.25
|
|
|
|
/datum/quirk/hypersensitive
|
|
name = "Hypersensitive"
|
|
desc = "For better or worse, everything seems to affect your mood more than it should."
|
|
value = -1
|
|
gain_text = span_danger("You seem to make a big deal out of everything.")
|
|
lose_text = span_notice("You don't seem to make a big deal out of everything anymore.")
|
|
mood_quirk = TRUE //yogs
|
|
medical_record_text = "Patient demonstrates a high level of emotional volatility."
|
|
|
|
/datum/quirk/hypersensitive/add()
|
|
var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood)
|
|
if(mood)
|
|
mood.mood_modifier += 0.5
|
|
|
|
/datum/quirk/hypersensitive/remove()
|
|
if(!quirk_holder)
|
|
return
|
|
var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood)
|
|
if(mood)
|
|
mood.mood_modifier -= 0.5
|
|
|
|
// masked_mook moved to neutral
|
|
|
|
//well-trained moved to neutral
|
|
|
|
/datum/quirk/dumb4cum
|
|
name = "Dumb For Cum"
|
|
desc = "For one reason or another, you're totally obsessed with cum. The heat of it, the smell... its taste... It's quite simply euphoric."
|
|
value = 0
|
|
gain_text = "<span class='notice'>You suddenly start craving some seed inside of you!<span>"
|
|
lose_text = span_danger("Cum didn't even taste that good, anyways.")
|
|
medical_record_text = "Patient seems to have an unhealthy psychological obsession with seminal fluids."
|
|
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 should really get some cum...",\
|
|
"Some jizz wouldn't be so bad right now!",\
|
|
"You're starting to long for some more cum..."
|
|
)
|
|
to_chat(quirk_holder, span_love("[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)
|
|
|
|
// Small issue with this. If the quirk holder has NO_HUNGER or NO_THIRST, this trait can still be taken and they will still get the benefits of it.
|
|
// It's unlikely that someone will be both, especially at round start, but vampirism makes me wary of having these separate.
|
|
/datum/quirk/hungry
|
|
name = "Hungry And Thirsty"
|
|
desc = "You find yourself unusually hungry and thirsty. Gotta eat and drink twice as much as normal."
|
|
value = -1
|
|
gain_text = span_danger("You're starting to feel hungrier and thirstier a lot faster.")
|
|
lose_text = span_notice("Your craving for food and water begins dying down.")
|
|
medical_record_text = "Patient reports eating twice as many meals per day than usual for their species."
|
|
|
|
/datum/quirk/hungry/add()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
var/datum/physiology/P = H.physiology
|
|
P.hunger_mod *= 2
|
|
P.thirst_mod *= 2
|
|
|
|
/datum/quirk/hungry/remove()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
if(H)
|
|
var/datum/physiology/P = H.physiology
|
|
P.hunger_mod /= 2
|
|
P.thirst_mod /= 2
|