mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-08 16:02:48 +00:00
* Adds Extrovert and Introvert Quirks (#56490) Adds Extrovert and Introvert quirks. Removes the free bar moodlet, gives it to extroverts, makes a corresponding library moodlet for introverts. Introvert and Extrovert are blacklisted and therefore mutually exclusive. Seems a bit thin, could we do x? Yeah sure, and I'd appreciate feedback on where you'd like to see these quirks go. I want to start basic with "where do they spend their free time?" Rather than trying to do something big like moodlets for speaking a lot/little, especially because that seems a bit unbalanced and we already have a quirk that penalizes speech. I'm also looking to avoid unrealistic stereotypes, speech penalties to introverts are kind of unreasonable, introverts aren't inherently bad at talking, they just like alone time. Why make it free? I'm taking away a pre-existing moodlet that was free for everyone, also positive quirks are capped at 6 and I see this quirk as being essential to character building so I would prefer not to make someone pick between giving any sort of depth to their character and their powergaming loadout. Having players define their character as introverted or extroverted and reinforcing the decision through gameplay mechanics is a great way to get them thinking about their character beyond an avatar to make other spacemen horizontal with. I'd argue that it is as foundational as decisions like gender, species, and age. This opens up the library as a social space, as the two people who take introvert might occasionally run into each other when they are recovering mood and sanity there. * Adds Extrovert and Introvert Quirks Co-authored-by: RaveRadbury <3204033+RaveRadbury@users.noreply.github.com>
83 lines
3.3 KiB
Plaintext
83 lines
3.3 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"), \
|
|
list("Extrovert", "Introvert"))
|
|
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)
|
|
|
|
|
|
// SKYRAT EDIT ADDITION START - Customization (food prefs)
|
|
// This was done in this proc on old skyrat and i cba to find a better way
|
|
var/mob/living/carbon/human/H = user
|
|
if(istype(H))
|
|
if(cli.prefs.foodlikes.len)
|
|
H.dna.species.liked_food = 0
|
|
for(var/V in cli.prefs.foodlikes)
|
|
H.dna.species.liked_food |= cli.prefs.foodlikes[V]
|
|
if(cli.prefs.fooddislikes.len)
|
|
H.dna.species.disliked_food = 0
|
|
for(var/V in cli.prefs.fooddislikes)
|
|
H.dna.species.disliked_food |= cli.prefs.fooddislikes[V]
|
|
// SKYRAT EDIT ADDITION END
|