Files
Bubberstation/code/controllers/subsystem/processing/quirks.dm
MrMelbert 32c267d5b0 Adds a minor negative quirk: Bad Touch (for the anti-huggers) (#55334)
About The Pull Request

Adds a minor negative quirk, Bad Touch. This quirk gives you negative moodlets from hugs instead of positive ones, as well as negative moodlets from headpats and passive grabs.
Why It's Good For The Game

The quirk catalogue is still quite short and could use some more to fill it out. So here's a minor quirk that could be really fun or interesting to play with, especially if you also take unstable and/or hypersensitive, given how common hugs are in station life. Someone suggested it to me so I thought why not.
Changelog

🆑 Melbert
add: New negative quirk: 'Bad Touch'. With it, you gain a negative moodlet from being hugged instead of a positive one, and you gain a negative moodlet from headpats and grabs.
fix: blind people can now feel headpats
/🆑
2020-12-29 14:59:14 +13:00

67 lines
2.7 KiB
Plaintext

#define EXP_ASSIGN_WAYFINDER 1200
//Used to process and handle roundstart quirks
// - Quirk strings are used for faster checking in code
// - Quirk datums are stored and hold different effects, as well as being a vector for applying trait string
PROCESSING_SUBSYSTEM_DEF(quirks)
name = "Quirks"
init_order = INIT_ORDER_QUIRKS
flags = SS_BACKGROUND
runlevels = RUNLEVEL_GAME
wait = 1 SECONDS
var/list/quirks = list() //Assoc. list of all roundstart quirk datum types; "name" = /path/
var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad
var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process
var/list/quirk_blacklist = list() //A list of quirks that can not be used with each other. Format: list(quirk1,quirk2),list(quirk3,quirk4)
///An assoc list of quirks that can be obtained as a hardcore character, and their hardcore value.
var/list/hardcore_quirks = list()
/datum/controller/subsystem/processing/quirks/Initialize(timeofday)
if(!quirks.len)
SetupQuirks()
quirk_blacklist = list(list("Blind","Nearsighted"), \
list("Jolly","Depression","Apathetic","Hypersensitive"), \
list("Ageusia","Vegetarian","Deviant Tastes"), \
list("Ananas Affinity","Ananas Aversion"), \
list("Alcohol Tolerance","Light Drinker"), \
list("Clown Fan","Mime Fan"), \
list("Bad Touch", "Friendly"))
return ..()
/datum/controller/subsystem/processing/quirks/proc/SetupQuirks()
// Sort by Positive, Negative, Neutral; and then by name
var/list/quirk_list = sortList(subtypesof(/datum/quirk), /proc/cmp_quirk_asc)
for(var/V in quirk_list)
var/datum/quirk/T = V
quirks[initial(T.name)] = T
quirk_points[initial(T.name)] = initial(T.value)
var/hardcore_value = initial(T.hardcore_value)
if(!hardcore_value)
continue
hardcore_quirks[T] += hardcore_value
/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects)
var/badquirk = FALSE
for(var/V in cli.prefs.all_quirks)
var/datum/quirk/Q = quirks[V]
if(Q)
user.add_quirk(Q, spawn_effects)
else
stack_trace("Invalid quirk \"[V]\" in client [cli.ckey] preferences")
cli.prefs.all_quirks -= V
badquirk = TRUE
if(badquirk)
cli.prefs.save_character()
if(ishuman(user))
var/mob/living/carbon/human/human = user
human.hardcore_survival_score = cli.prefs.hardcore_survival_score //Only do this if we actually asign quirks, to prevent sillicons etc from getting the points.
// Assign wayfinding pinpointer granting quirk if they're new
if(cli.get_exp_living(TRUE) < EXP_ASSIGN_WAYFINDER && !user.has_quirk(/datum/quirk/needswayfinder))
user.add_quirk(/datum/quirk/needswayfinder, TRUE)