diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index e09ebcb10c4..bb849746d38 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -81,3 +81,21 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_advdisease_resistance_asc(datum/disease/advance/A, datum/disease/advance/B) return A.totalResistance() - B.totalResistance() + +/proc/cmp_quirk_asc(datum/quirk/A, datum/quirk/B) + var/a_sign = num2sign(initial(A.value) * -1) + var/b_sign = num2sign(initial(B.value) * -1) + + // Neutral traits go last. + if(a_sign == 0) + a_sign = 2 + if(b_sign == 0) + b_sign = 2 + + var/a_name = initial(A.name) + var/b_name = initial(B.name) + + if(a_sign != b_sign) + return a_sign - b_sign + else + return sorttext(b_name, a_name) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f37269a1024..a1f1111dc19 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1558,3 +1558,11 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) if(channels_to_use.len) world.TgsChatBroadcast() + +/proc/num2sign(numeric) + if(numeric > 0) + return 1 + else if(numeric < 0) + return -1 + else + return 0 diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 7f0ee25e7cc..631a2921123 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -20,7 +20,10 @@ PROCESSING_SUBSYSTEM_DEF(quirks) return ..() /datum/controller/subsystem/processing/quirks/proc/SetupQuirks() - for(var/V in subtypesof(/datum/quirk)) + // 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) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e03eaf15097..501a5a75a26 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1,9 +1,5 @@ - - GLOBAL_LIST_EMPTY(preferences_datums) - - /datum/preferences var/client/parent //doohickeys for savefiles