diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm
index f9b4c36c9c..792708b5bb 100644
--- a/code/__DEFINES/loadout.dm
+++ b/code/__DEFINES/loadout.dm
@@ -91,3 +91,8 @@
#define LOADOUT_TAB 4
#define CONTENT_PREFERENCES_TAB 5
#define KEYBINDINGS_TAB 6
+
+//quirks
+#define QUIRK_POSITIVE "Positive"
+#define QUIRK_NEGATIVE "Negative"
+#define QUIRK_NEUTRAL "Neutral"
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 241e8b24a9..a0bb245bbb 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -250,6 +250,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//Quirk list
var/list/all_quirks = list()
+ //Quirk category currently selected
+ var/quirk_category = QUIRK_POSITIVE // defaults to positive, the first tab!
+
//Job preferences 2.0 - indexed by job title , no key or value implies never
var/list/job_preferences = list()
@@ -1666,9 +1669,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "
"
dat += "Current quirks: [all_quirks.len ? all_quirks.Join(", ") : "None"]"
dat += "[GetPositiveQuirkCount()] / [MAX_QUIRKS] max positive quirks
\
- Quirk balance remaining: [GetQuirkBalance()]
"
+ Quirk balance remaining: [GetQuirkBalance()]
"
+ dat += " [QUIRK_POSITIVE] "
+ dat += " [QUIRK_NEUTRAL] "
+ dat += " [QUIRK_NEGATIVE] "
+ dat += "
"
for(var/V in SSquirks.quirks)
var/datum/quirk/T = SSquirks.quirks[V]
+ var/value = initial(T.value)
+ if((value > 0 && quirk_category != QUIRK_POSITIVE) || (value < 0 && quirk_category != QUIRK_NEGATIVE) || (value == 0 && quirk_category != QUIRK_NEUTRAL))
+ continue
+
var/quirk_name = initial(T.name)
var/has_quirk
var/quirk_cost = initial(T.value) * -1
@@ -1690,7 +1701,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
quirk_cost = "+[quirk_cost]"
var/font_color = "#AAAAFF"
if(initial(T.value) != 0)
- font_color = initial(T.value) > 0 ? "#AAFFAA" : "#FFAAAA"
+ font_color = value > 0 ? "#AAFFAA" : "#FFAAAA"
if(quirk_conflict)
dat += "[quirk_name] - [initial(T.desc)] \
LOCKED: [lock_reason]
"
@@ -1836,7 +1847,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else
SetQuirks(user)
return TRUE
-//SKYRAT CHANGE - only language pref
+
+ else if(href_list["quirk_category"])
+ var/temp_quirk_category = href_list["quirk_category"]
+ if(temp_quirk_category == QUIRK_POSITIVE || temp_quirk_category == QUIRK_NEUTRAL || temp_quirk_category == QUIRK_NEGATIVE)
+ quirk_category = temp_quirk_category
+ SetQuirks(user)
+
else if(href_list["preference"] == "language")
switch(href_list["task"])
if("close")
@@ -1855,7 +1872,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else
SetLanguage(user)
return TRUE
-//
+
switch(href_list["task"])
if("random")
switch(href_list["preference"])
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index b065454f27..4be1065372 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -526,6 +526,8 @@
/datum/emote/living/circle/run_emote(mob/user, params)
. = ..()
+ if(!.)
+ return
var/obj/item/circlegame/N = new(user)
if(user.put_in_hands(N))
to_chat(user, "You make a circle with your hand.")
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index d499c2abae..5563f47e61 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -8,7 +8,7 @@
var/unrestricted = TRUE
/datum/emote/sound/silicon/run_emote(mob/user, params)
- if(!unrestricted && !(issilicon(user) || isipcperson(user)))
+ if(!unrestricted && !(issilicon(user) || isrobotic(user)))
return
return ..()
diff --git a/code/modules/mob/living/simple_animal/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm
index 94f054345d..ac0ce1c1e5 100644
--- a/code/modules/mob/living/simple_animal/slime/emote.dm
+++ b/code/modules/mob/living/simple_animal/slime/emote.dm
@@ -27,6 +27,8 @@
/datum/emote/slime/mood/run_emote(mob/user, params)
. = ..()
+ if(!.)
+ return
var/mob/living/simple_animal/slime/S = user
S.mood = mood
S.regenerate_icons()
diff --git a/html/changelogs/archive/2022-05.yml b/html/changelogs/archive/2022-05.yml
index 4f48f00470..ac73f9ad45 100644
--- a/html/changelogs/archive/2022-05.yml
+++ b/html/changelogs/archive/2022-05.yml
@@ -139,5 +139,9 @@
Yawet330:
- admin: Staff when aghosting get the same things, so you can easily see peoples
OOC notes if disputes come up, and they're in something that prevents examines.
+2022-05-17:
timothyteakettle:
- rscadd: poly alt cloak can now be renamed/dedescriptioned in loadout
+2022-05-18:
+ timothyteakettle:
+ - rscadd: quirks are now organised into three tabs for positive, neutral and negative
diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm
index 0adb12e5a1..8a6643d239 100644
--- a/modular_citadel/code/modules/mob/cit_emotes.dm
+++ b/modular_citadel/code/modules/mob/cit_emotes.dm
@@ -77,7 +77,8 @@
restraint_check = TRUE
/datum/emote/living/snap/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -93,7 +94,8 @@
restraint_check = TRUE
/datum/emote/living/snap2/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -109,7 +111,8 @@
restraint_check = TRUE
/datum/emote/living/snap3/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -125,7 +128,8 @@
restraint_check = FALSE
/datum/emote/living/awoo/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -141,7 +145,8 @@
restraint_check = FALSE
/datum/emote/living/hiss/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -157,7 +162,8 @@
restraint_check = FALSE
/datum/emote/living/meow/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -173,7 +179,8 @@
restraint_check = FALSE
/datum/emote/living/purr/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -189,7 +196,8 @@
restraint_check = FALSE
/datum/emote/living/nya/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -205,7 +213,8 @@
restraint_check = FALSE
/datum/emote/living/weh/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -221,7 +230,8 @@
restraint_check = FALSE
/datum/emote/living/peep/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -244,7 +254,8 @@
restraint_check = FALSE
/datum/emote/living/mothsqueak/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -260,7 +271,8 @@
restraint_check = FALSE
/datum/emote/living/merp/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -276,7 +288,8 @@
restraint_check = FALSE
/datum/emote/living/bark/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -293,7 +306,8 @@
restraint_check = FALSE
/datum/emote/living/squish/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -310,7 +324,8 @@
restraint_check = FALSE
/datum/emote/living/pain/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
if(user.nextsoundemote >= world.time)
return
@@ -331,6 +346,7 @@
restraint_check = TRUE
/datum/emote/living/clap1/run_emote(mob/living/user, params)
- if(!(. = ..()))
+ . = ..()
+ if(!.)
return
playsound(user, 'modular_citadel/sound/voice/clap.ogg', 50, 1, -1)