From dd8af457150af71caed4df66b145a1713c754540 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Fri, 10 Oct 2025 17:16:15 -0500 Subject: [PATCH] Fix soup pots being unreachable (#93377) ## About The Pull Request Caused by #93165 I'm not sure but I think this was just missing a check for `TRAIT_SKIP_BASIC_REACH_CHECK`, because soup pots are given that trait ## Changelog :cl: Melbert fix: You can interact with soup pots on stoves again /:cl: --- code/_globalvars/traits/_traits.dm | 4 ++-- code/_onclick/click.dm | 4 +++- .../antagonists/heretic/magic/flesh_surgery.dm | 4 ++-- .../food_and_drinks/machinery/stove_component.dm | 5 ++--- code/modules/unit_tests/_unit_tests.dm | 1 + code/modules/unit_tests/reachable_soup.dm | 13 +++++++++++++ 6 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 code/modules/unit_tests/reachable_soup.dm diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 288e055d535..2d64985f28f 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -680,13 +680,13 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_OMNI_BAIT" = TRAIT_OMNI_BAIT, "TRAIT_PLANT_WILDMUTATE" = TRAIT_PLANT_WILDMUTATE, "TRAIT_POISONOUS_BAIT" = TRAIT_POISONOUS_BAIT, - "TRAIT_T_RAY_VISIBLE" = TRAIT_T_RAY_VISIBLE, + "TRAIT_SKIP_BASIC_REACH_CHECK" = TRAIT_SKIP_BASIC_REACH_CHECK, "TRAIT_TRANSFORM_ACTIVE" = TRAIT_TRANSFORM_ACTIVE, + "TRAIT_T_RAY_VISIBLE" = TRAIT_T_RAY_VISIBLE, "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, "TRAIT_UNCOMPOSTABLE" = TRAIT_UNCOMPOSTABLE, "TRAIT_UNIQUE_AQUARIUM_CONTENT" = TRAIT_UNIQUE_AQUARIUM_CONTENT, "TRAIT_WIELDED" = TRAIT_WIELDED, - "TRAIT_SKIP_BASIC_REACH_CHECK" = TRAIT_SKIP_BASIC_REACH_CHECK, ), /obj/item/ammo_casing = list( "TRAIT_DART_HAS_INSERT" = TRAIT_DART_HAS_INSERT, diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 042d95b9a88..ee1aa3633d1 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -227,7 +227,9 @@ if(depth <= 0) return FALSE - if(isnull(loc) || isarea(loc) || !loc.IsContainedAtomAccessible(src, user)) + if(isnull(loc) || isarea(loc)) + return FALSE + if(!HAS_TRAIT(src, TRAIT_SKIP_BASIC_REACH_CHECK) && !loc.IsContainedAtomAccessible(src, user)) return FALSE return loc.IsReachableBy(user, reacher_range, depth, direct_access) diff --git a/code/modules/antagonists/heretic/magic/flesh_surgery.dm b/code/modules/antagonists/heretic/magic/flesh_surgery.dm index 4b0aa96fbc7..c50b9c81e12 100644 --- a/code/modules/antagonists/heretic/magic/flesh_surgery.dm +++ b/code/modules/antagonists/heretic/magic/flesh_surgery.dm @@ -126,7 +126,7 @@ /datum/action/cooldown/spell/touch/flesh_surgery/proc/register_held_organ(obj/item/organ/new_held_organ, obj/item/melee/touch_attack/hand) hand.vis_contents += new_held_organ held_organ = new_held_organ - ADD_TRAIT(new_held_organ, TRAIT_SKIP_BASIC_REACH_CHECK, ref(src)) + ADD_TRAIT(new_held_organ, TRAIT_SKIP_BASIC_REACH_CHECK, REF(src)) new_held_organ.vis_flags |= VIS_INHERIT_PLANE RegisterSignal(new_held_organ, COMSIG_MOVABLE_MOVED, PROC_REF(unregister_held_organ)) RegisterSignal(new_held_organ, COMSIG_QDELETING, PROC_REF(unregister_held_organ)) @@ -139,7 +139,7 @@ /datum/action/cooldown/spell/touch/flesh_surgery/proc/unregister_held_organ(obj/item/organ/removed_organ) LAZYREMOVE(attached_hand.vis_contents, removed_organ) held_organ = null - REMOVE_TRAIT(removed_organ, TRAIT_SKIP_BASIC_REACH_CHECK, ref(src)) + REMOVE_TRAIT(removed_organ, TRAIT_SKIP_BASIC_REACH_CHECK, REF(src)) removed_organ.vis_flags &= ~VIS_INHERIT_PLANE UnregisterSignal(removed_organ, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) // Reset item offsets diff --git a/code/modules/food_and_drinks/machinery/stove_component.dm b/code/modules/food_and_drinks/machinery/stove_component.dm index 71e80474c63..824041ac86d 100644 --- a/code/modules/food_and_drinks/machinery/stove_component.dm +++ b/code/modules/food_and_drinks/machinery/stove_component.dm @@ -217,7 +217,7 @@ /datum/component/stove/proc/add_container(obj/item/new_container, mob/user) var/obj/real_parent = parent real_parent.vis_contents += new_container - ADD_TRAIT(new_container, TRAIT_SKIP_BASIC_REACH_CHECK, ref(src)) + ADD_TRAIT(new_container, TRAIT_SKIP_BASIC_REACH_CHECK, REF(src)) new_container.vis_flags |= VIS_INHERIT_PLANE container = new_container @@ -230,7 +230,7 @@ /datum/component/stove/proc/remove_container() var/obj/real_parent = parent - REMOVE_TRAIT(container, TRAIT_SKIP_BASIC_REACH_CHECK, ref(src)) + REMOVE_TRAIT(container, TRAIT_SKIP_BASIC_REACH_CHECK, REF(src)) container.vis_flags &= ~VIS_INHERIT_PLANE real_parent.vis_contents -= container @@ -274,4 +274,3 @@ return var/obj/effect/abstract/shared_particle_holder/soup_smoke = obj_parent.add_shared_particles(particle_type, "[particle_type]_stove_[container_x]") soup_smoke.particles.position = list(container_x, round(ICON_SIZE_Y * 0.66), 0) - diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 299f2dc3f37..ba1a26b6883 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -253,6 +253,7 @@ #include "quirks.dm" #include "range_return.dm" #include "rcd.dm" +#include "reachable_soup.dm" #include "reagent_container_defaults.dm" #include "reagent_id_typos.dm" #include "reagent_mob_expose.dm" diff --git a/code/modules/unit_tests/reachable_soup.dm b/code/modules/unit_tests/reachable_soup.dm new file mode 100644 index 00000000000..809699d7671 --- /dev/null +++ b/code/modules/unit_tests/reachable_soup.dm @@ -0,0 +1,13 @@ +/datum/unit_test/reachable_soup + +/datum/unit_test/reachable_soup/Run() + var/obj/machinery/oven/range/range = EASY_ALLOCATE() + var/obj/item/reagent_containers/cup/soup_pot/soup = EASY_ALLOCATE() + var/mob/living/carbon/human/dummy = EASY_ALLOCATE() + + dummy.put_in_active_hand(soup) + click_wrapper(dummy, range) + TEST_ASSERT_EQUAL(soup.loc, range, "Soup pot should have been placed on the stove.") + + click_wrapper(dummy, soup) + TEST_ASSERT_EQUAL(soup.loc, dummy, "Soup pot should have been picked up by the dummy.")