-
-
Notifications
You must be signed in to change notification settings - Fork 452
/
quirks.dm
121 lines (93 loc) · 3.88 KB
/
quirks.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/// Middleware to handle quirks
/datum/preference_middleware/quirks
var/tainted = FALSE
action_delegations = list(
"give_quirk" = PROC_REF(give_quirk),
"remove_quirk" = PROC_REF(remove_quirk),
)
/datum/preference_middleware/quirks/get_ui_static_data(mob/user)
if (preferences.current_window != PREFERENCE_TAB_CHARACTER_PREFERENCES)
return list()
var/list/data = list()
data["selected_quirks"] = get_selected_quirks()
data["locked_quirks"] = get_locked_quirks()
// If moods are globally enabled, or this guy does indeed have his mood pref set to Enabled
data["mood_enabled"] = (!CONFIG_GET(flag/disable_human_mood) || (user.client?.prefs.read_preference(/datum/preference/toggle/mood_enabled)))
return data
/datum/preference_middleware/quirks/get_ui_data(mob/user)
var/list/data = list()
if (tainted)
tainted = FALSE
data["selected_quirks"] = get_selected_quirks()
data["locked_quirks"] = get_locked_quirks()
// If moods are globally enabled, or this guy does indeed have his mood pref set to Enabled
data["mood_enabled"] = (!CONFIG_GET(flag/disable_human_mood) || (user.client?.prefs.read_preference(/datum/preference/toggle/mood_enabled)))
return data
/datum/preference_middleware/quirks/get_constant_data()
var/list/quirk_info = list()
for (var/quirk_name in SSquirks.quirks)
var/datum/quirk/quirk = SSquirks.quirks[quirk_name]
quirk_info[sanitize_css_class_name(quirk_name)] = list(
"description" = initial(quirk.desc),
"icon" = initial(quirk.icon),
"name" = quirk_name,
"value" = initial(quirk.value),
"mood" = initial(quirk.mood_quirk),
)
quirk = new quirk(no_init = TRUE);
var/blacklist_len = LAZYLEN(quirk.job_blacklist)
if(blacklist_len)
var/fullstring = ""
var/spot = 1
for(var/thing in quirk.job_blacklist)
fullstring += "[spot == 1 ? "" :", "][spot == blacklist_len ? "and " : ""] [thing]"
spot ++
fullstring += " cannot use this quirk."
quirk_info[sanitize_css_class_name(quirk_name)]["blacklisted"] = fullstring
return list(
"max_positive_quirks" = MAX_QUIRKS,
"quirk_info" = quirk_info,
"quirk_blacklist" = SSquirks.quirk_blacklist,
)
/datum/preference_middleware/quirks/on_new_character(mob/user)
tainted = TRUE
/datum/preference_middleware/quirks/proc/give_quirk(list/params, mob/user)
var/quirk_name = params["quirk"]
var/list/new_quirks = preferences.all_quirks | quirk_name
if (SSquirks.filter_invalid_quirks(new_quirks, user.client) != new_quirks)
// If the client is sending an invalid give_quirk, that means that
// something went wrong with the client prediction, so we should
// catch it back up to speed.
preferences.update_static_data(user)
return TRUE
preferences.all_quirks = new_quirks
return TRUE
/datum/preference_middleware/quirks/proc/remove_quirk(list/params, mob/user)
var/quirk_name = params["quirk"]
var/list/new_quirks = preferences.all_quirks - quirk_name
if ( \
!(quirk_name in preferences.all_quirks) \
|| SSquirks.filter_invalid_quirks(new_quirks, user.client) != new_quirks \
)
// If the client is sending an invalid remove_quirk, that means that
// something went wrong with the client prediction, so we should
// catch it back up to speed.
preferences.update_static_data(user)
return TRUE
preferences.all_quirks = new_quirks
return TRUE
/datum/preference_middleware/quirks/proc/get_selected_quirks()
var/list/selected_quirks = list()
for (var/quirk in preferences.all_quirks)
selected_quirks += sanitize_css_class_name(quirk)
return selected_quirks
/datum/preference_middleware/quirks/proc/get_locked_quirks()
var/list/locked_quirks = list()
for (var/quirk_name in SSquirks.quirks)
var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name]
var/datum/quirk/quirk = new quirk_type(no_init = TRUE)
var/lock_reason = quirk?.check_quirk(preferences)
if (lock_reason)
locked_quirks[sanitize_css_class_name(quirk_name)] = lock_reason
qdel(quirk)
return locked_quirks