diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 7ea9dc4eafe5..d78f535520e7 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -31,9 +31,16 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects)
if(!checkquirks(user,cli)) return// Yogs -- part of Adding Mood as Preference
+
+ 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")
\ No newline at end of file
+ stack_trace("Invalid quirk \"[V]\" in client [cli.ckey] preferences")
+ cli.prefs.all_quirks -= V
+ badquirk = TRUE
+ if(badquirk)
+ cli.prefs.save_character()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 19d0f02d2baf..415c5e227b77 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -72,10 +72,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/preferred_ai_core_display = "Blue"
var/prefered_security_department = SEC_DEPT_RANDOM
- //Quirk list
- var/list/positive_quirks = list()
- var/list/negative_quirks = list()
- var/list/neutral_quirks = list()
+ //Quirk list
var/list/all_quirks = list()
//Job preferences 2.0 - indexed by job title , no key or value implies never
@@ -959,7 +956,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(!SSquirks.quirks.len)
dat += "The quirk subsystem hasn't finished initializing, please hold..."
dat += "
Done
"
-
else
dat += "Choose quirk setup
"
dat += "Left-click to add or remove quirks. You need negative quirks to have positive ones.
\
@@ -967,7 +963,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "
Done"
dat += "
"
dat += "
Current quirks: [all_quirks.len ? all_quirks.Join(", ") : "None"]"
- dat += "
[positive_quirks.len] / [MAX_QUIRKS] max positive quirks
\
+ dat += "[GetPositiveQuirkCount()] / [MAX_QUIRKS] max positive quirks
\
Quirk balance remaining: [GetQuirkBalance()]
"
for(var/V in SSquirks.quirks)
var/datum/quirk/T = SSquirks.quirks[V]
@@ -1017,6 +1013,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
bal -= initial(T.value)
return bal
+/datum/preferences/proc/GetPositiveQuirkCount()
+ . = 0
+ for(var/q in all_quirks)
+ if(SSquirks.quirk_points[q] > 0)
+ .++
+
/datum/preferences/Topic(href, href_list, hsrc) //yeah, gotta do this I guess..
. = ..()
if(href_list["close"])
@@ -1108,42 +1110,23 @@ GLOBAL_LIST_EMPTY(preferences_datums)
to_chat(user, "[quirk] is incompatible with [Q].")
return
var/value = SSquirks.quirk_points[quirk]
- if(value == 0)
- if(quirk in neutral_quirks)
- neutral_quirks -= quirk
- all_quirks -= quirk
- else
- neutral_quirks += quirk
- all_quirks += quirk
+ var/balance = GetQuirkBalance()
+ if(quirk in all_quirks)
+ if(balance + value < 0)
+ to_chat(user, "Refunding this would cause you to go below your balance!")
+ return
+ all_quirks -= quirk
else
- var/balance = GetQuirkBalance()
- if(quirk in positive_quirks)
- positive_quirks -= quirk
- all_quirks -= quirk
- else if(quirk in negative_quirks)
- if(balance + value < 0)
- to_chat(user, "Refunding this would cause you to go below your balance!")
- return
- negative_quirks -= quirk
- all_quirks -= quirk
- else if(value > 0)
- if(positive_quirks.len >= MAX_QUIRKS)
- to_chat(user, "You can't have more than [MAX_QUIRKS] positive quirks!")
- return
- if(balance - value < 0)
- to_chat(user, "You don't have enough balance to gain this quirk!")
- return
- positive_quirks += quirk
- all_quirks += quirk
- else
- negative_quirks += quirk
- all_quirks += quirk
+ if(GetPositiveQuirkCount() >= MAX_QUIRKS)
+ to_chat(user, "You can't have more than [MAX_QUIRKS] positive quirks!")
+ return
+ if(balance - value < 0)
+ to_chat(user, "You don't have enough balance to gain this quirk!")
+ return
+ all_quirks += quirk
SetQuirks(user)
if("reset")
all_quirks = list()
- positive_quirks = list()
- negative_quirks = list()
- neutral_quirks = list()
SetQuirks(user)
else
SetQuirks(user)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 15e7f40fb484..e564df5b9838 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -351,9 +351,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Quirks
S["all_quirks"] >> all_quirks
- S["positive_quirks"] >> positive_quirks
- S["negative_quirks"] >> negative_quirks
- S["neutral_quirks"] >> neutral_quirks
//try to fix any outdated data if necessary
if(needs_update >= 0)
@@ -426,9 +423,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
job_preferences -= j
all_quirks = SANITIZE_LIST(all_quirks)
- positive_quirks = SANITIZE_LIST(positive_quirks)
- negative_quirks = SANITIZE_LIST(negative_quirks)
- neutral_quirks = SANITIZE_LIST(neutral_quirks)
return TRUE
@@ -488,9 +482,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Quirks
WRITE_FILE(S["all_quirks"] , all_quirks)
- WRITE_FILE(S["positive_quirks"] , positive_quirks)
- WRITE_FILE(S["negative_quirks"] , negative_quirks)
- WRITE_FILE(S["neutral_quirks"] , neutral_quirks)
return TRUE
diff --git a/yogstation/code/modules/client/preferences_savefile.dm b/yogstation/code/modules/client/preferences_savefile.dm
index 21ca5032b288..4a3d9de4ba61 100644
--- a/yogstation/code/modules/client/preferences_savefile.dm
+++ b/yogstation/code/modules/client/preferences_savefile.dm
@@ -19,12 +19,6 @@
continue
T = T2
if(initial(T.mood_quirk) && CONFIG_GET(flag/disable_human_mood))
- if(T in positive_quirks)
- positive_quirks -= V
- if(T in negative_quirks)
- negative_quirks -= V
- if(T in neutral_quirks)
- neutral_quirks -= V
all_quirks -= V
else
value += initial(T.value)
@@ -35,6 +29,3 @@
for(var/V in all_quirks)
to_chat(parent, "[V]")
all_quirks = list()
- positive_quirks = list()
- negative_quirks = list()
- neutral_quirks = list()