diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index d5bb0effa59..12ccbfd5720 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -157,13 +157,18 @@ PROCESSING_SUBSYSTEM_DEF(quirks) /// be valid. /// If no changes need to be made, will return the same list. /// Expects all quirk names to be unique, but makes no other expectations. -/datum/controller/subsystem/processing/quirks/proc/filter_invalid_quirks(list/quirks) +/datum/controller/subsystem/processing/quirks/proc/filter_invalid_quirks(list/quirks, list/augments) // SKYRAT EDIT - AUGMENTS+ var/list/new_quirks = list() var/list/positive_quirks = list() var/balance = 0 var/list/all_quirks = get_quirks() + // SKYRAT EDIT BEGIN - AUGMENTS+ + for(var/key in augments) + var/datum/augment_item/aug = GLOB.augment_items[augments[key]] + balance += aug.cost + // SKYRAT EDIT END for (var/quirk_name in quirks) var/datum/quirk/quirk = all_quirks[quirk_name] if (isnull(quirk)) diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index 343aff49144..cf6fb2e0d80 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -61,7 +61,7 @@ //SKYRAT EDIT END var/list/new_quirks = preferences.all_quirks | quirk_name - if (SSquirks.filter_invalid_quirks(new_quirks) != new_quirks) + if (SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// SKYRAT EDIT - AUGMENTS+ // 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. @@ -77,10 +77,7 @@ 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) != new_quirks \ - ) + if (!(quirk_name in preferences.all_quirks) || SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// SKYRAT EDIT - AUGMENTS+ // 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. diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index bce9abd251a..169557537a5 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -312,7 +312,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(job_preferences[j] != JP_LOW && job_preferences[j] != JP_MEDIUM && job_preferences[j] != JP_HIGH) job_preferences -= j - all_quirks = SSquirks.filter_invalid_quirks(SANITIZE_LIST(all_quirks)) + all_quirks = SSquirks.filter_invalid_quirks(SANITIZE_LIST(all_quirks), augments)// SKYRAT EDIT - AUGMENTS+ validate_quirks() return TRUE diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm b/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm index 7480b1cb87c..9788dd3c624 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm @@ -63,6 +63,11 @@ preferences.augments -= limbs_to_process[limb_slot] else preferences.augments[limbs_to_process[limb_slot]] = augment_to_path[augment_name] + // Remove some positive quirks if the point balance becomes too low. + var/list/filtered_quirks = SSquirks.filter_invalid_quirks(preferences.all_quirks, preferences.augments) + if(filtered_quirks != preferences.all_quirks) + preferences.all_quirks = filtered_quirks + preferences.update_static_data(user) preferences.character_preview_view.update_body() return TRUE @@ -183,6 +188,11 @@ preferences.augments -= organs_to_process[organ_slot] else preferences.augments[organs_to_process[organ_slot]] = augment_to_path[augment_name] + // Remove some positive quirks if the point balance becomes too low. + var/list/filtered_quirks = SSquirks.filter_invalid_quirks(preferences.all_quirks, preferences.augments) + if(filtered_quirks != preferences.all_quirks) + preferences.all_quirks = filtered_quirks + preferences.update_static_data(user) preferences.character_preview_view.update_body() return TRUE