From 2729331d93224093ebbf95d5011a4c302d87e487 Mon Sep 17 00:00:00 2001 From: nikothedude <59709059+nikothedude@users.noreply.github.com> Date: Sun, 31 May 2026 12:29:01 -0400 Subject: [PATCH] Fixes item quirks giving items on charslot change (#5671) ## About The Pull Request Title. Closes https://github.com/Bubberstation/Bubberstation/issues/5632 The exact implementation is a new variable on quirks that qdels the items they spawn or early returns if its a path. Family heirloom and medicine allergy are exempt. ## Why It's Good For The Game bugs bad ## Proof Of Testing
Screenshots/Videos image ignore the runtimes thats a tg error
## Changelog :cl: fix: Item quirks no longer give items on char slot change /:cl: --- code/datums/quirks/_quirk.dm | 8 ++++++++ .../code/self_actualization_device.dm | 2 +- .../code/controllers/subsystem/processing/quirks.dm | 5 ++++- modular_zubbers/code/datums/quirks/_quirk.dm | 12 ++++++++++++ .../code/datums/quirks/negative_quirks/allergies.dm | 2 ++ .../datums/quirks/negative_quirks/family_heirloom.dm | 1 + .../customization/species/lycans/lycan_status.dm | 4 ++-- .../living/carbon/human/species_types/slimepeople.dm | 2 +- tgstation.dme | 1 + 9 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 modular_zubbers/code/datums/quirks/negative_quirks/allergies.dm diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm index 12a47f8c326..f1d96dc1534 100644 --- a/code/datums/quirks/_quirk.dm +++ b/code/datums/quirks/_quirk.dm @@ -224,6 +224,14 @@ * * notify_player - If TRUE, adds strings to where_items_spawned list to be output to the player in [/datum/quirk/item_quirk/post_add()] */ /datum/quirk/item_quirk/proc/give_item_to_holder(obj/item/quirk_item, list/valid_slots, flavour_text = null, default_location = "at your feet", notify_player = FALSE) + // BUBBER EDIT ADDITION BEGIN - dont give items on quirk reapply + if (item_giving_paused && !always_spawn_item) + if (ispath(quirk_item)) + return // nothing needs to be done + qdel(quirk_item) + return + // BUBBER EDIT ADDITION END + if(ispath(quirk_item)) quirk_item = new quirk_item(get_turf(quirk_holder)) diff --git a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm index b06b0d4c7d4..c2011ad64b9 100644 --- a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm +++ b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm @@ -230,7 +230,7 @@ var/datum/species/ethereal/ethereal = patient.dna.species ethereal.refresh_light_color(patient) open_machine() - SSquirks.OverrideQuirks(patient, patient.client) + SSquirks.OverrideQuirks(patient, patient.client, spawn_items = FALSE) /// Ejection and shut down of the machine, used before the preferences have been applied to the player. Damage optional. /obj/machinery/self_actualization_device/proc/eject_old_you(damaged_goods = FALSE) diff --git a/modular_zubbers/code/controllers/subsystem/processing/quirks.dm b/modular_zubbers/code/controllers/subsystem/processing/quirks.dm index 0f158108e10..94416671016 100644 --- a/modular_zubbers/code/controllers/subsystem/processing/quirks.dm +++ b/modular_zubbers/code/controllers/subsystem/processing/quirks.dm @@ -4,7 +4,7 @@ var/cleanup = TRUE /// Remove any quirks that the client's prefs do not have, and apply any new ones -/datum/controller/subsystem/processing/quirks/proc/OverrideQuirks(mob/living/user, client/applied_client) +/datum/controller/subsystem/processing/quirks/proc/OverrideQuirks(mob/living/user, client/applied_client, spawn_items = TRUE) var/list/required_quirks = applied_client.prefs.all_quirks var/list/present_quirks = list() for(var/datum/quirk/quirk in user.quirks) @@ -16,5 +16,8 @@ var/existing_quirk = present_quirks[quirk_name] var/quirk_type = quirks[quirk_name] var/datum/quirk/quirk = new quirk_type + if (!spawn_items) + quirk.set_item_giving_paused(TRUE) quirk.add_to_holder(user, existing_quirk, applied_client) + quirk.set_item_giving_paused(FALSE) diff --git a/modular_zubbers/code/datums/quirks/_quirk.dm b/modular_zubbers/code/datums/quirks/_quirk.dm index 776602b3f96..100cda565ef 100644 --- a/modular_zubbers/code/datums/quirks/_quirk.dm +++ b/modular_zubbers/code/datums/quirks/_quirk.dm @@ -6,6 +6,18 @@ /// Whitelist of species for this quirk var/list/species_whitelist = null +/datum/quirk/item_quirk + /// If TRUE, giving an item to our holder will instead delete it. Used for quirk reapplying. + var/item_giving_paused = FALSE + /// if TRUE, item_giving_paused is ignored. + var/always_spawn_item = FALSE + +/datum/quirk/proc/set_item_giving_paused(new_value) + return + +/datum/quirk/item_quirk/set_item_giving_paused(new_value) + item_giving_paused = new_value + /datum/quirk/is_species_appropriate(datum/species/mob_species) if(LAZYLEN(species_blacklist) && (mob_species.id in species_blacklist)) return FALSE diff --git a/modular_zubbers/code/datums/quirks/negative_quirks/allergies.dm b/modular_zubbers/code/datums/quirks/negative_quirks/allergies.dm new file mode 100644 index 00000000000..4461ab9e291 --- /dev/null +++ b/modular_zubbers/code/datums/quirks/negative_quirks/allergies.dm @@ -0,0 +1,2 @@ +/datum/quirk/item_quirk/allergic + always_spawn_item = TRUE diff --git a/modular_zubbers/code/datums/quirks/negative_quirks/family_heirloom.dm b/modular_zubbers/code/datums/quirks/negative_quirks/family_heirloom.dm index 5c9ff1a4928..8c6fda1ff7b 100644 --- a/modular_zubbers/code/datums/quirks/negative_quirks/family_heirloom.dm +++ b/modular_zubbers/code/datums/quirks/negative_quirks/family_heirloom.dm @@ -7,6 +7,7 @@ GLOBAL_LIST_INIT(invalid_heirloom_types, typecacheof(list( /datum/quirk/item_quirk/family_heirloom /// The temporary mark action we give to users who have opted out of random items. var/datum/action/mark_family_heirloom/mark_action + always_spawn_item = TRUE /datum/quirk/item_quirk/family_heirloom/remove() . = ..() diff --git a/modular_zubbers/code/modules/customization/species/lycans/lycan_status.dm b/modular_zubbers/code/modules/customization/species/lycans/lycan_status.dm index 8674359b705..85d84626936 100644 --- a/modular_zubbers/code/modules/customization/species/lycans/lycan_status.dm +++ b/modular_zubbers/code/modules/customization/species/lycans/lycan_status.dm @@ -45,7 +45,7 @@ target_client.prefs.safe_transfer_prefs_to_with_damage(human_owner) human_owner.real_name = name human_owner.name = name - SSquirks.OverrideQuirks(human_owner, target_client) + SSquirks.OverrideQuirks(human_owner, target_client, spawn_items = FALSE) human_owner.dna.update_dna_identity() target_client.prefs.load_character(lycan_brain.last_slot) @@ -73,7 +73,7 @@ else target_client.prefs.load_character(lycan_brain.last_slot) target_client.prefs.safe_transfer_prefs_to_with_damage(human_owner) - SSquirks.OverrideQuirks(human_owner, target_client) + SSquirks.OverrideQuirks(human_owner, target_client, spawn_items = FALSE) human_owner.dna.update_dna_identity() else human_owner.set_species(initial_species, TRUE, TRUE, FALSE) diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/slimepeople.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/slimepeople.dm index a545533e7da..f99a1917d81 100644 --- a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/slimepeople.dm +++ b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/slimepeople.dm @@ -700,7 +700,7 @@ target.apply_status_effect(/datum/status_effect/shapeshift_transformed, original_name) char_source.safe_transfer_prefs_to_with_damage(target) target.dna.update_dna_identity() - SSquirks.OverrideQuirks(target, char_source.parent) + SSquirks.OverrideQuirks(target, char_source.parent, spawn_items = FALSE) var/output = "[key_name(target)] has been transformed by [key_name(alterer)] using polymorph, at [loc_name(target)]. Original Name: [original_name], New Name: [target.dna.real_name]." message_admins(output) diff --git a/tgstation.dme b/tgstation.dme index f1675c645e6..a6f44b92ad5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9046,6 +9046,7 @@ #include "modular_zubbers\code\datums\mutations\visuals_override.dm" #include "modular_zubbers\code\datums\quirks\_quirk.dm" #include "modular_zubbers\code\datums\quirks\negative_quirks\all_nighter.dm" +#include "modular_zubbers\code\datums\quirks\negative_quirks\allergies.dm" #include "modular_zubbers\code\datums\quirks\negative_quirks\blooddeficiency.dm" #include "modular_zubbers\code\datums\quirks\negative_quirks\bloodloss_dusting.dm" #include "modular_zubbers\code\datums\quirks\negative_quirks\brainproblems.dm"