From b08a5d8f9ac6bf21266746d44f6832ac1ea4015d Mon Sep 17 00:00:00 2001
From: Vi3trice <80771500+Vi3trice@users.noreply.github.com>
Date: Thu, 12 Oct 2023 10:35:03 -0400
Subject: [PATCH] Add edge cases to summon item spell, and tweak to feedback if
object is hidden (#22710)
* Cavities and implants, oh my
* Headpockets too, and sneaky summons now
* Update summonitem.dm
* Update summonitem.dm
---
code/datums/spells/summonitem.dm | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/code/datums/spells/summonitem.dm b/code/datums/spells/summonitem.dm
index fe7aa7da854..1030621065b 100644
--- a/code/datums/spells/summonitem.dm
+++ b/code/datums/spells/summonitem.dm
@@ -55,9 +55,22 @@
else //Getting previously marked item
var/obj/item_to_retrieve = marked_item
+ var/visible_item = TRUE //Items that silently disappear will have the message suppressed
var/infinite_recursion = 0 //I don't want to know how someone could put something inside itself but these are wizards so let's be safe
while(!isturf(item_to_retrieve.loc) && infinite_recursion < 10) //if it's in something you get the whole thing.
+ if(istype(item_to_retrieve.loc, /obj/item/organ/internal/headpocket))
+ var/obj/item/organ/internal/headpocket/pocket = item_to_retrieve.loc
+ if(pocket.owner)
+ to_chat(pocket.owner, "Your [pocket.name] suddenly feels lighter. How strange!")
+ visible_item = FALSE
+ break
+ if(istype(item_to_retrieve.loc, /obj/item/storage/hidden/implant)) //The implant should be left alone
+ var/obj/item/storage/S = item_to_retrieve.loc
+ for(var/mob/M in S.mobs_viewing)
+ to_chat(M, "[item_to_retrieve] suddenly disappears!")
+ visible_item = FALSE
+ break
if(ismob(item_to_retrieve.loc)) //If its on someone, properly drop it
var/mob/M = item_to_retrieve.loc
@@ -78,9 +91,14 @@
if(!C.has_embedded_objects())
C.clear_alert("embeddedobject")
break
+ if(item_to_retrieve == part.hidden)
+ visible_item = FALSE
+ part.hidden = null
+ to_chat(C, "Your [part.name] suddenly feels emptier. How weird!")
+ break
else
- if(istype(item_to_retrieve.loc,/obj/machinery/atmospherics/portable/)) //Edge cases for moved machinery
+ if(istype(item_to_retrieve.loc, /obj/machinery/atmospherics/portable/)) //Edge cases for moved machinery
var/obj/machinery/atmospherics/portable/P = item_to_retrieve.loc
P.disconnect()
P.update_icon()
@@ -100,8 +118,8 @@
if(!isturf(target.loc))
to_chat(target, "You attempt to cast the spell, but it fails! Perhaps you aren't available?")
return
-
- item_to_retrieve.loc.visible_message("[item_to_retrieve] suddenly disappears!")
+ if(visible_item)
+ item_to_retrieve.loc.visible_message("[item_to_retrieve] suddenly disappears!")
if(target.hand) //left active hand