From 17362e5881a1f638ede34ffcc8667223809fa1c5 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 25 Feb 2024 13:41:28 -0300 Subject: [PATCH] push em --- .../subsystem/processing/quirks.dm | 5 ++-- code/modules/client/preferences_savefile.dm | 22 +++++++++++++++++ .../subsystem/processing/quirks.dm | 24 +++++++++++++++++++ .../modules/client/loadout/accessories.dm | 10 ++++---- 4 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 modular_sand/code/controllers/subsystem/processing/quirks.dm diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 14c6c8aa26..334b661761 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -55,7 +55,6 @@ PROCESSING_SUBSYSTEM_DEF(quirks) if(S.remove_blacklisted_quirks(H)) to_chat(to_chat_target || user, "Some quirks have been cut from your character due to them conflicting with your species: [english_list(S.removed_quirks)]") - /datum/controller/subsystem/processing/quirks/proc/quirk_path_by_name(name) return quirks[name] @@ -106,14 +105,14 @@ PROCESSING_SUBSYSTEM_DEF(quirks) points_used -= points if(points_used <= 0) break - */ - //Nah, let's null all non-neutrals out. + //Nah, let's null all non-neutrals out. if (pointscut < 0)// only if the pointscutting didn't work. if(cut.len) for(var/i in our_quirks) if(quirk_points_by_name(i) != 0) //cut += i -- Commented out: Only show the ones that triggered the quirk purge. our_quirks -= i + */ return cut diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b30d022d40..e413abbfb3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -937,6 +937,28 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //gear loadout if(S["loadout"]) loadout_data = safe_json_decode(S["loadout"]) + var/list/sanitize_current_slot = loadout_data["SAVE_[loadout_slot]"] + + for(var/list/entry in sanitize_current_slot) + for(var/setting in entry) + switch(setting) + if(LOADOUT_ITEM) + if(!ispath(entry[setting])) + continue + if(LOADOUT_COLOR) + if(islist(entry[setting])) + for(var/polychromic in entry[setting]) + if(!findtext(polychromic, GLOB.is_color)) + polychromic = "#FFFFFF" + else + entry -= setting + + if(LOADOUT_CUSTOM_NAME) + entry[setting] = trim(html_encode(entry[setting]), MAX_NAME_LEN) + if(LOADOUT_CUSTOM_DESCRIPTION) + entry[setting] = trim(html_encode(entry[setting]), 500) + + loadout_data["SAVE_[loadout_slot]"] = sanitize_current_slot.Copy() else loadout_data = list() diff --git a/modular_sand/code/controllers/subsystem/processing/quirks.dm b/modular_sand/code/controllers/subsystem/processing/quirks.dm new file mode 100644 index 0000000000..9c9f6826d4 --- /dev/null +++ b/modular_sand/code/controllers/subsystem/processing/quirks.dm @@ -0,0 +1,24 @@ +/datum/controller/subsystem/processing/quirks/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target) + . = ..() + var/list/my_quirks = cli.prefs.all_quirks.Copy() + var/list/cut_because_balance = check_and_cut_balance(my_quirks) + if(LAZYLEN(cut_because_balance)) + to_chat(to_chat_target || user, span_boldwarning("Some quirks have been cut from your character due to invalid balance: [english_list(cut_because_balance)]")) + +/// Code to automatically reduce positive quirks until balance is even. +/datum/controller/subsystem/processing/quirks/proc/check_and_cut_balance(list/our_quirks) + var/list/cut = list() + var/points_used = total_points(our_quirks) + + if(points_used > 0) + //they owe us points, let's collect. + for(var/i in our_quirks) + var/points = quirk_points_by_name(i) + if(points > 0) + cut += i + our_quirks -= i + points_used -= points + if(points_used <= 0) + break + + return cut diff --git a/modular_sand/code/modules/client/loadout/accessories.dm b/modular_sand/code/modules/client/loadout/accessories.dm index 61562dd38b..2ba42efe74 100644 --- a/modular_sand/code/modules/client/loadout/accessories.dm +++ b/modular_sand/code/modules/client/loadout/accessories.dm @@ -1,21 +1,21 @@ -/datum/gear/accessories/ring +/datum/gear/accessory/ring slot = ITEM_SLOT_ACCESSORY -/datum/gear/accessories/ring/goldring +/datum/gear/accessory/ring/goldring name = "A gold ring" path = /obj/item/clothing/accessory/ring cost = 2 -/datum/gear/accessories/ring/silverring +/datum/gear/accessory/ring/silverring name = "A silver ring" path = /obj/item/clothing/accessory/ring/silver cost = 2 -/datum/gear/accessories/ring/diamondring +/datum/gear/accessory/ring/diamondring name = "A diamond ring" path = /obj/item/clothing/accessory/ring/diamond cost = 4 -/datum/gear/accessories/ring/customring +/datum/gear/accessory/ring/customring name = "A ring, renameable" path = /obj/item/clothing/accessory/ring/custom