From cf056641d3b83ff1f7c2a40b81f4bc53248ab04b Mon Sep 17 00:00:00 2001
From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
Date: Sun, 3 Mar 2024 20:52:57 +0100
Subject: [PATCH] dgdsg (#18575)
---
aurorastation.dme | 1 +
.../signals/signals_object/signals_object.dm | 9 ++++
.../gamemodes/changeling/implements/items.dm | 4 +-
.../technomancer/devices/gloves_of_regen.dm | 2 +-
code/game/objects/items.dm | 26 ++++++----
code/game/objects/items/defib.dm | 2 +-
.../objects/items/weapons/cigs_lighters.dm | 2 +-
.../objects/items/weapons/cloaking_device.dm | 2 +-
.../items/weapons/material/twohanded.dm | 2 +-
.../objects/items/weapons/melee/energy.dm | 2 +-
.../items/weapons/storage/laundry_basket.dm | 4 +-
.../objects/items/weapons/storage/storage.dm | 2 +-
code/modules/assembly/signaler.dm | 2 +-
code/modules/battlemonsters/items/core.dm | 2 +-
code/modules/cargo/delivery/package.dm | 2 +-
code/modules/clothing/spacesuits/rig/rig.dm | 2 +-
.../modules/clothing/spacesuits/spacesuits.dm | 2 +-
code/modules/games/cards.dm | 2 +-
.../mob/living/silicon/robot/inventory.dm | 4 +-
.../mob/living/silicon/robot/items/gripper.dm | 19 +++++++-
.../overmap/ship_weaponry/_ship_ammunition.dm | 2 +-
code/modules/paperwork/paper_bundle.dm | 2 +-
code/modules/projectiles/gun.dm | 4 +-
code/modules/projectiles/guns/energy.dm | 2 +-
.../projectiles/guns/energy/special.dm | 2 +-
.../psionics/equipment/psipower_blade.dm | 2 +-
code/modules/recycling/sortingmachinery.dm | 2 +-
code/modules/telesci/gps.dm | 2 +-
html/changelogs/fluffyghost-fixdrop.yml | 47 +++++++++++++++++++
29 files changed, 119 insertions(+), 39 deletions(-)
create mode 100644 code/__DEFINES/dcs/signals/signals_object/signals_object.dm
create mode 100644 html/changelogs/fluffyghost-fixdrop.yml
diff --git a/aurorastation.dme b/aurorastation.dme
index 6444a90b396..aebcb16fcba 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -145,6 +145,7 @@
#include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_movable.dm"
#include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_x_act.dm"
#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_main.dm"
+#include "code\__DEFINES\dcs\signals\signals_object\signals_object.dm"
#include "code\__HELPERS\_global_objects.dm"
#include "code\__HELPERS\_lists.dm"
#include "code\__HELPERS\_string_lists.dm"
diff --git a/code/__DEFINES/dcs/signals/signals_object/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object/signals_object.dm
new file mode 100644
index 00000000000..1cb47de99a0
--- /dev/null
+++ b/code/__DEFINES/dcs/signals/signals_object/signals_object.dm
@@ -0,0 +1,9 @@
+// Object signals. Format:
+// When the signal is called: (signal arguments)
+// All signals send the source datum of the signal as the first argument
+
+
+// /obj/item signals
+
+///from base of obj/item/dropped(): (mob/user)
+#define COMSIG_ITEM_DROPPED "item_drop"
diff --git a/code/game/gamemodes/changeling/implements/items.dm b/code/game/gamemodes/changeling/implements/items.dm
index b31c4e91b63..3636cbff148 100644
--- a/code/game/gamemodes/changeling/implements/items.dm
+++ b/code/game/gamemodes/changeling/implements/items.dm
@@ -28,7 +28,7 @@
STOP_PROCESSING(SSprocessing, src)
return ..()
-/obj/item/melee/arm_blade/dropped(var/mob/living/user)
+/obj/item/melee/arm_blade/dropped(mob/user)
. = ..()
visible_message("With a sickening crunch, [user] reforms their arm blade into an arm!",
"You hear organic matter ripping and tearing!")
@@ -86,7 +86,7 @@
STOP_PROCESSING(SSprocessing, src)
return ..()
-/obj/item/shield/riot/changeling/dropped(var/mob/living/user)
+/obj/item/shield/riot/changeling/dropped(mob/user)
. = ..()
visible_message("With a sickening crunch, [user] reforms their shield into an arm!",
"You hear organic matter ripping and tearing!")
diff --git a/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm b/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm
index 85b14c634b3..9dadb2ff304 100644
--- a/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm
+++ b/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm
@@ -28,7 +28,7 @@
wearer.custom_pain("You feel a sharp pain in your hands!",1)
..()
-/obj/item/clothing/gloves/regen/dropped(var/mob/living/carbon/human/H)
+/obj/item/clothing/gloves/regen/dropped(mob/user)
..()
if(wearer)
if(wearer.can_feel_pain())
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index c77decdcfac..2041dc064b4 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -454,14 +454,27 @@
playsound(src, drop_sound, THROW_SOUND_VOLUME)
return ..()
-//Apparently called whenever an item is dropped on the floor, thrown, or placed into a container.
-//It is called after loc is set, so if placed in a container its loc will be that container.
-/obj/item/proc/dropped(var/mob/user)
+/**
+ * Called when an item is removed from a `/mob` inventory (including hands and whatnot),
+ * for whatever reason (dropped on the floor, thrown, put in a container, etc.)
+ *
+ * This is called after the _new_ location (`loc`) is set on the object, so if it's eg. put in a container,
+ * the loc inside here would point to the container, not the mob that had it in hand
+ *
+ * * user - The `/mob` that dropped the object
+ */
+/obj/item/proc/dropped(mob/user)
SHOULD_CALL_PARENT(TRUE)
+
remove_item_verbs(user)
+
+ if(item_flags & ITEM_FLAG_HELD_MAP_TEXT)
+ check_maptext()
+
if(zoom)
zoom(user) //binoculars, scope, etc
- SEND_SIGNAL(src, COMSIG_ITEM_REMOVE, src)
+
+ SEND_SIGNAL(src, COMSIG_ITEM_DROPPED, user)
/obj/item/proc/remove_item_verbs(mob/user)
if(ismech(user)) //very snowflake, but necessary due to how mechs work
@@ -1150,11 +1163,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
if(item_flags & ITEM_FLAG_HELD_MAP_TEXT)
check_maptext()
-/obj/item/dropped(var/mob/user)
- ..()
- if(item_flags & ITEM_FLAG_HELD_MAP_TEXT)
- check_maptext()
-
// used to check whether the item is capable of popping things like balloons, inflatable barriers, or cutting police tape.
/obj/item/proc/can_puncture()
if(sharp || edge)
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index e15cb5485b3..4ec9e7e2d03 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -276,7 +276,7 @@
name = initial(name)
update_icon()
-/obj/item/shockpaddles/dropped(var/mob/living/user)
+/obj/item/shockpaddles/dropped(mob/user)
..()
if(user)
var/obj/item/offhand/O = user.get_inactive_hand()
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 1090e590e7d..e0be183acdf 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -94,7 +94,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.visible_message("In a feat of redundancy, [user] lights \the [src] using \the [attacking_item].", range = 3)
light()
-/obj/item/flame/match/dropped(mob/user as mob)
+/obj/item/flame/match/dropped(mob/user)
if(lit)
spawn(0)
var/turf/location = src.loc // Light up the turf we land on.
diff --git a/code/game/objects/items/weapons/cloaking_device.dm b/code/game/objects/items/weapons/cloaking_device.dm
index 880d3057eb8..4bc34d06f66 100644
--- a/code/game/objects/items/weapons/cloaking_device.dm
+++ b/code/game/objects/items/weapons/cloaking_device.dm
@@ -39,7 +39,7 @@
register_owner(user)
//Handles dropped or thrown cloakers
-/obj/item/cloaking_device/dropped(var/mob/user)
+/obj/item/cloaking_device/dropped(mob/user)
..()
var/mob/M = get_holding_mob()
if(!M)
diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm
index 75c62978cdb..4729af0796f 100644
--- a/code/game/objects/items/weapons/material/twohanded.dm
+++ b/code/game/objects/items/weapons/material/twohanded.dm
@@ -83,7 +83,7 @@
O.unwield()
return ..()
-/obj/item/material/twohanded/dropped(mob/user as mob)
+/obj/item/material/twohanded/dropped(mob/user)
. = ..()
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
if(user)
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index 62e0ce8f9cf..36f278f203c 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -39,7 +39,7 @@
edge = initial(edge)
w_class = initial(w_class)
-/obj/item/melee/energy/dropped(var/mob/user)
+/obj/item/melee/energy/dropped(mob/user)
..()
if(!istype(loc,/mob))
deactivate(user)
diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm
index 57dd70dfa80..e39fe6b9684 100644
--- a/code/game/objects/items/weapons/storage/laundry_basket.dm
+++ b/code/game/objects/items/weapons/storage/laundry_basket.dm
@@ -64,7 +64,7 @@
else
return ..()
-/obj/item/storage/laundry_basket/dropped(mob/user as mob)
+/obj/item/storage/laundry_basket/dropped(mob/user)
qdel(linked)
return ..()
@@ -84,7 +84,7 @@
pickup_sound = null
equip_sound = null
-/obj/item/storage/laundry_basket/offhand/dropped(mob/user as mob)
+/obj/item/storage/laundry_basket/offhand/dropped(mob/user)
. = ..()
user.drop_from_inventory(linked)
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 54ba9614a24..b4e78be2b68 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -745,7 +745,7 @@
attacking_item.add_fingerprint(user)
return handle_item_insertion(attacking_item, null, user)
-/obj/item/storage/dropped(mob/user as mob)
+/obj/item/storage/dropped(mob/user)
return ..()
/obj/item/storage/attack_hand(mob/user)
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 101f238beb9..4620f984726 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -138,7 +138,7 @@
radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT)
//Triggers the deadmanswitch if its dropped or moved into ones backpack
-/obj/item/device/assembly/signaler/dropped(var/mob/user)
+/obj/item/device/assembly/signaler/dropped(mob/user)
. = ..()
if(deadman)
if(!user.client)
diff --git a/code/modules/battlemonsters/items/core.dm b/code/modules/battlemonsters/items/core.dm
index 5dd4bc8fb1e..8777f550c32 100644
--- a/code/modules/battlemonsters/items/core.dm
+++ b/code/modules/battlemonsters/items/core.dm
@@ -4,7 +4,7 @@
var/facedown = TRUE
var/rotated = FALSE
-/obj/item/battle_monsters/dropped(mob/user as mob)
+/obj/item/battle_monsters/dropped(mob/user)
set_dir(user.dir)
if(rotated)
set_dir(turn(dir,90))
diff --git a/code/modules/cargo/delivery/package.dm b/code/modules/cargo/delivery/package.dm
index 91ac379322d..f37e71d5984 100644
--- a/code/modules/cargo/delivery/package.dm
+++ b/code/modules/cargo/delivery/package.dm
@@ -86,7 +86,7 @@
O.desc = "Your second grip on \the [initial(name)]."
user.put_in_inactive_hand(O)
-/obj/item/cargo_package/dropped(var/mob/living/user)
+/obj/item/cargo_package/dropped(mob/user)
..()
item_state = initial(item_state)
if(user)
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 6b5798ffb2e..7012f4faee7 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -800,7 +800,7 @@
..()
null_wearer(user)
-/obj/item/rig/dropped(var/mob/user)
+/obj/item/rig/dropped(mob/user)
..()
if(user.client)
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index a391fae55ff..bc2817e0bc0 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -75,7 +75,7 @@
check_limb_support()
..()
-/obj/item/clothing/suit/space/dropped(var/mob/user)
+/obj/item/clothing/suit/space/dropped(mob/user)
check_limb_support(user)
..()
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index 332ac8df778..f53d20a4e27 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -336,7 +336,7 @@
add_overlay(I)
i++
-/obj/item/hand/dropped(mob/user as mob)
+/obj/item/hand/dropped(mob/user)
. = ..()
if(locate(/obj/structure/table, loc))
src.update_icon(user.dir)
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index 7856ff22d4a..e16e7f16acd 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -255,7 +255,7 @@
if(istype(module_active, /obj/item/gripper))
var/obj/item/gripper/G = module_active
if(G.wrapped == O)
- G.drop(get_turf(src), FALSE) //We don't need to see the "released X item" message if we're putting stuff in fridges and the like.
+ G.drop(get_turf(src), src, FALSE) //We don't need to see the "released X item" message if we're putting stuff in fridges and the like.
/mob/living/silicon/robot/drop_item()
if(istype(module_active, /obj/item/gripper))
@@ -272,7 +272,7 @@
target = loc
if (istype(W.loc, /obj/item/gripper))
var/obj/item/gripper/G = W.loc
- G.drop(target, do_feedback)
+ G.drop(target, src, do_feedback)
return TRUE
return FALSE
diff --git a/code/modules/mob/living/silicon/robot/items/gripper.dm b/code/modules/mob/living/silicon/robot/items/gripper.dm
index 57329e1d0dc..ec8ff84e8bf 100644
--- a/code/modules/mob/living/silicon/robot/items/gripper.dm
+++ b/code/modules/mob/living/silicon/robot/items/gripper.dm
@@ -107,7 +107,7 @@
/obj/item/gripper/CtrlClick(mob/user)
if(wrapped)
- drop(get_turf(src))
+ drop(get_turf(src), user)
return
to_chat(user, SPAN_WARNING("\The [src] isn't gripping anything!"))
@@ -118,7 +118,21 @@
drop(get_turf(src), usr)
-/obj/item/gripper/proc/drop(var/atom/target, mob/user, var/feedback = TRUE)
+/**
+ * Drop an item from the gripper onto the target
+ *
+ * * target - An `/atom` to drop (move) the item onto
+ * * user - The `/mob` that is dropping it
+ * * feedback - Boolean, if `TRUE` prints a message about the drop
+ */
+/obj/item/gripper/proc/drop(atom/target, mob/user, feedback = TRUE)
+ if(!istype(target))
+ crash_with("The target to drop the item onto is not specified or is incorrect!")
+
+ if(!istype(user))
+ crash_with("The user that is performing the drop is not specified or is incorrect!")
+
+
if(wrapped)
if(wrapped.loc == src)
if(force_holder)
@@ -128,6 +142,7 @@
force_holder = null
if(feedback)
to_chat(loc, SPAN_NOTICE("You release \the [wrapped].")) // loc will always be the cyborg
+
wrapped = null
update_icon()
return TRUE
diff --git a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
index 4101df081c7..a4d989edfef 100644
--- a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
+++ b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
@@ -141,7 +141,7 @@
/obj/item/ship_ammunition/proc/unwield()
wielded = FALSE
-/obj/item/ship_ammunition/dropped(var/mob/living/user)
+/obj/item/ship_ammunition/dropped(mob/user)
..()
if(user)
var/obj/item/offhand/O = user.get_inactive_hand()
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 8be8267e3af..8b64bbf0d4d 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -199,7 +199,7 @@
var/obj/item/paper/P = src[1]
if(istype(loc, /obj/item/gripper)) //Hacky but without it there's a ghost icon with grippers and it all spills on the floor.
var/obj/item/gripper/G = loc
- G.drop(get_turf(src), FALSE)
+ G.drop(get_turf(src), usr, FALSE)
G.grip_item(P, usr, FALSE)
else
usr.put_in_hands(P)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 2169e82ea22..d496d9ffd95 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -834,7 +834,7 @@
/obj/item/gun/on_give()
update_maptext()
-/obj/item/gun/dropped(mob/living/user)
+/obj/item/gun/dropped(mob/user)
..()
queue_icon_update()
//Unwields the item when dropped, deletes the offhand
@@ -878,7 +878,7 @@
else
qdel(src)
-/obj/item/offhand/dropped(mob/living/user)
+/obj/item/offhand/dropped(mob/user)
. = ..()
if(user)
var/obj/item/gun/O = user.get_inactive_hand()
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index fe76d1036e3..f0f75bf22eb 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -221,7 +221,7 @@
connect(backcharge)
-/obj/item/gun/energy/dropped(mob/living/user)
+/obj/item/gun/energy/dropped(mob/user)
. = ..()
if(recharger)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 581e6570d70..a09588c574b 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -373,7 +373,7 @@
to_chat(user, "\The [src] is far too large for you to pick up.")
return
-/obj/item/gun/energy/vaurca/typec/dropped(var/mob/user)
+/obj/item/gun/energy/vaurca/typec/dropped(mob/user)
..()
if(!istype(loc,/mob))
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
diff --git a/code/modules/psionics/equipment/psipower_blade.dm b/code/modules/psionics/equipment/psipower_blade.dm
index aa748370a09..1a2abd2ebf4 100644
--- a/code/modules/psionics/equipment/psipower_blade.dm
+++ b/code/modules/psionics/equipment/psipower_blade.dm
@@ -25,7 +25,7 @@
armor_penetration = 40
icon_state = "psiblade_long"
-/obj/item/psychic_power/psiblade/dropped(var/mob/living/user)
+/obj/item/psychic_power/psiblade/dropped(mob/user)
. = ..()
playsound(loc, 'sound/effects/psi/power_fail.ogg', 30, 1)
QDEL_IN(src, 1)
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 8960a70324f..88b225bf294 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -138,7 +138,7 @@
else if(isrobot(user))
var/obj/item/gripper/G = user.get_active_hand()
if(istype(G))
- G.drop(src, FALSE)
+ G.drop(src, user, FALSE)
if(is_type_in_list(wrapped, G.can_hold))
G.grip_item(wrapped, user, FALSE)
else
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index ad4a1ccb902..affcbbe47c6 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -89,7 +89,7 @@ GLOBAL_LIST_EMPTY(gps_list)
GLOB.moved_event.register(user, src, PROC_REF(update_position))
update_icon()
-/obj/item/device/gps/dropped(var/mob/user)
+/obj/item/device/gps/dropped(mob/user)
..()
if(isturf(loc))
held_by = null
diff --git a/html/changelogs/fluffyghost-fixdrop.yml b/html/changelogs/fluffyghost-fixdrop.yml
new file mode 100644
index 00000000000..5089ee00ffe
--- /dev/null
+++ b/html/changelogs/fluffyghost-fixdrop.yml
@@ -0,0 +1,47 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: FluffyGhost
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "Fixed a runtime with items dropping."
+ - backend: "Added the signal for items dropping specifically."
+ - backend: "DMDoc some functions."
+ - backend: "Added some guards to the borg gripper to ensure proper vars are passed in."
+ - bugfix: "Updated all the functions that call the borg gripper drop to pass in correct parameters."
+ - backend: "Consolidated /obj/item/proc/dropped into a single function (it had an overload at the same level)."
+ - refactor: "Refactored the /obj/item/proc/dropped implementations to respect the parent header."